16
16
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
17
17
*/
18
18
19
- #if defined(TARGET_KL25Z)
19
+ #if defined(TARGET_KL25Z) | defined(TARGET_K64F)
20
20
21
21
#include " USBHAL.h"
22
22
@@ -59,7 +59,7 @@ typedef struct BDT {
59
59
uint8_t dummy; // RSVD: BD[8:15]
60
60
uint16_t byte_count; // BD[16:32]
61
61
uint32_t address; // Addr
62
- } BDT;
62
+ } BDT;
63
63
64
64
65
65
// there are:
@@ -82,10 +82,10 @@ uint32_t USBHAL::endpointReadcore(uint8_t endpoint, uint8_t *buffer) {
82
82
return 0 ;
83
83
}
84
84
85
- USBHAL::USBHAL (void ) {
85
+ USBHAL::USBHAL (void ) {
86
86
// Disable IRQ
87
87
NVIC_DisableIRQ (USB0_IRQn);
88
-
88
+
89
89
// fill in callback array
90
90
epCallback[0 ] = &USBHAL::EP1_OUT_callback;
91
91
epCallback[1 ] = &USBHAL::EP1_IN_callback;
@@ -117,24 +117,24 @@ USBHAL::USBHAL(void) {
117
117
epCallback[27 ] = &USBHAL::EP14_IN_callback;
118
118
epCallback[28 ] = &USBHAL::EP15_OUT_callback;
119
119
epCallback[29 ] = &USBHAL::EP15_IN_callback;
120
-
121
-
120
+
121
+
122
122
// choose usb src as PLL
123
123
SIM->SOPT2 |= (SIM_SOPT2_USBSRC_MASK | SIM_SOPT2_PLLFLLSEL_MASK);
124
-
124
+
125
125
// enable OTG clock
126
126
SIM->SCGC4 |= SIM_SCGC4_USBOTG_MASK;
127
127
128
128
// Attach IRQ
129
129
instance = this ;
130
130
NVIC_SetVector (USB0_IRQn, (uint32_t )&_usbisr);
131
131
NVIC_EnableIRQ (USB0_IRQn);
132
-
132
+
133
133
// USB Module Configuration
134
134
// Reset USB Module
135
135
USB0->USBTRC0 |= USB_USBTRC0_USBRESET_MASK;
136
136
while (USB0->USBTRC0 & USB_USBTRC0_USBRESET_MASK);
137
-
137
+
138
138
// Set BDT Base Register
139
139
USB0->BDTPAGE1 =(uint8_t )((uint32_t )bdt>>8 );
140
140
USB0->BDTPAGE2 =(uint8_t )((uint32_t )bdt>>16 );
@@ -144,14 +144,14 @@ USBHAL::USBHAL(void) {
144
144
USB0->ISTAT = 0xff ;
145
145
146
146
// USB Interrupt Enablers
147
- USB0->INTEN |= USB_INTEN_TOKDNEEN_MASK |
148
- USB_INTEN_SOFTOKEN_MASK |
147
+ USB0->INTEN |= USB_INTEN_TOKDNEEN_MASK |
148
+ USB_INTEN_SOFTOKEN_MASK |
149
149
USB_INTEN_ERROREN_MASK |
150
150
USB_INTEN_USBRSTEN_MASK;
151
-
152
- // Disable weak pull downs
153
- USB0->USBCTRL &= ~(USB_USBCTRL_PDE_MASK | USB_USBCTRL_SUSP_MASK);
154
-
151
+
152
+ // Disable weak pull downs
153
+ USB0->USBCTRL &= ~(USB_USBCTRL_PDE_MASK | USB_USBCTRL_SUSP_MASK);
154
+
155
155
USB0->USBTRC0 |= 0x40 ;
156
156
}
157
157
@@ -296,9 +296,9 @@ EP_STATUS USBHAL::endpointReadResult(uint8_t endpoint, uint8_t * buffer, uint32_
296
296
uint32_t n, sz, idx, setup = 0 ;
297
297
uint8_t not_iso;
298
298
uint8_t * ep_buf;
299
-
299
+
300
300
uint32_t log_endpoint = PHY_TO_LOG (endpoint);
301
-
301
+
302
302
if (endpoint > NUMBER_OF_PHYSICAL_ENDPOINTS - 1 ) {
303
303
return EP_INVALID;
304
304
}
@@ -335,7 +335,7 @@ EP_STATUS USBHAL::endpointReadResult(uint8_t endpoint, uint8_t * buffer, uint32_
335
335
if (((Data1 >> endpoint) & 1 ) == ((bdt[idx].info >> 6 ) & 1 )) {
336
336
if (setup && (buffer[6 ] == 0 )) // if no setup data stage,
337
337
Data1 &= ~1UL ; // set DATA0
338
- else
338
+ else
339
339
Data1 ^= (1 << endpoint);
340
340
}
341
341
@@ -345,7 +345,7 @@ EP_STATUS USBHAL::endpointReadResult(uint8_t endpoint, uint8_t * buffer, uint32_
345
345
else {
346
346
bdt[idx].info = BD_DTS_MASK | BD_OWN_MASK;
347
347
}
348
-
348
+
349
349
USB0->CTL &= ~USB_CTL_TXSUSPENDTOKENBUSY_MASK;
350
350
*bytesRead = sz;
351
351
@@ -368,27 +368,27 @@ EP_STATUS USBHAL::endpointWrite(uint8_t endpoint, uint8_t *data, uint32_t size)
368
368
369
369
idx = EP_BDT_IDX (PHY_TO_LOG (endpoint), TX, 0 );
370
370
bdt[idx].byte_count = size;
371
-
372
-
371
+
372
+
373
373
// non iso endpoint
374
374
if (USB0->ENDPOINT [PHY_TO_LOG (endpoint)].ENDPT & USB_ENDPT_EPHSHK_MASK) {
375
375
ep_buf = endpoint_buffer[idx];
376
376
} else {
377
377
ep_buf = endpoint_buffer_iso[2 ];
378
378
}
379
-
379
+
380
380
for (n = 0 ; n < size; n++) {
381
381
ep_buf[n] = data[n];
382
382
}
383
-
383
+
384
384
if ((Data1 >> endpoint) & 1 ) {
385
385
bdt[idx].info = BD_OWN_MASK | BD_DTS_MASK;
386
386
} else {
387
387
bdt[idx].info = BD_OWN_MASK | BD_DTS_MASK | BD_DATA01_MASK;
388
388
}
389
-
389
+
390
390
Data1 ^= (1 << endpoint);
391
-
391
+
392
392
return EP_PENDING;
393
393
}
394
394
@@ -429,7 +429,7 @@ void USBHAL::usbisr(void) {
429
429
uint8_t istat = USB0->ISTAT ;
430
430
431
431
// reset interrupt
432
- if (istat & USB_ISTAT_USBRST_MASK) {
432
+ if (istat & USB_ISTAT_USBRST_MASK) {
433
433
// disable all endpt
434
434
for (i = 0 ; i < 16 ; i++) {
435
435
USB0->ENDPOINT [i].ENDPT = 0x00 ;
@@ -457,11 +457,11 @@ void USBHAL::usbisr(void) {
457
457
458
458
// SOF interrupt
459
459
if (istat & USB_ISTAT_SOFTOK_MASK) {
460
- USB0->ISTAT = USB_ISTAT_SOFTOK_MASK;
460
+ USB0->ISTAT = USB_ISTAT_SOFTOK_MASK;
461
461
// SOF event, read frame number
462
462
SOF (frameNumber ());
463
463
}
464
-
464
+
465
465
// stall interrupt
466
466
if (istat & 1 <<7 ) {
467
467
if (USB0->ENDPOINT [0 ].ENDPT & USB_ENDPT_EPSTALL_MASK)
@@ -483,7 +483,7 @@ void USBHAL::usbisr(void) {
483
483
484
484
// EP0 SETUP event (SETUP data received)
485
485
EP0setupCallback ();
486
-
486
+
487
487
} else {
488
488
// OUT packet
489
489
if (TOK_PID ((EP_BDT_IDX (num, dir, ev_odd))) == OUT_TOKEN) {
@@ -517,11 +517,11 @@ void USBHAL::usbisr(void) {
517
517
518
518
USB0->ISTAT = USB_ISTAT_TOKDNE_MASK;
519
519
}
520
-
520
+
521
521
// sleep interrupt
522
522
if (istat & 1 <<4 ) {
523
523
USB0->ISTAT |= USB_ISTAT_SLEEP_MASK;
524
- }
524
+ }
525
525
526
526
// error interrupt
527
527
if (istat & USB_ISTAT_ERROR_MASK) {
0 commit comments