]> git.gir.st - tmk_keyboard.git/blob - tool/mbed/mbed-sdk/libraries/USBHost/USBHost/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/common/usb1_host_lib.c
Squashed 'tmk_core/' changes from 7967731..b9e0ea0
[tmk_keyboard.git] / tool / mbed / mbed-sdk / libraries / USBHost / USBHost / TARGET_RENESAS / TARGET_RZ_A1H / usb1 / src / common / usb1_host_lib.c
1 /*******************************************************************************
2 * DISCLAIMER
3 * This software is supplied by Renesas Electronics Corporation and is only
4 * intended for use with Renesas products. No other uses are authorized. This
5 * software is owned by Renesas Electronics Corporation and is protected under
6 * all applicable laws, including copyright laws.
7 * THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
8 * THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
9 * LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
10 * AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
11 * TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
12 * ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
13 * FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
14 * ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
15 * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
16 * Renesas reserves the right, without notice, to make changes to this software
17 * and to discontinue the availability of this software. By using this software,
18 * you agree to the additional terms and conditions found by accessing the
19 * following link:
20 * http://www.renesas.com/disclaimer
21 * Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
22 *******************************************************************************/
23 /*******************************************************************************
24 * File Name : usb1_host_lib.c
25 * $Rev: 1116 $
26 * $Date:: 2014-07-09 16:29:19 +0900#$
27 * Device(s) : RZ/A1H
28 * Tool-Chain :
29 * OS : None
30 * H/W Platform :
31 * Description : RZ/A1H R7S72100 USB Sample Program
32 * Operation :
33 * Limitations :
34 *******************************************************************************/
35
36
37 /*******************************************************************************
38 Includes <System Includes> , "Project Includes"
39 *******************************************************************************/
40 #include "usb1_host.h"
41 #if(1) /* ohci_wrapp */
42 #include "MBRZA1H.h" /* INTC Driver Header */
43 #else
44 #include "devdrv_intc.h" /* INTC Driver Header */
45 #endif
46
47
48 /*******************************************************************************
49 Typedef definitions
50 *******************************************************************************/
51
52
53 /*******************************************************************************
54 Macro definitions
55 *******************************************************************************/
56
57
58 /*******************************************************************************
59 Imported global variables and functions (from other files)
60 *******************************************************************************/
61
62
63 /*******************************************************************************
64 Exported global variables and functions (to be accessed by other files)
65 *******************************************************************************/
66
67
68 /*******************************************************************************
69 Private global variables and functions
70 *******************************************************************************/
71
72
73 /*******************************************************************************
74 * Function Name: usb1_host_enable_brdy_int
75 * Description : Enables BRDY interrupt in the pipe spceified by the argument.
76 * : Disables BEMP/NRDY/BRDY interrupts in all pipes before enabling
77 * : BRDY. Enables BRDY interrupt in the pipe specified by the argument
78 * : in the disabled status. After enabling BRDY, recover all
79 * : BEMP/NRDY/BRDY disabled/enabled status.
80 * Arguments : uint16_t pipe ; pipe Number
81 * Return Value : none
82 *******************************************************************************/
83 void usb1_host_enable_brdy_int (uint16_t pipe)
84 {
85 /* enable brdy interrupt */
86 USB201.BRDYENB |= (uint16_t)g_usb1_host_bit_set[pipe];
87 }
88
89 /*******************************************************************************
90 * Function Name: usb1_host_disable_brdy_int
91 * Description : Disables BRDY interrupt in the pipe spceified by the argument.
92 * : Disables BEMP/NRDY/BRDY interrupts in all pipes before disabling
93 * : BRDY. Enables BRDY interrupt in the pipe specified by the argument
94 * : in the disabled status. After disabling BRDY, recover all
95 * : BEMP/NRDY/BRDY disabled/enabled status.
96 * Arguments : uint16_t pipe ; pipe Number
97 * Return Value : none
98 *******************************************************************************/
99 void usb1_host_disable_brdy_int (uint16_t pipe)
100 {
101 /* disable brdy interrupt */
102 USB201.BRDYENB &= (uint16_t)~(g_usb1_host_bit_set[pipe]);
103 }
104
105 /*******************************************************************************
106 * Function Name: usb1_host_clear_brdy_sts
107 * Description : Clear BRDY interrupt status in the pipe spceified by the argument.
108 * Arguments : uint16_t pipe ; pipe Number
109 * Return Value : none
110 *******************************************************************************/
111 void usb1_host_clear_brdy_sts (uint16_t pipe)
112 {
113 /* clear brdy status */
114 USB201.BRDYSTS = (uint16_t)~(g_usb1_host_bit_set[pipe]);
115 }
116
117 /*******************************************************************************
118 * Function Name: usb1_host_enable_bemp_int
119 * Description : Enables BEMP interrupt in the pipe spceified by the argument.
120 * : Disables BEMP/NRDY/BRDY interrupts in all pipes before enabling
121 * : BEMP. Enables BEMP interrupt in the pipe specified by the argument
122 * : in the disabled status. After enabling BEMP, recover all
123 * : BEMP/NRDY/BRDY disabled/enabled status.
124 * Arguments : uint16_t pipe ; pipe Number
125 * Return Value : none
126 *******************************************************************************/
127 void usb1_host_enable_bemp_int (uint16_t pipe)
128 {
129 /* enable bemp interrupt */
130 USB201.BEMPENB |= (uint16_t)g_usb1_host_bit_set[pipe];
131 }
132
133 /*******************************************************************************
134 * Function Name: usb1_host_disable_bemp_int
135 * Description : Disables BEMP interrupt in the pipe spceified by the argument.
136 * : Disables BEMP/NRDY/BRDY interrupts in all pipes before disabling
137 * : BEMP. Enables BEMP interrupt in the pipe specified by the argument
138 * : in the disabled status. After enabling BEMP, recover all
139 * : BEMP/NRDY/BRDY disabled/enabled status.
140 * Arguments : uint16_t pipe ; pipe Number
141 * Return Value : none
142 *******************************************************************************/
143 void usb1_host_disable_bemp_int (uint16_t pipe)
144 {
145 /* disable bemp interrupt */
146 USB201.BEMPENB &= (uint16_t)~(g_usb1_host_bit_set[pipe]);
147 }
148
149 /*******************************************************************************
150 * Function Name: usb1_host_clear_bemp_sts
151 * Description : Clear BEMP interrupt status in the pipe spceified by the argument.
152 * Arguments : uint16_t pipe ; pipe Number
153 * Return Value : none
154 *******************************************************************************/
155 void usb1_host_clear_bemp_sts (uint16_t pipe)
156 {
157 /* clear bemp status */
158 USB201.BEMPSTS = (uint16_t)~(g_usb1_host_bit_set[pipe]);
159 }
160
161 /*******************************************************************************
162 * Function Name: usb1_host_enable_nrdy_int
163 * Description : Enables NRDY interrupt in the pipe spceified by the argument.
164 * : Disables BEMP/NRDY/BRDY interrupts in all pipes before enabling
165 * : NRDY. Enables NRDY interrupt in the pipe specified by the argument
166 * : in the disabled status. After enabling NRDY, recover all
167 * : BEMP/NRDY/BRDY disabled/enabled status.
168 * Arguments : uint16_t pipe ; pipe Number
169 * Return Value : none
170 *******************************************************************************/
171 void usb1_host_enable_nrdy_int (uint16_t pipe)
172 {
173 /* enable nrdy interrupt */
174 USB201.NRDYENB |= (uint16_t)g_usb1_host_bit_set[pipe];
175 }
176
177 /*******************************************************************************
178 * Function Name: usb1_host_disable_nrdy_int
179 * Description : Disables NRDY interrupt in the pipe spceified by the argument.
180 * : Disables BEMP/NRDY/BRDY interrupts in all pipes before disabling
181 * : NRDY. Disables NRDY interrupt in the pipe specified by the argument
182 * : in the disabled status. After disabling NRDY, recover all
183 * : BEMP/NRDY/BRDY disabled/enabled status.
184 * Arguments : uint16_t pipe ; pipe Number
185 * Return Value : none
186 *******************************************************************************/
187 void usb1_host_disable_nrdy_int (uint16_t pipe)
188 {
189 /* disable nrdy interrupt */
190 USB201.NRDYENB &= (uint16_t)~(g_usb1_host_bit_set[pipe]);
191 }
192
193 /*******************************************************************************
194 * Function Name: usb1_host_clear_nrdy_sts
195 * Description : Clear NRDY interrupt status in the pipe spceified by the argument.
196 * Arguments : uint16_t pipe ; pipe Number
197 * Return Value : none
198 *******************************************************************************/
199 void usb1_host_clear_nrdy_sts (uint16_t pipe)
200 {
201 /* clear nrdy status */
202 USB201.NRDYSTS = (uint16_t)~(g_usb1_host_bit_set[pipe]);
203 }
204
205 /*******************************************************************************
206 * Function Name: usb1_host_is_hispeed
207 * Description : Returns the result of USB reset hand shake (RHST) as
208 * : return value.
209 * Arguments : none
210 * Return Value : USB_HOST_HIGH_SPEED ; Hi-Speed
211 * : USB_HOST_FULL_SPEED ; Full-Speed
212 * : USB_HOST_LOW_SPEED ; Low-Speed
213 * : USB_HOST_NON_SPEED ; error
214 *******************************************************************************/
215 uint16_t usb1_host_is_hispeed (void)
216 {
217 uint16_t rhst;
218 uint16_t speed;
219
220 rhst = RZA_IO_RegRead_16(&USB201.DVSTCTR0,
221 USB_DVSTCTR0_RHST_SHIFT,
222 USB_DVSTCTR0_RHST);
223 if (rhst == USB_HOST_HSMODE)
224 {
225 speed = USB_HOST_HIGH_SPEED;
226 }
227 else if (rhst == USB_HOST_FSMODE)
228 {
229 speed = USB_HOST_FULL_SPEED;
230 }
231 else if (rhst == USB_HOST_LSMODE)
232 {
233 speed = USB_HOST_LOW_SPEED;
234 }
235 else
236 {
237 speed = USB_HOST_NON_SPEED;
238 }
239
240 return speed;
241 }
242
243 /*******************************************************************************
244 * Function Name: usb1_host_is_hispeed_enable
245 * Description : Returns the USB High-Speed connection enabled status as
246 * : return value.
247 * Arguments : none
248 * Return Value : USB_HOST_YES : Hi-Speed Enable
249 * : USB_HOST_NO : Hi-Speed Disable
250 *******************************************************************************/
251 uint16_t usb1_host_is_hispeed_enable (void)
252 {
253 uint16_t ret;
254
255 ret = USB_HOST_NO;
256
257 if (RZA_IO_RegRead_16(&USB201.SYSCFG0,
258 USB_SYSCFG_HSE_SHIFT,
259 USB_SYSCFG_HSE) == 1)
260 {
261 ret = USB_HOST_YES;
262 }
263
264 return ret;
265 }
266
267 /*******************************************************************************
268 * Function Name: usb1_host_set_pid_buf
269 * Description : Enables communicaqtion in the pipe specified by the argument
270 * : (BUF).
271 * Arguments : uint16_t pipe ; pipe Number
272 * Return Value : none
273 *******************************************************************************/
274 void usb1_host_set_pid_buf (uint16_t pipe)
275 {
276 uint16_t pid;
277
278 pid = usb1_host_get_pid(pipe);
279
280 if (pid == USB_HOST_PID_STALL2)
281 {
282 usb1_host_set_pid_nak(pipe);
283 }
284
285 switch (pipe)
286 {
287 case USB_HOST_PIPE0:
288 RZA_IO_RegWrite_16(&USB201.DCPCTR,
289 USB_HOST_PID_BUF,
290 USB_DCPCTR_PID_SHIFT,
291 USB_DCPCTR_PID);
292 break;
293
294 case USB_HOST_PIPE1:
295 RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
296 USB_HOST_PID_BUF,
297 USB_PIPEnCTR_1_5_PID_SHIFT,
298 USB_PIPEnCTR_1_5_PID);
299 break;
300
301 case USB_HOST_PIPE2:
302 RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
303 USB_HOST_PID_BUF,
304 USB_PIPEnCTR_1_5_PID_SHIFT,
305 USB_PIPEnCTR_1_5_PID);
306 break;
307
308 case USB_HOST_PIPE3:
309 RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
310 USB_HOST_PID_BUF,
311 USB_PIPEnCTR_1_5_PID_SHIFT,
312 USB_PIPEnCTR_1_5_PID);
313 break;
314
315 case USB_HOST_PIPE4:
316 RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
317 USB_HOST_PID_BUF,
318 USB_PIPEnCTR_1_5_PID_SHIFT,
319 USB_PIPEnCTR_1_5_PID);
320 break;
321
322 case USB_HOST_PIPE5:
323 RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
324 USB_HOST_PID_BUF,
325 USB_PIPEnCTR_1_5_PID_SHIFT,
326 USB_PIPEnCTR_1_5_PID);
327 break;
328
329 case USB_HOST_PIPE6:
330 RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
331 USB_HOST_PID_BUF,
332 USB_PIPEnCTR_6_8_PID_SHIFT,
333 USB_PIPEnCTR_6_8_PID);
334 break;
335
336 case USB_HOST_PIPE7:
337 RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
338 USB_HOST_PID_BUF,
339 USB_PIPEnCTR_6_8_PID_SHIFT,
340 USB_PIPEnCTR_6_8_PID);
341 break;
342
343 case USB_HOST_PIPE8:
344 RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
345 USB_HOST_PID_BUF,
346 USB_PIPEnCTR_6_8_PID_SHIFT,
347 USB_PIPEnCTR_6_8_PID);
348 break;
349
350 case USB_HOST_PIPE9:
351 RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
352 USB_HOST_PID_BUF,
353 USB_PIPEnCTR_9_PID_SHIFT,
354 USB_PIPEnCTR_9_PID);
355 break;
356
357 default:
358 break;
359 }
360 }
361
362 /*******************************************************************************
363 * Function Name: usb1_host_set_pid_nak
364 * Description : Disables communication (NAK) in the pipe specified by the argument.
365 * : When the pipe status was enabling communication (BUF) before
366 * : executing before executing this function, waits in the software
367 * : until the pipe becomes ready after setting disabled.
368 * Arguments : uint16_t pipe ; pipe Number
369 * Return Value : none
370 *******************************************************************************/
371 void usb1_host_set_pid_nak (uint16_t pipe)
372 {
373 uint16_t pid;
374 uint16_t pbusy;
375 uint32_t loop;
376
377 pid = usb1_host_get_pid(pipe);
378
379 if (pid == USB_HOST_PID_STALL2)
380 {
381 usb1_host_set_pid_stall(pipe);
382 }
383
384 switch (pipe)
385 {
386 case USB_HOST_PIPE0:
387 RZA_IO_RegWrite_16(&USB201.DCPCTR,
388 USB_HOST_PID_NAK,
389 USB_DCPCTR_PID_SHIFT,
390 USB_DCPCTR_PID);
391 break;
392
393 case USB_HOST_PIPE1:
394 RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
395 USB_HOST_PID_NAK,
396 USB_PIPEnCTR_1_5_PID_SHIFT,
397 USB_PIPEnCTR_1_5_PID);
398 break;
399
400 case USB_HOST_PIPE2:
401 RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
402 USB_HOST_PID_NAK,
403 USB_PIPEnCTR_1_5_PID_SHIFT,
404 USB_PIPEnCTR_1_5_PID);
405 break;
406
407 case USB_HOST_PIPE3:
408 RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
409 USB_HOST_PID_NAK,
410 USB_PIPEnCTR_1_5_PID_SHIFT,
411 USB_PIPEnCTR_1_5_PID);
412 break;
413
414 case USB_HOST_PIPE4:
415 RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
416 USB_HOST_PID_NAK,
417 USB_PIPEnCTR_1_5_PID_SHIFT,
418 USB_PIPEnCTR_1_5_PID);
419 break;
420
421 case USB_HOST_PIPE5:
422 RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
423 USB_HOST_PID_NAK,
424 USB_PIPEnCTR_1_5_PID_SHIFT,
425 USB_PIPEnCTR_1_5_PID);
426 break;
427
428 case USB_HOST_PIPE6:
429 RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
430 USB_HOST_PID_NAK,
431 USB_PIPEnCTR_6_8_PID_SHIFT,
432 USB_PIPEnCTR_6_8_PID);
433 break;
434
435 case USB_HOST_PIPE7:
436 RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
437 USB_HOST_PID_NAK,
438 USB_PIPEnCTR_6_8_PID_SHIFT,
439 USB_PIPEnCTR_6_8_PID);
440 break;
441
442 case USB_HOST_PIPE8:
443 RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
444 USB_HOST_PID_NAK,
445 USB_PIPEnCTR_6_8_PID_SHIFT,
446 USB_PIPEnCTR_6_8_PID);
447 break;
448
449 case USB_HOST_PIPE9:
450 RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
451 USB_HOST_PID_NAK,
452 USB_PIPEnCTR_9_PID_SHIFT,
453 USB_PIPEnCTR_9_PID);
454 break;
455
456 default:
457 break;
458 }
459
460 if (pid == USB_HOST_PID_BUF)
461 {
462 for (loop = 0; loop < 200; loop++)
463 {
464 switch (pipe)
465 {
466 case USB_HOST_PIPE0:
467 pbusy = RZA_IO_RegRead_16(&USB201.DCPCTR,
468 USB_DCPCTR_PBUSY_SHIFT,
469 USB_DCPCTR_PBUSY);
470 break;
471
472 case USB_HOST_PIPE1:
473 pbusy = RZA_IO_RegRead_16(&USB201.PIPE1CTR,
474 USB_PIPEnCTR_1_5_PBUSY_SHIFT,
475 USB_PIPEnCTR_1_5_PBUSY);
476 break;
477
478 case USB_HOST_PIPE2:
479 pbusy = RZA_IO_RegRead_16(&USB201.PIPE2CTR,
480 USB_PIPEnCTR_1_5_PBUSY_SHIFT,
481 USB_PIPEnCTR_1_5_PBUSY);
482 break;
483
484 case USB_HOST_PIPE3:
485 pbusy = RZA_IO_RegRead_16(&USB201.PIPE3CTR,
486 USB_PIPEnCTR_1_5_PBUSY_SHIFT,
487 USB_PIPEnCTR_1_5_PBUSY);
488 break;
489
490 case USB_HOST_PIPE4:
491 pbusy = RZA_IO_RegRead_16(&USB201.PIPE4CTR,
492 USB_PIPEnCTR_1_5_PBUSY_SHIFT,
493 USB_PIPEnCTR_1_5_PBUSY);
494 break;
495
496 case USB_HOST_PIPE5:
497 pbusy = RZA_IO_RegRead_16(&USB201.PIPE5CTR,
498 USB_PIPEnCTR_1_5_PBUSY_SHIFT,
499 USB_PIPEnCTR_1_5_PBUSY);
500 break;
501
502 case USB_HOST_PIPE6:
503 pbusy = RZA_IO_RegRead_16(&USB201.PIPE6CTR,
504 USB_PIPEnCTR_6_8_PBUSY_SHIFT,
505 USB_PIPEnCTR_6_8_PBUSY);
506 break;
507
508 case USB_HOST_PIPE7:
509 pbusy = RZA_IO_RegRead_16(&USB201.PIPE7CTR,
510 USB_PIPEnCTR_6_8_PBUSY_SHIFT,
511 USB_PIPEnCTR_6_8_PBUSY);
512 break;
513
514 case USB_HOST_PIPE8:
515 pbusy = RZA_IO_RegRead_16(&USB201.PIPE8CTR,
516 USB_PIPEnCTR_6_8_PBUSY_SHIFT,
517 USB_PIPEnCTR_6_8_PBUSY);
518 break;
519
520 case USB_HOST_PIPE9:
521 pbusy = RZA_IO_RegRead_16(&USB201.PIPE9CTR,
522 USB_PIPEnCTR_9_PBUSY_SHIFT,
523 USB_PIPEnCTR_9_PBUSY);
524 break;
525
526 default:
527 pbusy = 1;
528 break;
529 }
530
531 if (pbusy == 0)
532 {
533 break;
534 }
535
536 Userdef_USB_usb1_host_delay_500ns();
537 }
538 }
539 }
540
541 /*******************************************************************************
542 * Function Name: usb1_host_set_pid_stall
543 * Description : Disables communication (STALL) in the pipe specified by the
544 * : argument.
545 * Arguments : uint16_t pipe ; pipe Number
546 * Return Value : none
547 *******************************************************************************/
548 void usb1_host_set_pid_stall (uint16_t pipe)
549 {
550 uint16_t pid;
551
552 pid = usb1_host_get_pid(pipe);
553
554 if (pid == USB_HOST_PID_BUF)
555 {
556 switch (pipe)
557 {
558 case USB_HOST_PIPE0:
559 RZA_IO_RegWrite_16(&USB201.DCPCTR,
560 USB_HOST_PID_STALL2,
561 USB_DCPCTR_PID_SHIFT,
562 USB_DCPCTR_PID);
563 break;
564
565 case USB_HOST_PIPE1:
566 RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
567 USB_HOST_PID_STALL2,
568 USB_PIPEnCTR_1_5_PID_SHIFT,
569 USB_PIPEnCTR_1_5_PID);
570 break;
571
572 case USB_HOST_PIPE2:
573 RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
574 USB_HOST_PID_STALL2,
575 USB_PIPEnCTR_1_5_PID_SHIFT,
576 USB_PIPEnCTR_1_5_PID);
577 break;
578
579 case USB_HOST_PIPE3:
580 RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
581 USB_HOST_PID_STALL2,
582 USB_PIPEnCTR_1_5_PID_SHIFT,
583 USB_PIPEnCTR_1_5_PID);
584 break;
585
586 case USB_HOST_PIPE4:
587 RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
588 USB_HOST_PID_STALL2,
589 USB_PIPEnCTR_1_5_PID_SHIFT,
590 USB_PIPEnCTR_1_5_PID);
591 break;
592
593 case USB_HOST_PIPE5:
594 RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
595 USB_HOST_PID_STALL2,
596 USB_PIPEnCTR_1_5_PID_SHIFT,
597 USB_PIPEnCTR_1_5_PID);
598 break;
599
600 case USB_HOST_PIPE6:
601 RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
602 USB_HOST_PID_STALL2,
603 USB_PIPEnCTR_6_8_PID_SHIFT,
604 USB_PIPEnCTR_6_8_PID);
605 break;
606
607 case USB_HOST_PIPE7:
608 RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
609 USB_HOST_PID_STALL2,
610 USB_PIPEnCTR_6_8_PID_SHIFT,
611 USB_PIPEnCTR_6_8_PID);
612 break;
613
614 case USB_HOST_PIPE8:
615 RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
616 USB_HOST_PID_STALL2,
617 USB_PIPEnCTR_6_8_PID_SHIFT,
618 USB_PIPEnCTR_6_8_PID);
619 break;
620
621 case USB_HOST_PIPE9:
622 RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
623 USB_HOST_PID_STALL2,
624 USB_PIPEnCTR_9_PID_SHIFT,
625 USB_PIPEnCTR_9_PID);
626 break;
627
628 default:
629 break;
630 }
631 }
632 else
633 {
634 switch (pipe)
635 {
636 case USB_HOST_PIPE0:
637 RZA_IO_RegWrite_16(&USB201.DCPCTR,
638 USB_HOST_PID_STALL,
639 USB_DCPCTR_PID_SHIFT,
640 USB_DCPCTR_PID);
641 break;
642
643 case USB_HOST_PIPE1:
644 RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
645 USB_HOST_PID_STALL,
646 USB_PIPEnCTR_1_5_PID_SHIFT,
647 USB_PIPEnCTR_1_5_PID);
648 break;
649
650 case USB_HOST_PIPE2:
651 RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
652 USB_HOST_PID_STALL,
653 USB_PIPEnCTR_1_5_PID_SHIFT,
654 USB_PIPEnCTR_1_5_PID);
655 break;
656
657 case USB_HOST_PIPE3:
658 RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
659 USB_HOST_PID_STALL,
660 USB_PIPEnCTR_1_5_PID_SHIFT,
661 USB_PIPEnCTR_1_5_PID);
662 break;
663
664 case USB_HOST_PIPE4:
665 RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
666 USB_HOST_PID_STALL,
667 USB_PIPEnCTR_1_5_PID_SHIFT,
668 USB_PIPEnCTR_1_5_PID);
669 break;
670
671 case USB_HOST_PIPE5:
672 RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
673 USB_HOST_PID_STALL,
674 USB_PIPEnCTR_1_5_PID_SHIFT,
675 USB_PIPEnCTR_1_5_PID);
676 break;
677
678 case USB_HOST_PIPE6:
679 RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
680 USB_HOST_PID_STALL,
681 USB_PIPEnCTR_6_8_PID_SHIFT,
682 USB_PIPEnCTR_6_8_PID);
683 break;
684
685 case USB_HOST_PIPE7:
686 RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
687 USB_HOST_PID_STALL,
688 USB_PIPEnCTR_6_8_PID_SHIFT,
689 USB_PIPEnCTR_6_8_PID);
690 break;
691
692 case USB_HOST_PIPE8:
693 RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
694 USB_HOST_PID_STALL,
695 USB_PIPEnCTR_6_8_PID_SHIFT,
696 USB_PIPEnCTR_6_8_PID);
697 break;
698
699 case USB_HOST_PIPE9:
700 RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
701 USB_HOST_PID_STALL,
702 USB_PIPEnCTR_9_PID_SHIFT,
703 USB_PIPEnCTR_9_PID);
704 break;
705
706 default:
707 break;
708 }
709 }
710 }
711
712 /*******************************************************************************
713 * Function Name: usb1_host_clear_pid_stall
714 * Description : Disables communication (NAK) in the pipe specified by the argument.
715 * Arguments : uint16_t pipe ; pipe Number
716 * Return Value : none
717 *******************************************************************************/
718 void usb1_host_clear_pid_stall (uint16_t pipe)
719 {
720 usb1_host_set_pid_nak(pipe);
721 }
722
723 /*******************************************************************************
724 * Function Name: usb1_host_get_pid
725 * Description : Returns the pipe state specified by the argument.
726 * Arguments : uint16_t pipe ; Pipe Number
727 * Return Value : PID
728 *******************************************************************************/
729 uint16_t usb1_host_get_pid (uint16_t pipe)
730 {
731 uint16_t pid;
732
733 switch (pipe)
734 {
735 case USB_HOST_PIPE0:
736 pid = RZA_IO_RegRead_16(&USB201.DCPCTR,
737 USB_DCPCTR_PID_SHIFT,
738 USB_DCPCTR_PID);
739 break;
740
741 case USB_HOST_PIPE1:
742 pid = RZA_IO_RegRead_16(&USB201.PIPE1CTR,
743 USB_PIPEnCTR_1_5_PID_SHIFT,
744 USB_PIPEnCTR_1_5_PID);
745 break;
746
747 case USB_HOST_PIPE2:
748 pid = RZA_IO_RegRead_16(&USB201.PIPE2CTR,
749 USB_PIPEnCTR_1_5_PID_SHIFT,
750 USB_PIPEnCTR_1_5_PID);
751 break;
752
753 case USB_HOST_PIPE3:
754 pid = RZA_IO_RegRead_16(&USB201.PIPE3CTR,
755 USB_PIPEnCTR_1_5_PID_SHIFT,
756 USB_PIPEnCTR_1_5_PID);
757 break;
758
759 case USB_HOST_PIPE4:
760 pid = RZA_IO_RegRead_16(&USB201.PIPE4CTR,
761 USB_PIPEnCTR_1_5_PID_SHIFT,
762 USB_PIPEnCTR_1_5_PID);
763 break;
764
765 case USB_HOST_PIPE5:
766 pid = RZA_IO_RegRead_16(&USB201.PIPE5CTR,
767 USB_PIPEnCTR_1_5_PID_SHIFT,
768 USB_PIPEnCTR_1_5_PID);
769 break;
770
771 case USB_HOST_PIPE6:
772 pid = RZA_IO_RegRead_16(&USB201.PIPE6CTR,
773 USB_PIPEnCTR_6_8_PID_SHIFT,
774 USB_PIPEnCTR_6_8_PID);
775 break;
776
777 case USB_HOST_PIPE7:
778 pid = RZA_IO_RegRead_16(&USB201.PIPE7CTR,
779 USB_PIPEnCTR_6_8_PID_SHIFT,
780 USB_PIPEnCTR_6_8_PID);
781 break;
782
783 case USB_HOST_PIPE8:
784 pid = RZA_IO_RegRead_16(&USB201.PIPE8CTR,
785 USB_PIPEnCTR_6_8_PID_SHIFT,
786 USB_PIPEnCTR_6_8_PID);
787 break;
788
789 case USB_HOST_PIPE9:
790 pid = RZA_IO_RegRead_16(&USB201.PIPE9CTR,
791 USB_PIPEnCTR_9_PID_SHIFT,
792 USB_PIPEnCTR_9_PID);
793 break;
794
795 default:
796 pid = 0;
797 break;
798 }
799
800 return pid;
801 }
802
803 /*******************************************************************************
804 * Function Name: usb1_host_set_csclr
805 * Description : CSPLIT status clear setting of sprit transaction in specified
806 * : pipe is performed.
807 * : When SQSET bit or SQCLR bit, and SQSET bit or SQCLR bit
808 * : in DCPCTR register are continuously changed (when the sequence
809 * : toggle bit of data PID is continuously changed over two or more pipes),
810 * : the access cycle with 120 ns and more than 5 cycle bus clock is necessary.
811 * : Do not set both SQCLR bit and SQSET bit to 1 at the same time.
812 * : In addition, both bits should be operated after PID is set to NAK.
813 * : However, when it is set to the isochronous transfer as the transfer type
814 * : (TYPE=11), writing in SQSET bit is disabled.
815 * Arguments : uint16_t pipe ; Pipe number
816 * Return Value : none
817 *******************************************************************************/
818 void usb1_host_set_csclr (uint16_t pipe)
819 {
820 switch (pipe)
821 {
822 case USB_HOST_PIPE0:
823 RZA_IO_RegWrite_16(&USB201.DCPCTR,
824 1,
825 USB_DCPCTR_CSCLR_SHIFT,
826 USB_DCPCTR_CSCLR);
827 break;
828
829 case USB_HOST_PIPE1:
830 RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
831 1,
832 USB_PIPEnCTR_1_5_CSCLR_SHIFT,
833 USB_PIPEnCTR_1_5_CSCLR);
834 break;
835
836 case USB_HOST_PIPE2:
837 RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
838 1,
839 USB_PIPEnCTR_1_5_CSCLR_SHIFT,
840 USB_PIPEnCTR_1_5_CSCLR);
841 break;
842
843 case USB_HOST_PIPE3:
844 RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
845 1,
846 USB_PIPEnCTR_1_5_CSCLR_SHIFT,
847 USB_PIPEnCTR_1_5_CSCLR);
848 break;
849
850 case USB_HOST_PIPE4:
851 RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
852 1,
853 USB_PIPEnCTR_1_5_CSCLR_SHIFT,
854 USB_PIPEnCTR_1_5_CSCLR);
855 break;
856
857 case USB_HOST_PIPE5:
858 RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
859 1,
860 USB_PIPEnCTR_1_5_CSCLR_SHIFT,
861 USB_PIPEnCTR_1_5_CSCLR);
862 break;
863
864 case USB_HOST_PIPE6:
865 RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
866 1,
867 USB_PIPEnCTR_6_8_CSCLR_SHIFT,
868 USB_PIPEnCTR_6_8_CSCLR);
869 break;
870
871 case USB_HOST_PIPE7:
872 RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
873 1,
874 USB_PIPEnCTR_6_8_CSCLR_SHIFT,
875 USB_PIPEnCTR_6_8_CSCLR);
876 break;
877
878 case USB_HOST_PIPE8:
879 RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
880 1,
881 USB_PIPEnCTR_6_8_CSCLR_SHIFT,
882 USB_PIPEnCTR_6_8_CSCLR);
883 break;
884
885 case USB_HOST_PIPE9:
886 RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
887 1,
888 USB_PIPEnCTR_9_CSCLR_SHIFT,
889 USB_PIPEnCTR_9_CSCLR);
890 break;
891
892 default:
893 break;
894 }
895 }
896
897 /*******************************************************************************
898 * Function Name: usb1_host_set_sqclr
899 * Description : Sets the sequence bit of the pipe specified by the argument to
900 * : DATA0.
901 * Arguments : uint16_t pipe ; Pipe Number
902 * Return Value : none
903 *******************************************************************************/
904 void usb1_host_set_sqclr (uint16_t pipe)
905 {
906 switch (pipe)
907 {
908 case USB_HOST_PIPE0:
909 RZA_IO_RegWrite_16(&USB201.DCPCTR,
910 1,
911 USB_DCPCTR_SQCLR_SHIFT,
912 USB_DCPCTR_SQCLR);
913 break;
914
915 case USB_HOST_PIPE1:
916 RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
917 1,
918 USB_PIPEnCTR_1_5_SQCLR_SHIFT,
919 USB_PIPEnCTR_1_5_SQCLR);
920 break;
921
922 case USB_HOST_PIPE2:
923 RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
924 1,
925 USB_PIPEnCTR_1_5_SQCLR_SHIFT,
926 USB_PIPEnCTR_1_5_SQCLR);
927 break;
928
929 case USB_HOST_PIPE3:
930 RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
931 1,
932 USB_PIPEnCTR_1_5_SQCLR_SHIFT,
933 USB_PIPEnCTR_1_5_SQCLR);
934 break;
935
936 case USB_HOST_PIPE4:
937 RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
938 1,
939 USB_PIPEnCTR_1_5_SQCLR_SHIFT,
940 USB_PIPEnCTR_1_5_SQCLR);
941 break;
942
943 case USB_HOST_PIPE5:
944 RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
945 1,
946 USB_PIPEnCTR_1_5_SQCLR_SHIFT,
947 USB_PIPEnCTR_1_5_SQCLR);
948 break;
949
950 case USB_HOST_PIPE6:
951 RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
952 1,
953 USB_PIPEnCTR_6_8_SQCLR_SHIFT,
954 USB_PIPEnCTR_6_8_SQCLR);
955 break;
956
957 case USB_HOST_PIPE7:
958 RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
959 1,
960 USB_PIPEnCTR_6_8_SQCLR_SHIFT,
961 USB_PIPEnCTR_6_8_SQCLR);
962 break;
963
964 case USB_HOST_PIPE8:
965 RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
966 1,
967 USB_PIPEnCTR_6_8_SQCLR_SHIFT,
968 USB_PIPEnCTR_6_8_SQCLR);
969 break;
970
971 case USB_HOST_PIPE9:
972 RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
973 1,
974 USB_PIPEnCTR_9_SQCLR_SHIFT,
975 USB_PIPEnCTR_9_SQCLR);
976 break;
977
978 default:
979 break;
980 }
981 }
982
983 /*******************************************************************************
984 * Function Name: usb1_host_set_sqset
985 * Description : Sets the sequence bit of the pipe specified by the argument to
986 * : DATA1.
987 * Arguments : uint16_t pipe ; Pipe number
988 * Return Value : none
989 *******************************************************************************/
990 void usb1_host_set_sqset (uint16_t pipe)
991 {
992 switch (pipe)
993 {
994 case USB_HOST_PIPE0:
995 RZA_IO_RegWrite_16(&USB201.DCPCTR,
996 1,
997 USB_DCPCTR_SQSET_SHIFT,
998 USB_DCPCTR_SQSET);
999 break;
1000
1001 case USB_HOST_PIPE1:
1002 RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
1003 1,
1004 USB_PIPEnCTR_1_5_SQSET_SHIFT,
1005 USB_PIPEnCTR_1_5_SQSET);
1006 break;
1007
1008 case USB_HOST_PIPE2:
1009 RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
1010 1,
1011 USB_PIPEnCTR_1_5_SQSET_SHIFT,
1012 USB_PIPEnCTR_1_5_SQSET);
1013 break;
1014
1015 case USB_HOST_PIPE3:
1016 RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
1017 1,
1018 USB_PIPEnCTR_1_5_SQSET_SHIFT,
1019 USB_PIPEnCTR_1_5_SQSET);
1020 break;
1021
1022 case USB_HOST_PIPE4:
1023 RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
1024 1,
1025 USB_PIPEnCTR_1_5_SQSET_SHIFT,
1026 USB_PIPEnCTR_1_5_SQSET);
1027 break;
1028
1029 case USB_HOST_PIPE5:
1030 RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
1031 1,
1032 USB_PIPEnCTR_1_5_SQSET_SHIFT,
1033 USB_PIPEnCTR_1_5_SQSET);
1034 break;
1035
1036 case USB_HOST_PIPE6:
1037 RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
1038 1,
1039 USB_PIPEnCTR_6_8_SQSET_SHIFT,
1040 USB_PIPEnCTR_6_8_SQSET);
1041 break;
1042
1043 case USB_HOST_PIPE7:
1044 RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
1045 1,
1046 USB_PIPEnCTR_6_8_SQSET_SHIFT,
1047 USB_PIPEnCTR_6_8_SQSET);
1048 break;
1049
1050 case USB_HOST_PIPE8:
1051 RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
1052 1,
1053 USB_PIPEnCTR_6_8_SQSET_SHIFT,
1054 USB_PIPEnCTR_6_8_SQSET);
1055 break;
1056
1057 case USB_HOST_PIPE9:
1058 RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
1059 1,
1060 USB_PIPEnCTR_9_SQSET_SHIFT,
1061 USB_PIPEnCTR_9_SQSET);
1062 break;
1063
1064 default:
1065 break;
1066 }
1067 }
1068
1069 /*******************************************************************************
1070 * Function Name: usb1_host_get_sqmon
1071 * Description : Toggle bit of specified pipe is obtained
1072 * Arguments : uint16_t pipe ; Pipe number
1073 * Return Value : sqmon
1074 *******************************************************************************/
1075 uint16_t usb1_host_get_sqmon (uint16_t pipe)
1076 {
1077 uint16_t sqmon;
1078
1079 switch (pipe)
1080 {
1081 case USB_HOST_PIPE0:
1082 sqmon = RZA_IO_RegRead_16(&USB201.DCPCTR,
1083 USB_DCPCTR_SQMON_SHIFT,
1084 USB_DCPCTR_SQMON);
1085 break;
1086
1087 case USB_HOST_PIPE1:
1088 sqmon = RZA_IO_RegRead_16(&USB201.PIPE1CTR,
1089 USB_PIPEnCTR_1_5_SQMON_SHIFT,
1090 USB_PIPEnCTR_1_5_SQMON);
1091 break;
1092
1093 case USB_HOST_PIPE2:
1094 sqmon = RZA_IO_RegRead_16(&USB201.PIPE2CTR,
1095 USB_PIPEnCTR_1_5_SQMON_SHIFT,
1096 USB_PIPEnCTR_1_5_SQMON);
1097 break;
1098
1099 case USB_HOST_PIPE3:
1100 sqmon = RZA_IO_RegRead_16(&USB201.PIPE3CTR,
1101 USB_PIPEnCTR_1_5_SQMON_SHIFT,
1102 USB_PIPEnCTR_1_5_SQMON);
1103 break;
1104
1105 case USB_HOST_PIPE4:
1106 sqmon = RZA_IO_RegRead_16(&USB201.PIPE4CTR,
1107 USB_PIPEnCTR_1_5_SQMON_SHIFT,
1108 USB_PIPEnCTR_1_5_SQMON);
1109 break;
1110
1111 case USB_HOST_PIPE5:
1112 sqmon = RZA_IO_RegRead_16(&USB201.PIPE5CTR,
1113 USB_PIPEnCTR_1_5_SQMON_SHIFT,
1114 USB_PIPEnCTR_1_5_SQMON);
1115 break;
1116
1117 case USB_HOST_PIPE6:
1118 sqmon = RZA_IO_RegRead_16(&USB201.PIPE6CTR,
1119 USB_PIPEnCTR_6_8_SQMON_SHIFT,
1120 USB_PIPEnCTR_6_8_SQMON);
1121 break;
1122
1123 case USB_HOST_PIPE7:
1124 sqmon = RZA_IO_RegRead_16(&USB201.PIPE7CTR,
1125 USB_PIPEnCTR_6_8_SQMON_SHIFT,
1126 USB_PIPEnCTR_6_8_SQMON);
1127 break;
1128
1129 case USB_HOST_PIPE8:
1130 sqmon = RZA_IO_RegRead_16(&USB201.PIPE8CTR,
1131 USB_PIPEnCTR_6_8_SQMON_SHIFT,
1132 USB_PIPEnCTR_6_8_SQMON);
1133 break;
1134
1135 case USB_HOST_PIPE9:
1136 sqmon = RZA_IO_RegRead_16(&USB201.PIPE9CTR,
1137 USB_PIPEnCTR_9_SQMON_SHIFT,
1138 USB_PIPEnCTR_9_SQMON);
1139 break;
1140
1141 default:
1142 sqmon = 0;
1143 break;
1144 }
1145
1146 return sqmon;
1147 }
1148
1149 /*******************************************************************************
1150 * Function Name: usb1_host_aclrm
1151 * Description : The buffer of specified pipe is initialized
1152 * Arguments : uint16_t pipe : Pipe
1153 * Return Value : none
1154 *******************************************************************************/
1155 void usb1_host_aclrm (uint16_t pipe)
1156 {
1157 usb1_host_set_aclrm(pipe);
1158 usb1_host_clr_aclrm(pipe);
1159 }
1160
1161 /*******************************************************************************
1162 * Function Name: usb1_host_set_aclrm
1163 * Description : The auto buffer clear mode of specified pipe is enabled
1164 * Arguments : uint16_t pipe : Pipe
1165 * Return Value : none
1166 *******************************************************************************/
1167 void usb1_host_set_aclrm (uint16_t pipe)
1168 {
1169 switch (pipe)
1170 {
1171 case USB_HOST_PIPE0:
1172 break;
1173
1174 case USB_HOST_PIPE1:
1175 RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
1176 1,
1177 USB_PIPEnCTR_1_5_ACLRM_SHIFT,
1178 USB_PIPEnCTR_1_5_ACLRM);
1179 break;
1180
1181 case USB_HOST_PIPE2:
1182 RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
1183 1,
1184 USB_PIPEnCTR_1_5_ACLRM_SHIFT,
1185 USB_PIPEnCTR_1_5_ACLRM);
1186 break;
1187
1188 case USB_HOST_PIPE3:
1189 RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
1190 1,
1191 USB_PIPEnCTR_1_5_ACLRM_SHIFT,
1192 USB_PIPEnCTR_1_5_ACLRM);
1193 break;
1194
1195 case USB_HOST_PIPE4:
1196 RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
1197 1,
1198 USB_PIPEnCTR_1_5_ACLRM_SHIFT,
1199 USB_PIPEnCTR_1_5_ACLRM);
1200 break;
1201
1202 case USB_HOST_PIPE5:
1203 RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
1204 1,
1205 USB_PIPEnCTR_1_5_ACLRM_SHIFT,
1206 USB_PIPEnCTR_1_5_ACLRM);
1207 break;
1208
1209 case USB_HOST_PIPE6:
1210 RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
1211 1,
1212 USB_PIPEnCTR_6_8_ACLRM_SHIFT,
1213 USB_PIPEnCTR_6_8_ACLRM);
1214 break;
1215
1216 case USB_HOST_PIPE7:
1217 RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
1218 1,
1219 USB_PIPEnCTR_6_8_ACLRM_SHIFT,
1220 USB_PIPEnCTR_6_8_ACLRM);
1221 break;
1222
1223 case USB_HOST_PIPE8:
1224 RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
1225 1,
1226 USB_PIPEnCTR_6_8_ACLRM_SHIFT,
1227 USB_PIPEnCTR_6_8_ACLRM);
1228 break;
1229
1230 case USB_HOST_PIPE9:
1231 RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
1232 1,
1233 USB_PIPEnCTR_9_ACLRM_SHIFT,
1234 USB_PIPEnCTR_9_ACLRM);
1235 break;
1236
1237 default:
1238 break;
1239 }
1240 }
1241
1242 /*******************************************************************************
1243 * Function Name: usb1_host_clr_aclrm
1244 * Description : The auto buffer clear mode of specified pipe is enabled
1245 * Arguments : uint16_t pipe : Pipe
1246 * Return Value : none
1247 *******************************************************************************/
1248 void usb1_host_clr_aclrm (uint16_t pipe)
1249 {
1250 switch (pipe)
1251 {
1252 case USB_HOST_PIPE0:
1253 break;
1254
1255 case USB_HOST_PIPE1:
1256 RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
1257 0,
1258 USB_PIPEnCTR_1_5_ACLRM_SHIFT,
1259 USB_PIPEnCTR_1_5_ACLRM);
1260 break;
1261
1262 case USB_HOST_PIPE2:
1263 RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
1264 0,
1265 USB_PIPEnCTR_1_5_ACLRM_SHIFT,
1266 USB_PIPEnCTR_1_5_ACLRM);
1267 break;
1268
1269 case USB_HOST_PIPE3:
1270 RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
1271 0,
1272 USB_PIPEnCTR_1_5_ACLRM_SHIFT,
1273 USB_PIPEnCTR_1_5_ACLRM);
1274 break;
1275
1276 case USB_HOST_PIPE4:
1277 RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
1278 0,
1279 USB_PIPEnCTR_1_5_ACLRM_SHIFT,
1280 USB_PIPEnCTR_1_5_ACLRM);
1281 break;
1282
1283 case USB_HOST_PIPE5:
1284 RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
1285 0,
1286 USB_PIPEnCTR_1_5_ACLRM_SHIFT,
1287 USB_PIPEnCTR_1_5_ACLRM);
1288 break;
1289
1290 case USB_HOST_PIPE6:
1291 RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
1292 0,
1293 USB_PIPEnCTR_6_8_ACLRM_SHIFT,
1294 USB_PIPEnCTR_6_8_ACLRM);
1295 break;
1296
1297 case USB_HOST_PIPE7:
1298 RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
1299 0,
1300 USB_PIPEnCTR_6_8_ACLRM_SHIFT,
1301 USB_PIPEnCTR_6_8_ACLRM);
1302 break;
1303
1304 case USB_HOST_PIPE8:
1305 RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
1306 0,
1307 USB_PIPEnCTR_6_8_ACLRM_SHIFT,
1308 USB_PIPEnCTR_6_8_ACLRM);
1309 break;
1310
1311 case USB_HOST_PIPE9:
1312 RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
1313 0,
1314 USB_PIPEnCTR_9_ACLRM_SHIFT,
1315 USB_PIPEnCTR_9_ACLRM);
1316 break;
1317
1318 default:
1319 break;
1320 }
1321 }
1322
1323 /*******************************************************************************
1324 * Function Name: usb1_host_get_inbuf
1325 * Description : Returns INBUFM of the pipe specified by the argument.
1326 * Arguments : uint16_t pipe ; Pipe Number
1327 * Return Value : inbuf
1328 *******************************************************************************/
1329 uint16_t usb1_host_get_inbuf (uint16_t pipe)
1330 {
1331 uint16_t inbuf;
1332
1333 switch (pipe)
1334 {
1335 case USB_HOST_PIPE0:
1336 inbuf = 0;
1337 break;
1338
1339 case USB_HOST_PIPE1:
1340 inbuf = RZA_IO_RegRead_16(&USB201.PIPE1CTR,
1341 USB_PIPEnCTR_1_5_INBUFM_SHIFT,
1342 USB_PIPEnCTR_1_5_INBUFM);
1343 break;
1344
1345 case USB_HOST_PIPE2:
1346 inbuf = RZA_IO_RegRead_16(&USB201.PIPE2CTR,
1347 USB_PIPEnCTR_1_5_INBUFM_SHIFT,
1348 USB_PIPEnCTR_1_5_INBUFM);
1349 break;
1350
1351 case USB_HOST_PIPE3:
1352 inbuf = RZA_IO_RegRead_16(&USB201.PIPE3CTR,
1353 USB_PIPEnCTR_1_5_INBUFM_SHIFT,
1354 USB_PIPEnCTR_1_5_INBUFM);
1355 break;
1356
1357 case USB_HOST_PIPE4:
1358 inbuf = RZA_IO_RegRead_16(&USB201.PIPE4CTR,
1359 USB_PIPEnCTR_1_5_INBUFM_SHIFT,
1360 USB_PIPEnCTR_1_5_INBUFM);
1361 break;
1362
1363 case USB_HOST_PIPE5:
1364 inbuf = RZA_IO_RegRead_16(&USB201.PIPE5CTR,
1365 USB_PIPEnCTR_1_5_INBUFM_SHIFT,
1366 USB_PIPEnCTR_1_5_INBUFM);
1367 break;
1368
1369 case USB_HOST_PIPE6:
1370 inbuf = 0;
1371 break;
1372
1373 case USB_HOST_PIPE7:
1374 inbuf = 0;
1375 break;
1376
1377 case USB_HOST_PIPE8:
1378 inbuf = 0;
1379 break;
1380
1381 case USB_HOST_PIPE9:
1382 inbuf = RZA_IO_RegRead_16(&USB201.PIPE9CTR,
1383 USB_PIPEnCTR_9_INBUFM_SHIFT,
1384 USB_PIPEnCTR_9_INBUFM);
1385 break;
1386
1387 default:
1388 inbuf = 0;
1389 break;
1390 }
1391
1392 return inbuf;
1393 }
1394
1395 /*******************************************************************************
1396 * Function Name: usb1_host_setting_interrupt
1397 * Description : Sets the USB module interrupt level.
1398 * Arguments : uint8_t level ; interrupt level
1399 * Return Value : none
1400 *******************************************************************************/
1401 void usb1_host_setting_interrupt (uint8_t level)
1402 {
1403 #if(1) /* ohci_wrapp */
1404 IRQn_Type d0fifo_dmaintid;
1405 IRQn_Type d1fifo_dmaintid;
1406
1407 InterruptHandlerRegister(USBI1_IRQn, usb1_host_interrupt);
1408 GIC_SetPriority(USBI1_IRQn, level);
1409 GIC_EnableIRQ(USBI1_IRQn);
1410
1411 d0fifo_dmaintid = (IRQn_Type)Userdef_USB_usb1_host_d0fifo_dmaintid();
1412
1413 if (d0fifo_dmaintid != 0xFFFF)
1414 {
1415 InterruptHandlerRegister(d0fifo_dmaintid, usb1_host_dma_interrupt_d0fifo);
1416 GIC_SetPriority(d0fifo_dmaintid, level);
1417 GIC_EnableIRQ(d0fifo_dmaintid);
1418 }
1419
1420 d1fifo_dmaintid = (IRQn_Type)Userdef_USB_usb1_host_d1fifo_dmaintid();
1421
1422 if (d1fifo_dmaintid != 0xFFFF)
1423 {
1424 InterruptHandlerRegister(d1fifo_dmaintid, usb1_host_dma_interrupt_d1fifo);
1425 GIC_SetPriority(d1fifo_dmaintid, level);
1426 GIC_EnableIRQ(d1fifo_dmaintid);
1427 }
1428 #else
1429 uint16_t d0fifo_dmaintid;
1430 uint16_t d1fifo_dmaintid;
1431
1432 R_INTC_RegistIntFunc(INTC_ID_USBI1, usb1_host_interrupt);
1433 R_INTC_SetPriority(INTC_ID_USBI1, level);
1434 R_INTC_Enable(INTC_ID_USBI1);
1435
1436 d0fifo_dmaintid = Userdef_USB_usb1_host_d0fifo_dmaintid();
1437
1438 if (d0fifo_dmaintid != 0xFFFF)
1439 {
1440 R_INTC_RegistIntFunc(d0fifo_dmaintid, usb1_host_dma_interrupt_d0fifo);
1441 R_INTC_SetPriority(d0fifo_dmaintid, level);
1442 R_INTC_Enable(d0fifo_dmaintid);
1443 }
1444
1445 d1fifo_dmaintid = Userdef_USB_usb1_host_d1fifo_dmaintid();
1446
1447 if (d1fifo_dmaintid != 0xFFFF)
1448 {
1449 R_INTC_RegistIntFunc(d1fifo_dmaintid, usb1_host_dma_interrupt_d1fifo);
1450 R_INTC_SetPriority(d1fifo_dmaintid, level);
1451 R_INTC_Enable(d1fifo_dmaintid);
1452 }
1453 #endif
1454 }
1455
1456 /*******************************************************************************
1457 * Function Name: usb1_host_reset_module
1458 * Description : Initializes the USB module.
1459 * : Enables providing clock to the USB module.
1460 * : Sets USB bus wait register.
1461 * Arguments : uint16_t clockmode ; 48MHz ; USBHCLOCK_X1_48MHZ
1462 * : ; 12MHz ; USBHCLOCK_EXTAL_12MHZ
1463 * Return Value : none
1464 *******************************************************************************/
1465 void usb1_host_reset_module (uint16_t clockmode)
1466 {
1467 if (RZA_IO_RegRead_16(&USB200.SYSCFG0,
1468 USB_SYSCFG_UPLLE_SHIFT,
1469 USB_SYSCFG_UPLLE) == 1)
1470 {
1471 if ((USB200.SYSCFG0 & USB_HOST_BITUCKSEL) != clockmode)
1472 {
1473 RZA_IO_RegWrite_16(&USB201.SUSPMODE,
1474 0,
1475 USB_SUSPMODE_SUSPM_SHIFT,
1476 USB_SUSPMODE_SUSPM);
1477 RZA_IO_RegWrite_16(&USB200.SUSPMODE,
1478 0,
1479 USB_SUSPMODE_SUSPM_SHIFT,
1480 USB_SUSPMODE_SUSPM);
1481 USB201.SYSCFG0 = 0;
1482 USB200.SYSCFG0 = 0;
1483 USB200.SYSCFG0 = (USB_HOST_BITUPLLE | clockmode);
1484 Userdef_USB_usb1_host_delay_xms(1);
1485 RZA_IO_RegWrite_16(&USB200.SUSPMODE,
1486 1,
1487 USB_SUSPMODE_SUSPM_SHIFT,
1488 USB_SUSPMODE_SUSPM);
1489 RZA_IO_RegWrite_16(&USB201.SUSPMODE,
1490 1,
1491 USB_SUSPMODE_SUSPM_SHIFT,
1492 USB_SUSPMODE_SUSPM);
1493 }
1494 else
1495 {
1496 RZA_IO_RegWrite_16(&USB201.SUSPMODE,
1497 0,
1498 USB_SUSPMODE_SUSPM_SHIFT,
1499 USB_SUSPMODE_SUSPM);
1500 Userdef_USB_usb1_host_delay_xms(1);
1501 RZA_IO_RegWrite_16(&USB201.SUSPMODE,
1502 1,
1503 USB_SUSPMODE_SUSPM_SHIFT,
1504 USB_SUSPMODE_SUSPM);
1505 }
1506 }
1507 else
1508 {
1509 RZA_IO_RegWrite_16(&USB201.SUSPMODE,
1510 0,
1511 USB_SUSPMODE_SUSPM_SHIFT,
1512 USB_SUSPMODE_SUSPM);
1513 RZA_IO_RegWrite_16(&USB200.SUSPMODE,
1514 0,
1515 USB_SUSPMODE_SUSPM_SHIFT,
1516 USB_SUSPMODE_SUSPM);
1517 USB201.SYSCFG0 = 0;
1518 USB200.SYSCFG0 = 0;
1519 USB200.SYSCFG0 = (USB_HOST_BITUPLLE | clockmode);
1520 Userdef_USB_usb1_host_delay_xms(1);
1521 RZA_IO_RegWrite_16(&USB200.SUSPMODE,
1522 1,
1523 USB_SUSPMODE_SUSPM_SHIFT,
1524 USB_SUSPMODE_SUSPM);
1525 RZA_IO_RegWrite_16(&USB201.SUSPMODE,
1526 1,
1527 USB_SUSPMODE_SUSPM_SHIFT,
1528 USB_SUSPMODE_SUSPM);
1529 }
1530
1531 USB201.BUSWAIT = (uint16_t)(USB_HOST_BUSWAIT_05 & USB_HOST_BITBWAIT);
1532 }
1533
1534 /*******************************************************************************
1535 * Function Name: usb1_host_get_buf_size
1536 * Description : Obtains pipe buffer size specified by the argument and
1537 * : maximum packet size of the USB device in use.
1538 * : When USB_HOST_PIPE0 is specified by the argument, obtains the maximum
1539 * : packet size of the USB device using the corresponding pipe.
1540 * : For the case that USB_HOST_PIPE0 is not assigned by the argument, when the
1541 * : corresponding pipe is in continuous transfer mode,
1542 * : obtains the buffer size allocated in the corresponcing pipe,
1543 * : when incontinuous transfer, obtains maximum packet size.
1544 * Arguments : uint16_t ; pipe Number
1545 * Return Value : Maximum packet size or buffer size
1546 *******************************************************************************/
1547 uint16_t usb1_host_get_buf_size (uint16_t pipe)
1548 {
1549 uint16_t size;
1550 uint16_t bufsize;
1551
1552 if (pipe == USB_HOST_PIPE0)
1553 {
1554 size = RZA_IO_RegRead_16(&USB201.DCPMAXP,
1555 USB_DCPMAXP_MXPS_SHIFT,
1556 USB_DCPMAXP_MXPS);
1557 }
1558 else
1559 {
1560 if (RZA_IO_RegRead_16(&g_usb1_host_pipecfg[pipe], USB_PIPECFG_CNTMD_SHIFT, USB_PIPECFG_CNTMD) == 1)
1561 {
1562 bufsize = RZA_IO_RegRead_16(&g_usb1_host_pipebuf[pipe], USB_PIPEBUF_BUFSIZE_SHIFT, USB_PIPEBUF_BUFSIZE);
1563 size = (uint16_t)((bufsize + 1) * USB_HOST_PIPExBUF);
1564 }
1565 else
1566 {
1567 size = RZA_IO_RegRead_16(&g_usb1_host_pipemaxp[pipe], USB_PIPEMAXP_MXPS_SHIFT, USB_PIPEMAXP_MXPS);
1568 }
1569 }
1570 return size;
1571 }
1572
1573 /*******************************************************************************
1574 * Function Name: usb1_host_get_mxps
1575 * Description : Obtains maximum packet size of the USB device using the pipe
1576 * : specified by the argument.
1577 * Arguments : uint16_t ; Pipe Number
1578 * Return Value : Max Packet Size
1579 *******************************************************************************/
1580 uint16_t usb1_host_get_mxps (uint16_t pipe)
1581 {
1582 uint16_t size;
1583
1584 if (pipe == USB_HOST_PIPE0)
1585 {
1586 size = RZA_IO_RegRead_16(&USB201.DCPMAXP,
1587 USB_DCPMAXP_MXPS_SHIFT,
1588 USB_DCPMAXP_MXPS);
1589 }
1590 else
1591 {
1592 size = RZA_IO_RegRead_16(&g_usb1_host_pipemaxp[pipe], USB_PIPEMAXP_MXPS_SHIFT, USB_PIPEMAXP_MXPS);
1593 }
1594
1595 return size;
1596 }
1597
1598 /* End of File */
Imprint / Impressum