Browse Source

Workaround for USB memory bandwidth at very slow CPU speeds

main
PaulStoffregen 4 years ago
parent
commit
e5a9b19465
2 changed files with 17 additions and 0 deletions
  1. +8
    -0
      teensy4/usb_desc.c
  2. +9
    -0
      teensy4/usb_serial.c

+ 8
- 0
teensy4/usb_desc.c View File

#include "avr_functions.h" #include "avr_functions.h"
#include "avr/pgmspace.h" #include "avr/pgmspace.h"


// At very slow CPU speeds, the OCRAM just isn't fast enough for
// USB to work reliably. But the precious/limited DTCM is. So
// as an ugly workaround, undefine DMAMEM so all buffers which
// would normally be allocated in OCRAM are placed in DTCM.
#if defined(F_CPU) && F_CPU < 30000000
#undef DMAMEM
#endif

// USB Descriptors are binary data which the USB host reads to // USB Descriptors are binary data which the USB host reads to
// automatically detect a USB device's capabilities. The format // automatically detect a USB device's capabilities. The format
// and meaning of every field is documented in numerous USB // and meaning of every field is documented in numerous USB

+ 9
- 0
teensy4/usb_serial.c View File

#if defined(CDC_STATUS_INTERFACE) && defined(CDC_DATA_INTERFACE) #if defined(CDC_STATUS_INTERFACE) && defined(CDC_DATA_INTERFACE)
//#if F_CPU >= 20000000 //#if F_CPU >= 20000000


// At very slow CPU speeds, the OCRAM just isn't fast enough for
// USB to work reliably. But the precious/limited DTCM is. So
// as an ugly workaround, undefine DMAMEM so all buffers which
// would normally be allocated in OCRAM are placed in DTCM.
#if defined(F_CPU) && F_CPU < 30000000
#undef DMAMEM
#define DMAMEM
#endif

uint32_t usb_cdc_line_coding[2]; uint32_t usb_cdc_line_coding[2];
volatile uint32_t usb_cdc_line_rtsdtr_millis; volatile uint32_t usb_cdc_line_rtsdtr_millis;
volatile uint8_t usb_cdc_line_rtsdtr=0; volatile uint8_t usb_cdc_line_rtsdtr=0;

Loading…
Cancel
Save