|
31 | 31 | //--------------------------------------------------------------------+
|
32 | 32 | // MACRO TYPEDEF CONSTANT ENUM DECLARATION
|
33 | 33 | //--------------------------------------------------------------------+
|
| 34 | +static void usb_hardware_init(void); |
34 | 35 |
|
35 |
| -// Init usb hardware when starting up. Softdevice is not enabled yet |
36 |
| -static void usb_hardware_init(void) |
| 36 | +//--------------------------------------------------------------------+ |
| 37 | +// Core Init & Touch1200 |
| 38 | +//--------------------------------------------------------------------+ |
| 39 | +void Adafruit_TinyUSB_Core_init(void) |
37 | 40 | {
|
38 |
| -#ifdef PIN_LED_TXL |
39 |
| -// txLEDPulse = 0; |
40 |
| - pinMode(PIN_LED_TXL, OUTPUT); |
41 |
| - digitalWrite(PIN_LED_TXL, HIGH); |
42 |
| -#endif |
43 |
| - |
44 |
| -#ifdef PIN_LED_RXL |
45 |
| -// rxLEDPulse = 0; |
46 |
| - pinMode(PIN_LED_RXL, OUTPUT); |
47 |
| - digitalWrite(PIN_LED_RXL, HIGH); |
48 |
| -#endif |
49 |
| - |
50 |
| - /* Enable USB clock */ |
51 |
| -#if defined(__SAMD51__) |
52 |
| - MCLK->APBBMASK.reg |= MCLK_APBBMASK_USB; |
53 |
| - MCLK->AHBMASK.reg |= MCLK_AHBMASK_USB; |
| 41 | + USBDevice.addInterface( (Adafruit_USBD_Interface&) Serial); |
| 42 | + USBDevice.setID(USB_VID, USB_PID); |
| 43 | + USBDevice.begin(); |
54 | 44 |
|
55 |
| - // Set up the USB DP/DN pins |
56 |
| - PORT->Group[0].PINCFG[PIN_PA24H_USB_DM].bit.PMUXEN = 1; |
57 |
| - PORT->Group[0].PMUX[PIN_PA24H_USB_DM/2].reg &= ~(0xF << (4 * (PIN_PA24H_USB_DM & 0x01u))); |
58 |
| - PORT->Group[0].PMUX[PIN_PA24H_USB_DM/2].reg |= MUX_PA24H_USB_DM << (4 * (PIN_PA24H_USB_DM & 0x01u)); |
59 |
| - PORT->Group[0].PINCFG[PIN_PA25H_USB_DP].bit.PMUXEN = 1; |
60 |
| - PORT->Group[0].PMUX[PIN_PA25H_USB_DP/2].reg &= ~(0xF << (4 * (PIN_PA25H_USB_DP & 0x01u))); |
61 |
| - PORT->Group[0].PMUX[PIN_PA25H_USB_DP/2].reg |= MUX_PA25H_USB_DP << (4 * (PIN_PA25H_USB_DP & 0x01u)); |
| 45 | + usb_hardware_init(); |
62 | 46 |
|
| 47 | + // Init tinyusb stack |
| 48 | + tusb_init(); |
| 49 | +} |
63 | 50 |
|
64 |
| - GCLK->PCHCTRL[USB_GCLK_ID].reg = GCLK_PCHCTRL_GEN_GCLK1_Val | (1 << GCLK_PCHCTRL_CHEN_Pos); |
65 |
| -#else |
66 |
| - PM->APBBMASK.reg |= PM_APBBMASK_USB; |
| 51 | +void Adafruit_TinyUSB_Core_touch1200(void) |
| 52 | +{ |
| 53 | + initiateReset(250); |
| 54 | +} |
67 | 55 |
|
68 |
| - // Set up the USB DP/DN pins |
69 |
| - PORT->Group[0].PINCFG[PIN_PA24G_USB_DM].bit.PMUXEN = 1; |
70 |
| - PORT->Group[0].PMUX[PIN_PA24G_USB_DM/2].reg &= ~(0xF << (4 * (PIN_PA24G_USB_DM & 0x01u))); |
71 |
| - PORT->Group[0].PMUX[PIN_PA24G_USB_DM/2].reg |= MUX_PA24G_USB_DM << (4 * (PIN_PA24G_USB_DM & 0x01u)); |
72 |
| - PORT->Group[0].PINCFG[PIN_PA25G_USB_DP].bit.PMUXEN = 1; |
73 |
| - PORT->Group[0].PMUX[PIN_PA25G_USB_DP/2].reg &= ~(0xF << (4 * (PIN_PA25G_USB_DP & 0x01u))); |
74 |
| - PORT->Group[0].PMUX[PIN_PA25G_USB_DP/2].reg |= MUX_PA25G_USB_DP << (4 * (PIN_PA25G_USB_DP & 0x01u)); |
| 56 | +//--------------------------------------------------------------------+ |
| 57 | +// Adafruit_USBD_Device platform dependent |
| 58 | +//--------------------------------------------------------------------+ |
| 59 | +void Adafruit_USBD_Device::detach(void) |
| 60 | +{ |
| 61 | + USB->DEVICE.CTRLB.reg |= USB_DEVICE_CTRLB_DETACH; |
| 62 | +} |
75 | 63 |
|
76 |
| - // Put Generic Clock Generator 0 as source for Generic Clock Multiplexer 6 (USB reference) |
77 |
| - GCLK->CLKCTRL.reg = GCLK_CLKCTRL_ID(6) | // Generic Clock Multiplexer 6 |
78 |
| - GCLK_CLKCTRL_GEN_GCLK0 | // Generic Clock Generator 0 is source |
79 |
| - GCLK_CLKCTRL_CLKEN; |
80 |
| - while (GCLK->STATUS.bit.SYNCBUSY) |
81 |
| - ; |
82 |
| -#endif |
| 64 | +void Adafruit_USBD_Device::attach(void) |
| 65 | +{ |
| 66 | + USB->DEVICE.CTRLB.reg &= ~USB_DEVICE_CTRLB_DETACH; |
83 | 67 | }
|
84 | 68 |
|
85 |
| -uint8_t load_serial_number(uint16_t* serial_str) |
| 69 | +uint8_t Adafruit_USBD_Device::getSerialDescriptor(uint16_t* serial_str) |
86 | 70 | {
|
87 | 71 | enum { SERIAL_BYTE_LEN = 16 };
|
88 | 72 |
|
@@ -116,46 +100,71 @@ uint8_t load_serial_number(uint16_t* serial_str)
|
116 | 100 | return sizeof(raw_id)*2;
|
117 | 101 | }
|
118 | 102 |
|
119 |
| -void Adafruit_TinyUSB_Core_init(void) |
120 |
| -{ |
121 |
| - USBDevice.addInterface( (Adafruit_USBD_Interface&) Serial); |
122 |
| - USBDevice.setID(USB_VID, USB_PID); |
123 |
| - USBDevice.begin(); |
124 | 103 |
|
125 |
| - usb_hardware_init(); |
| 104 | +extern "C" |
| 105 | +{ |
126 | 106 |
|
127 |
| - // Init tinyusb stack |
128 |
| - tusb_init(); |
| 107 | +// running tinyusb background task if yield() |
| 108 | +void yield(void) |
| 109 | +{ |
| 110 | + tud_task(); |
| 111 | + tud_cdc_write_flush(); |
129 | 112 | }
|
130 | 113 |
|
131 |
| -void Adafruit_TinyUSB_Core_touch1200(void) |
132 |
| -{ |
133 |
| - initiateReset(250); |
134 | 114 | }
|
135 | 115 |
|
136 | 116 | //--------------------------------------------------------------------+
|
137 |
| -// |
| 117 | +// Helpers |
138 | 118 | //--------------------------------------------------------------------+
|
139 | 119 |
|
140 |
| -void Adafruit_USBD_Device::detach(void) |
| 120 | +// Init usb hardware when starting up. Softdevice is not enabled yet |
| 121 | +static void usb_hardware_init(void) |
141 | 122 | {
|
142 |
| - USB->DEVICE.CTRLB.reg |= USB_DEVICE_CTRLB_DETACH; |
143 |
| -} |
| 123 | +#ifdef PIN_LED_TXL |
| 124 | +// txLEDPulse = 0; |
| 125 | + pinMode(PIN_LED_TXL, OUTPUT); |
| 126 | + digitalWrite(PIN_LED_TXL, HIGH); |
| 127 | +#endif |
144 | 128 |
|
145 |
| -void Adafruit_USBD_Device::attach(void) |
146 |
| -{ |
147 |
| - USB->DEVICE.CTRLB.reg &= ~USB_DEVICE_CTRLB_DETACH; |
148 |
| -} |
| 129 | +#ifdef PIN_LED_RXL |
| 130 | +// rxLEDPulse = 0; |
| 131 | + pinMode(PIN_LED_RXL, OUTPUT); |
| 132 | + digitalWrite(PIN_LED_RXL, HIGH); |
| 133 | +#endif |
149 | 134 |
|
150 |
| -extern "C" |
151 |
| -{ |
| 135 | + /* Enable USB clock */ |
| 136 | +#if defined(__SAMD51__) |
| 137 | + MCLK->APBBMASK.reg |= MCLK_APBBMASK_USB; |
| 138 | + MCLK->AHBMASK.reg |= MCLK_AHBMASK_USB; |
152 | 139 |
|
153 |
| -void yield(void) |
154 |
| -{ |
155 |
| - tud_task(); |
156 |
| - tud_cdc_write_flush(); |
157 |
| -} |
| 140 | + // Set up the USB DP/DN pins |
| 141 | + PORT->Group[0].PINCFG[PIN_PA24H_USB_DM].bit.PMUXEN = 1; |
| 142 | + PORT->Group[0].PMUX[PIN_PA24H_USB_DM/2].reg &= ~(0xF << (4 * (PIN_PA24H_USB_DM & 0x01u))); |
| 143 | + PORT->Group[0].PMUX[PIN_PA24H_USB_DM/2].reg |= MUX_PA24H_USB_DM << (4 * (PIN_PA24H_USB_DM & 0x01u)); |
| 144 | + PORT->Group[0].PINCFG[PIN_PA25H_USB_DP].bit.PMUXEN = 1; |
| 145 | + PORT->Group[0].PMUX[PIN_PA25H_USB_DP/2].reg &= ~(0xF << (4 * (PIN_PA25H_USB_DP & 0x01u))); |
| 146 | + PORT->Group[0].PMUX[PIN_PA25H_USB_DP/2].reg |= MUX_PA25H_USB_DP << (4 * (PIN_PA25H_USB_DP & 0x01u)); |
| 147 | + |
| 148 | + |
| 149 | + GCLK->PCHCTRL[USB_GCLK_ID].reg = GCLK_PCHCTRL_GEN_GCLK1_Val | (1 << GCLK_PCHCTRL_CHEN_Pos); |
| 150 | +#else |
| 151 | + PM->APBBMASK.reg |= PM_APBBMASK_USB; |
158 | 152 |
|
| 153 | + // Set up the USB DP/DN pins |
| 154 | + PORT->Group[0].PINCFG[PIN_PA24G_USB_DM].bit.PMUXEN = 1; |
| 155 | + PORT->Group[0].PMUX[PIN_PA24G_USB_DM/2].reg &= ~(0xF << (4 * (PIN_PA24G_USB_DM & 0x01u))); |
| 156 | + PORT->Group[0].PMUX[PIN_PA24G_USB_DM/2].reg |= MUX_PA24G_USB_DM << (4 * (PIN_PA24G_USB_DM & 0x01u)); |
| 157 | + PORT->Group[0].PINCFG[PIN_PA25G_USB_DP].bit.PMUXEN = 1; |
| 158 | + PORT->Group[0].PMUX[PIN_PA25G_USB_DP/2].reg &= ~(0xF << (4 * (PIN_PA25G_USB_DP & 0x01u))); |
| 159 | + PORT->Group[0].PMUX[PIN_PA25G_USB_DP/2].reg |= MUX_PA25G_USB_DP << (4 * (PIN_PA25G_USB_DP & 0x01u)); |
| 160 | + |
| 161 | + // Put Generic Clock Generator 0 as source for Generic Clock Multiplexer 6 (USB reference) |
| 162 | + GCLK->CLKCTRL.reg = GCLK_CLKCTRL_ID(6) | // Generic Clock Multiplexer 6 |
| 163 | + GCLK_CLKCTRL_GEN_GCLK0 | // Generic Clock Generator 0 is source |
| 164 | + GCLK_CLKCTRL_CLKEN; |
| 165 | + while (GCLK->STATUS.bit.SYNCBUSY) |
| 166 | + ; |
| 167 | +#endif |
159 | 168 | }
|
160 | 169 |
|
161 | 170 | #endif // USE_TINYUSB
|
0 commit comments