mirror of
https://github.com/hathach/tinyusb.git
synced 2025-01-31 05:52:55 +08:00
renesas: Add support for dcd_sof_enable().
This commit is contained in:
parent
160cd79fdb
commit
087fe79e2c
@ -29,10 +29,6 @@
|
|||||||
|
|
||||||
#if CFG_TUD_ENABLED && defined(TUP_USBIP_RUSB2)
|
#if CFG_TUD_ENABLED && defined(TUP_USBIP_RUSB2)
|
||||||
|
|
||||||
// Since TinyUSB doesn't use SOF for now, and this interrupt too often (1ms interval)
|
|
||||||
// We disable SOF for now until needed later on
|
|
||||||
#define USE_SOF 0
|
|
||||||
|
|
||||||
#include "device/dcd.h"
|
#include "device/dcd.h"
|
||||||
#include "rusb2_type.h"
|
#include "rusb2_type.h"
|
||||||
|
|
||||||
@ -74,6 +70,8 @@ typedef struct
|
|||||||
{
|
{
|
||||||
pipe_state_t pipe[PIPE_COUNT];
|
pipe_state_t pipe[PIPE_COUNT];
|
||||||
uint8_t ep[2][16]; /* a lookup table for a pipe index from an endpoint address */
|
uint8_t ep[2][16]; /* a lookup table for a pipe index from an endpoint address */
|
||||||
|
// Track whether sof has been manually enabled
|
||||||
|
bool sof_enabled;
|
||||||
} dcd_data_t;
|
} dcd_data_t;
|
||||||
|
|
||||||
static dcd_data_t _dcd;
|
static dcd_data_t _dcd;
|
||||||
@ -664,6 +662,10 @@ 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);
|
||||||
|
|
||||||
|
// We disable SOF for now until needed later on.
|
||||||
|
// Since TinyUSB doesn't use SOF for now, and this interrupt often (1ms interval)
|
||||||
|
_dcd.sof_enabled = false;
|
||||||
|
|
||||||
#ifdef RUSB2_SUPPORT_HIGHSPEED
|
#ifdef RUSB2_SUPPORT_HIGHSPEED
|
||||||
if ( rusb2_is_highspeed_rhport(rhport) ) {
|
if ( rusb2_is_highspeed_rhport(rhport) ) {
|
||||||
rusb->SYSCFG_b.HSE = 1;
|
rusb->SYSCFG_b.HSE = 1;
|
||||||
@ -708,7 +710,7 @@ void dcd_init(uint8_t rhport)
|
|||||||
|
|
||||||
rusb->INTSTS0 = 0;
|
rusb->INTSTS0 = 0;
|
||||||
rusb->INTENB0 = RUSB2_INTSTS0_VBINT_Msk | RUSB2_INTSTS0_BRDY_Msk | RUSB2_INTSTS0_BEMP_Msk |
|
rusb->INTENB0 = RUSB2_INTSTS0_VBINT_Msk | RUSB2_INTSTS0_BRDY_Msk | RUSB2_INTSTS0_BEMP_Msk |
|
||||||
RUSB2_INTSTS0_DVST_Msk | RUSB2_INTSTS0_CTRT_Msk | (USE_SOF ? RUSB2_INTSTS0_SOFR_Msk : 0) |
|
RUSB2_INTSTS0_DVST_Msk | RUSB2_INTSTS0_CTRT_Msk | (_dcd.sof_enabled ? RUSB2_INTSTS0_SOFR_Msk : 0) |
|
||||||
RUSB2_INTSTS0_RESM_Msk;
|
RUSB2_INTSTS0_RESM_Msk;
|
||||||
rusb->BEMPENB = 1;
|
rusb->BEMPENB = 1;
|
||||||
rusb->BRDYENB = 1;
|
rusb->BRDYENB = 1;
|
||||||
@ -756,10 +758,9 @@ void dcd_disconnect(uint8_t rhport)
|
|||||||
|
|
||||||
void dcd_sof_enable(uint8_t rhport, bool en)
|
void dcd_sof_enable(uint8_t rhport, bool en)
|
||||||
{
|
{
|
||||||
(void) rhport;
|
rusb2_reg_t* rusb = RUSB2_REG(rhport);
|
||||||
(void) en;
|
_dcd.sof_enabled = en;
|
||||||
|
rusb->INTENB0_b.SOFE = en ? 1: 0;
|
||||||
// TODO implement later
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
@ -949,18 +950,19 @@ void dcd_int_handler(uint8_t rhport)
|
|||||||
// Resumed
|
// Resumed
|
||||||
if ( is0 & RUSB2_INTSTS0_RESM_Msk ) {
|
if ( is0 & RUSB2_INTSTS0_RESM_Msk ) {
|
||||||
dcd_event_bus_signal(rhport, DCD_EVENT_RESUME, true);
|
dcd_event_bus_signal(rhport, DCD_EVENT_RESUME, true);
|
||||||
#if (0 == USE_SOF)
|
if (!_dcd.sof_enabled) {
|
||||||
rusb->INTENB0_b.SOFE = 0;
|
rusb->INTENB0_b.SOFE = 0;
|
||||||
#endif
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// SOF received
|
// SOF received
|
||||||
if ( (is0 & RUSB2_INTSTS0_SOFR_Msk) && rusb->INTENB0_b.SOFE ) {
|
if ( (is0 & RUSB2_INTSTS0_SOFR_Msk) && rusb->INTENB0_b.SOFE ) {
|
||||||
// USBD will exit suspended mode when SOF event is received
|
// USBD will exit suspended mode when SOF event is received
|
||||||
dcd_event_bus_signal(rhport, DCD_EVENT_SOF, true);
|
const uint32_t frame = rusb->FRMNUM_b.FRNM;
|
||||||
#if (0 == USE_SOF)
|
dcd_event_sof(rhport, frame, true);
|
||||||
rusb->INTENB0_b.SOFE = 0;
|
if (!_dcd.sof_enabled) {
|
||||||
#endif
|
rusb->INTENB0_b.SOFE = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Device state changes
|
// Device state changes
|
||||||
@ -979,9 +981,9 @@ void dcd_int_handler(uint8_t rhport)
|
|||||||
case RUSB2_INTSTS0_DVSQ_STATE_SUSP2:
|
case RUSB2_INTSTS0_DVSQ_STATE_SUSP2:
|
||||||
case RUSB2_INTSTS0_DVSQ_STATE_SUSP3:
|
case RUSB2_INTSTS0_DVSQ_STATE_SUSP3:
|
||||||
dcd_event_bus_signal(rhport, DCD_EVENT_SUSPEND, true);
|
dcd_event_bus_signal(rhport, DCD_EVENT_SUSPEND, true);
|
||||||
#if (0 == USE_SOF)
|
if (!_dcd.sof_enabled) {
|
||||||
rusb->INTENB0_b.SOFE = 1;
|
rusb->INTENB0_b.SOFE = 1;
|
||||||
#endif
|
}
|
||||||
|
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user