updating hcd rusb2
- make osal_task_delay() as weak function in usbh - implement osal_task_delay() in hcd rusb2 (may moved to other places)
This commit is contained in:
@@ -8,5 +8,6 @@ mcu:RP2040
|
|||||||
mcu:SAMD11
|
mcu:SAMD11
|
||||||
mcu:SAMX7X
|
mcu:SAMX7X
|
||||||
mcu:VALENTYUSB_EPTRI
|
mcu:VALENTYUSB_EPTRI
|
||||||
|
mcu:RAXXX
|
||||||
family:broadcom_32bit
|
family:broadcom_32bit
|
||||||
family:broadcom_64bit
|
family:broadcom_64bit
|
||||||
|
@@ -8,5 +8,6 @@ mcu:RP2040
|
|||||||
mcu:SAMD11
|
mcu:SAMD11
|
||||||
mcu:SAMX7X
|
mcu:SAMX7X
|
||||||
mcu:VALENTYUSB_EPTRI
|
mcu:VALENTYUSB_EPTRI
|
||||||
|
mcu:RAXXX
|
||||||
family:broadcom_32bit
|
family:broadcom_32bit
|
||||||
family:broadcom_64bit
|
family:broadcom_64bit
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
board:mimxrt1060_evk
|
board:mimxrt1060_evk
|
||||||
board:mimxrt1064_evk
|
board:mimxrt1064_evk
|
||||||
mcu:RP2040
|
mcu:RP2040
|
||||||
|
mcu:ra6m5
|
||||||
|
@@ -3,15 +3,20 @@ set(MCU_VARIANT ra6m5)
|
|||||||
|
|
||||||
set(JLINK_DEVICE R7FA6M5BH)
|
set(JLINK_DEVICE R7FA6M5BH)
|
||||||
|
|
||||||
# default to PORT1 Highspeed
|
# Device port default to PORT1 Highspeed
|
||||||
if (NOT DEFINED PORT)
|
if (NOT DEFINED PORT)
|
||||||
set(PORT 1)
|
set(PORT 1)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# Host port will be the other port
|
||||||
|
set(HOST_PORT $<NOT:${PORT}>)
|
||||||
|
|
||||||
function(update_board TARGET)
|
function(update_board TARGET)
|
||||||
target_compile_definitions(${TARGET} PUBLIC
|
target_compile_definitions(${TARGET} PUBLIC
|
||||||
BOARD_TUD_RHPORT=${PORT}
|
BOARD_TUD_RHPORT=${PORT}
|
||||||
|
BOARD_TUH_RHPORT=${HOST_PORT}
|
||||||
# port 0 is fullspeed, port 1 is highspeed
|
# port 0 is fullspeed, port 1 is highspeed
|
||||||
BOARD_TUD_MAX_SPEED=$<IF:${PORT},OPT_MODE_HIGH_SPEED,OPT_MODE_FULL_SPEED>
|
BOARD_TUD_MAX_SPEED=$<IF:${PORT},OPT_MODE_HIGH_SPEED,OPT_MODE_FULL_SPEED>
|
||||||
|
BOARD_TUH_MAX_SPEED=$<IF:${HOST_PORT},OPT_MODE_HIGH_SPEED,OPT_MODE_FULL_SPEED>
|
||||||
)
|
)
|
||||||
endfunction()
|
endfunction()
|
||||||
|
@@ -13,7 +13,7 @@ include(${CMAKE_CURRENT_LIST_DIR}/boards/${BOARD}/board.cmake)
|
|||||||
|
|
||||||
set(CMAKE_TOOLCHAIN_FILE ${TOP}/tools/cmake/toolchain/arm_${TOOLCHAIN}.cmake)
|
set(CMAKE_TOOLCHAIN_FILE ${TOP}/tools/cmake/toolchain/arm_${TOOLCHAIN}.cmake)
|
||||||
|
|
||||||
set(FAMILY_MCUS RAXXX CACHE INTERNAL "")
|
set(FAMILY_MCUS RAXXX ${MCU_VARIANT} CACHE INTERNAL "")
|
||||||
|
|
||||||
#------------------------------------
|
#------------------------------------
|
||||||
# BOARD_TARGET
|
# BOARD_TARGET
|
||||||
|
@@ -256,7 +256,7 @@ static bool usbh_control_xfer_cb (uint8_t daddr, uint8_t ep_addr, xfer_result_t
|
|||||||
|
|
||||||
#if CFG_TUSB_OS == OPT_OS_NONE
|
#if CFG_TUSB_OS == OPT_OS_NONE
|
||||||
// TODO rework time-related function later
|
// TODO rework time-related function later
|
||||||
void osal_task_delay(uint32_t msec)
|
TU_ATTR_WEAK void osal_task_delay(uint32_t msec)
|
||||||
{
|
{
|
||||||
const uint32_t start = hcd_frame_number(_usbh_controller);
|
const uint32_t start = hcd_frame_number(_usbh_controller);
|
||||||
while ( ( hcd_frame_number(_usbh_controller) - start ) < msec ) {}
|
while ( ( hcd_frame_number(_usbh_controller) - start ) < msec ) {}
|
||||||
|
@@ -27,12 +27,12 @@
|
|||||||
|
|
||||||
#include "tusb_option.h"
|
#include "tusb_option.h"
|
||||||
|
|
||||||
|
#if CFG_TUD_ENABLED && defined(TUP_USBIP_RUSB2)
|
||||||
|
|
||||||
// Since TinyUSB doesn't use SOF for now, and this interrupt too often (1ms interval)
|
// Since TinyUSB doesn't use SOF for now, and this interrupt too often (1ms interval)
|
||||||
// We disable SOF for now until needed later on
|
// We disable SOF for now until needed later on
|
||||||
#define USE_SOF 0
|
#define USE_SOF 0
|
||||||
|
|
||||||
#if CFG_TUD_ENABLED && defined(TUP_USBIP_RUSB2)
|
|
||||||
|
|
||||||
#include "device/dcd.h"
|
#include "device/dcd.h"
|
||||||
#include "rusb2_type.h"
|
#include "rusb2_type.h"
|
||||||
|
|
||||||
@@ -53,6 +53,13 @@
|
|||||||
#error "Unsupported MCU"
|
#error "Unsupported MCU"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------+
|
||||||
|
// Application API for setting IRQ number
|
||||||
|
//--------------------------------------------------------------------+
|
||||||
|
void tud_int_set_irqnum(uint8_t rhport, int32_t irqnum) {
|
||||||
|
rusb2_controller[rhport].irqnum = irqnum;
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
// MACRO TYPEDEF CONSTANT ENUM
|
// MACRO TYPEDEF CONSTANT ENUM
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
@@ -681,7 +688,6 @@ static void enable_interrupt(uint32_t pswi)
|
|||||||
void dcd_init(uint8_t rhport)
|
void dcd_init(uint8_t rhport)
|
||||||
{
|
{
|
||||||
rusb2_reg_t* rusb = RUSB2_REG(rhport);
|
rusb2_reg_t* rusb = RUSB2_REG(rhport);
|
||||||
|
|
||||||
rusb2_module_start(rhport, true);
|
rusb2_module_start(rhport, true);
|
||||||
|
|
||||||
#ifdef RUSB2_SUPPORT_HIGHSPEED
|
#ifdef RUSB2_SUPPORT_HIGHSPEED
|
||||||
|
@@ -27,8 +27,7 @@
|
|||||||
|
|
||||||
#include "tusb_option.h"
|
#include "tusb_option.h"
|
||||||
|
|
||||||
#if CFG_TUH_ENABLED && (TU_CHECK_MCU(OPT_MCU_RX63X, OPT_MCU_RX65X, OPT_MCU_RX72N) || \
|
#if CFG_TUH_ENABLED && defined(TUP_USBIP_RUSB2)
|
||||||
TU_CHECK_MCU(OPT_MCU_RAXXX))
|
|
||||||
|
|
||||||
#include "host/hcd.h"
|
#include "host/hcd.h"
|
||||||
#include "rusb2_type.h"
|
#include "rusb2_type.h"
|
||||||
@@ -41,8 +40,14 @@
|
|||||||
|
|
||||||
#if TU_CHECK_MCU(OPT_MCU_RX63X, OPT_MCU_RX65X, OPT_MCU_RX72N)
|
#if TU_CHECK_MCU(OPT_MCU_RX63X, OPT_MCU_RX65X, OPT_MCU_RX72N)
|
||||||
#include "rusb2_rx.h"
|
#include "rusb2_rx.h"
|
||||||
|
|
||||||
#elif TU_CHECK_MCU(OPT_MCU_RAXXX)
|
#elif TU_CHECK_MCU(OPT_MCU_RAXXX)
|
||||||
#include "rusb2_ra.h"
|
#include "rusb2_ra.h"
|
||||||
|
|
||||||
|
void osal_task_delay(uint32_t msec) {
|
||||||
|
R_BSP_SoftwareDelay(msec, BSP_DELAY_UNITS_MILLISECONDS);
|
||||||
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#error "Unsupported MCU"
|
#error "Unsupported MCU"
|
||||||
#endif
|
#endif
|
||||||
@@ -67,19 +72,6 @@
|
|||||||
TU_ATTR_PACKED_BEGIN
|
TU_ATTR_PACKED_BEGIN
|
||||||
TU_ATTR_BIT_FIELD_ORDER_BEGIN
|
TU_ATTR_BIT_FIELD_ORDER_BEGIN
|
||||||
|
|
||||||
typedef struct TU_ATTR_PACKED {
|
|
||||||
union {
|
|
||||||
struct {
|
|
||||||
uint16_t : 8;
|
|
||||||
uint16_t TRCLR: 1;
|
|
||||||
uint16_t TRENB: 1;
|
|
||||||
uint16_t : 0;
|
|
||||||
};
|
|
||||||
uint16_t TRE;
|
|
||||||
};
|
|
||||||
uint16_t TRN;
|
|
||||||
} reg_pipetre_t;
|
|
||||||
|
|
||||||
typedef union TU_ATTR_PACKED {
|
typedef union TU_ATTR_PACKED {
|
||||||
struct {
|
struct {
|
||||||
volatile uint16_t u8: 8;
|
volatile uint16_t u8: 8;
|
||||||
@@ -308,8 +300,9 @@ static bool pipe_xfer_out(unsigned num)
|
|||||||
pipe_write_packet(buf, (volatile void*)&RUSB2->D0FIFO, len);
|
pipe_write_packet(buf, (volatile void*)&RUSB2->D0FIFO, len);
|
||||||
pipe->buf = (uint8_t*)buf + len;
|
pipe->buf = (uint8_t*)buf + len;
|
||||||
}
|
}
|
||||||
if (len < mps)
|
if (len < mps) {
|
||||||
RUSB2->D0FIFOCTR = RUSB2_CFIFOCTR_BVAL_Msk;
|
RUSB2->D0FIFOCTR = RUSB2_CFIFOCTR_BVAL_Msk;
|
||||||
|
}
|
||||||
RUSB2->D0FIFOSEL = 0;
|
RUSB2->D0FIFOSEL = 0;
|
||||||
while (RUSB2->D0FIFOSEL_b.CURPIPE) ; /* if CURPIPE bits changes, check written value */
|
while (RUSB2->D0FIFOSEL_b.CURPIPE) ; /* if CURPIPE bits changes, check written value */
|
||||||
pipe->remaining = rem - len;
|
pipe->remaining = rem - len;
|
||||||
@@ -488,60 +481,60 @@ static void enable_interrupt(uint32_t pswi)
|
|||||||
|
|
||||||
bool hcd_init(uint8_t rhport)
|
bool hcd_init(uint8_t rhport)
|
||||||
{
|
{
|
||||||
(void)rhport;
|
rusb2_reg_t* rusb = RUSB2_REG(rhport);
|
||||||
|
rusb2_module_start(rhport, true);
|
||||||
|
|
||||||
#if (CFG_TUSB_RHPORT1_MODE & OPT_MODE_HOST)
|
#ifdef RUSB2_SUPPORT_HIGHSPEED
|
||||||
RUSB2->SYSCFG_b.HSE = 1;
|
if (rusb2_is_highspeed_rhport(rhport) ) {
|
||||||
RUSB2->PHYSET_b.HSEB = 0;
|
rusb->SYSCFG_b.HSE = 1;
|
||||||
RUSB2->PHYSET_b.DIRPD = 0;
|
rusb->PHYSET_b.HSEB = 0;
|
||||||
|
rusb->PHYSET_b.DIRPD = 0;
|
||||||
R_BSP_SoftwareDelay((uint32_t) 1, BSP_DELAY_UNITS_MILLISECONDS);
|
R_BSP_SoftwareDelay((uint32_t) 1, BSP_DELAY_UNITS_MILLISECONDS);
|
||||||
RUSB2->PHYSET_b.PLLRESET = 0;
|
rusb->PHYSET_b.PLLRESET = 0;
|
||||||
RUSB2->LPSTS_b.SUSPENDM = 1;
|
rusb->LPSTS_b.SUSPENDM = 1;
|
||||||
while (!RUSB2->PLLSTA_b.PLLLOCK);
|
while ( !rusb->PLLSTA_b.PLLLOCK );
|
||||||
RUSB2->SYSCFG_b.DRPD = 1;
|
rusb->SYSCFG_b.DRPD = 1;
|
||||||
RUSB2->SYSCFG_b.DCFM = 1;
|
rusb->SYSCFG_b.DCFM = 1;
|
||||||
RUSB2->SYSCFG_b.DPRPU = 0;
|
rusb->SYSCFG_b.DPRPU = 0;
|
||||||
RUSB2->SYSCFG_b.CNEN = 1;
|
rusb->SYSCFG_b.CNEN = 1;
|
||||||
RUSB2->BUSWAIT |= 0x0F00U;
|
rusb->BUSWAIT |= 0x0F00U;
|
||||||
RUSB2->SOFCFG_b.INTL = 1;
|
rusb->SOFCFG_b.INTL = 1;
|
||||||
RUSB2->DVSTCTR0_b.VBUSEN = 1;
|
rusb->DVSTCTR0_b.VBUSEN = 1;
|
||||||
RUSB2->CFIFOSEL_b.MBW = 1;
|
rusb->CFIFOSEL_b.MBW = 1;
|
||||||
RUSB2->D0FIFOSEL_b.MBW = 1;
|
rusb->D0FIFOSEL_b.MBW = 1;
|
||||||
RUSB2->D1FIFOSEL_b.MBW = 1;
|
rusb->D1FIFOSEL_b.MBW = 1;
|
||||||
RUSB2->INTSTS0 = 0;
|
rusb->INTSTS0 = 0;
|
||||||
for ( volatile int i = 0; i < 30000; ++i );
|
for ( volatile int i = 0; i < 30000; ++i );
|
||||||
RUSB2->SYSCFG_b.USBE = 1;
|
rusb->SYSCFG_b.USBE = 1;
|
||||||
#else
|
} else
|
||||||
/* HOST DEVICE Full SPEED */
|
|
||||||
RUSB2->SYSCFG_b.SCKE = 1; /* USB Clock enable */
|
|
||||||
while (!RUSB2->SYSCFG_b.SCKE) ;
|
|
||||||
RUSB2->SYSCFG_b.DPRPU = 0; /* D+ pull up enable - 0/disable in host mode */
|
|
||||||
RUSB2->SYSCFG_b.DRPD = 1; /* D+/D- pull down - 1/in Host mode (pag.834)*/
|
|
||||||
RUSB2->SYSCFG_b.DCFM = 1; /* HOST or Device - 1/HOST */
|
|
||||||
|
|
||||||
RUSB2->DVSTCTR0_b.VBUSEN = 1;
|
|
||||||
|
|
||||||
RUSB2->SYSCFG_b.DRPD = 1;
|
|
||||||
for (volatile int i = 0; i < 30000; ++i) ;
|
|
||||||
RUSB2->SYSCFG_b.USBE = 1;
|
|
||||||
#endif
|
#endif
|
||||||
|
{
|
||||||
|
rusb->SYSCFG_b.SCKE = 1;
|
||||||
|
while ( !rusb->SYSCFG_b.SCKE ) {}
|
||||||
|
rusb->SYSCFG_b.DCFM = 1; // Host function
|
||||||
|
rusb->SYSCFG_b.DPRPU = 0; // Disable D+ pull up
|
||||||
|
rusb->SYSCFG_b.DRPD = 1; // Enable D+/D- pull down
|
||||||
|
|
||||||
|
rusb->DVSTCTR0_b.VBUSEN = 1;
|
||||||
|
for ( volatile int i = 0; i < 30000; ++i ) {} // FIXME do we need to wait here? how long ?
|
||||||
|
//R_BSP_SoftwareDelay(10, BSP_DELAY_UNITS_MILLISECONDS);
|
||||||
|
rusb->SYSCFG_b.USBE = 1;
|
||||||
|
|
||||||
// MCU specific PHY init
|
// MCU specific PHY init
|
||||||
rusb2_phy_init();
|
rusb2_phy_init();
|
||||||
|
|
||||||
#if (CFG_TUSB_RHPORT0_MODE & OPT_MODE_HOST)
|
rusb->PHYSLEW = 0x5;
|
||||||
RUSB2->PHYSLEW = 0x5;
|
rusb->DPUSR0R_FS_b.FIXPHY0 = 0u; /* Transceiver Output fixed */
|
||||||
RUSB2->DPUSR0R_FS_b.FIXPHY0 = 0u; /* Transceiver Output fixed */
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Setup default control pipe */
|
/* Setup default control pipe */
|
||||||
RUSB2->DCPCFG = RUSB2_PIPECFG_SHTNAK_Msk;
|
rusb->DCPCFG = RUSB2_PIPECFG_SHTNAK_Msk;
|
||||||
RUSB2->DCPMAXP = 64;
|
rusb->DCPMAXP = 64;
|
||||||
RUSB2->INTENB0 = RUSB2_INTSTS0_BRDY_Msk | RUSB2_INTSTS0_NRDY_Msk | RUSB2_INTSTS0_BEMP_Msk;
|
rusb->INTENB0 = RUSB2_INTSTS0_BRDY_Msk | RUSB2_INTSTS0_NRDY_Msk | RUSB2_INTSTS0_BEMP_Msk;
|
||||||
RUSB2->INTENB1 = RUSB2_INTSTS1_SACK_Msk | RUSB2_INTSTS1_SIGN_Msk | RUSB2_INTSTS1_ATTCH_Msk | RUSB2_INTSTS1_DTCH_Msk;
|
rusb->INTENB1 = RUSB2_INTSTS1_SACK_Msk | RUSB2_INTSTS1_SIGN_Msk | RUSB2_INTSTS1_ATTCH_Msk | RUSB2_INTSTS1_DTCH_Msk;
|
||||||
RUSB2->BEMPENB = 1;
|
rusb->BEMPENB = 1;
|
||||||
RUSB2->NRDYENB = 1;
|
rusb->NRDYENB = 1;
|
||||||
RUSB2->BRDYENB = 1;
|
rusb->BRDYENB = 1;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@@ -106,13 +106,6 @@ TU_ATTR_ALWAYS_INLINE static inline void rusb2_int_disable(uint8_t rhport) {
|
|||||||
TU_ATTR_ALWAYS_INLINE static inline void rusb2_phy_init(void) {
|
TU_ATTR_ALWAYS_INLINE static inline void rusb2_phy_init(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
|
||||||
// Application API for setting IRQ number
|
|
||||||
//--------------------------------------------------------------------+
|
|
||||||
void tud_int_set_irqnum(uint8_t rhport, int32_t irqnum) {
|
|
||||||
rusb2_controller[rhport].irqnum = irqnum;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user