1 /*******************************************************************************
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
20 * http://www.renesas.com/disclaimer
21 * Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
22 *******************************************************************************/
23 /*******************************************************************************
24 * File Name : usb1_host_usbsig.c
26 * $Date:: 2014-07-09 16:29:19 +0900#$
31 * Description : RZ/A1H R7S72100 USB Sample Program
34 *******************************************************************************/
37 /*******************************************************************************
38 Includes <System Includes> , "Project Includes"
39 *******************************************************************************/
40 #include "usb1_host.h"
44 /*******************************************************************************
46 *******************************************************************************/
49 /*******************************************************************************
51 *******************************************************************************/
54 /*******************************************************************************
55 Imported global variables and functions (from other files)
56 *******************************************************************************/
59 /*******************************************************************************
60 Exported global variables and functions (to be accessed by other files)
61 *******************************************************************************/
62 static void usb1_host_EnableINT_Module(void);
63 static void usb1_host_Enable_AttachINT(void);
64 static void usb1_host_Disable_AttachINT(void);
65 static void usb1_host_Disable_BchgINT(void);
68 /*******************************************************************************
69 Private global variables and functions
70 *******************************************************************************/
73 /*******************************************************************************
74 * Function Name: usb1_host_InitModule
75 * Description : Initializes the USB module in USB host module.
78 *******************************************************************************/
79 void usb1_host_InitModule (void)
85 usb1_host_init_pipe_status();
87 RZA_IO_RegWrite_16(&USB201
.SYSCFG0
,
89 USB_SYSCFG_DCFM_SHIFT
,
90 USB_SYSCFG_DCFM
); /* HOST mode */
91 RZA_IO_RegWrite_16(&USB201
.SYSCFG0
,
93 USB_SYSCFG_DRPD_SHIFT
,
94 USB_SYSCFG_DRPD
); /* PORT0 D+, D- setting */
98 buf1
= RZA_IO_RegRead_16(&USB201
.SYSSTS0
,
99 USB_SYSSTS0_LNST_SHIFT
,
101 Userdef_USB_usb1_host_delay_xms(50);
102 buf2
= RZA_IO_RegRead_16(&USB201
.SYSSTS0
,
103 USB_SYSSTS0_LNST_SHIFT
,
105 Userdef_USB_usb1_host_delay_xms(50);
106 buf3
= RZA_IO_RegRead_16(&USB201
.SYSSTS0
,
107 USB_SYSSTS0_LNST_SHIFT
,
110 } while ((buf1
!= buf2
) || (buf1
!= buf3
));
112 RZA_IO_RegWrite_16(&USB201
.SYSCFG0
,
114 USB_SYSCFG_USBE_SHIFT
,
117 USB201
.CFIFOSEL
= (uint16_t)(USB_HOST_BITRCNT
| USB_HOST_BITMBW_8
| USB_HOST_BITBYTE_LITTLE
);
118 USB201
.D0FIFOSEL
= (uint16_t)( USB_HOST_BITMBW_8
| USB_HOST_BITBYTE_LITTLE
);
119 USB201
.D1FIFOSEL
= (uint16_t)( USB_HOST_BITMBW_8
| USB_HOST_BITBYTE_LITTLE
);
122 /*******************************************************************************
123 * Function Name: usb1_host_CheckAttach
124 * Description : Returns the USB device connection state.
126 * Return Value : uint16_t ; USB_HOST_ATTACH : Attached
127 * : ; USB_HOST_DETACH : not Attached
128 *******************************************************************************/
129 uint16_t usb1_host_CheckAttach (void)
138 buf1
= RZA_IO_RegRead_16(&USB201
.SYSSTS0
,
139 USB_SYSSTS0_LNST_SHIFT
,
141 Userdef_USB_usb1_host_delay_xms(50);
142 buf2
= RZA_IO_RegRead_16(&USB201
.SYSSTS0
,
143 USB_SYSSTS0_LNST_SHIFT
,
145 Userdef_USB_usb1_host_delay_xms(50);
146 buf3
= RZA_IO_RegRead_16(&USB201
.SYSSTS0
,
147 USB_SYSSTS0_LNST_SHIFT
,
150 } while ((buf1
!= buf2
) || (buf1
!= buf3
));
152 rhst
= RZA_IO_RegRead_16(&USB201
.DVSTCTR0
,
153 USB_DVSTCTR0_RHST_SHIFT
,
155 if (rhst
== USB_HOST_UNDECID
)
157 if (buf1
== USB_HOST_FS_JSTS
)
159 if (g_usb1_host_SupportUsbDeviceSpeed
== USB_HOST_HIGH_SPEED
)
161 RZA_IO_RegWrite_16(&USB201
.SYSCFG0
,
163 USB_SYSCFG_HSE_SHIFT
,
168 RZA_IO_RegWrite_16(&USB201
.SYSCFG0
,
170 USB_SYSCFG_HSE_SHIFT
,
173 return USB_HOST_ATTACH
;
175 else if (buf1
== USB_HOST_LS_JSTS
)
177 /* Low Speed Device */
178 RZA_IO_RegWrite_16(&USB201
.SYSCFG0
,
180 USB_SYSCFG_HSE_SHIFT
,
182 return USB_HOST_ATTACH
;
189 else if ((rhst
== USB_HOST_HSMODE
) || (rhst
== USB_HOST_FSMODE
))
191 return USB_HOST_ATTACH
;
193 else if (rhst
== USB_HOST_LSMODE
)
195 return USB_HOST_ATTACH
;
202 return USB_HOST_DETACH
;
205 /*******************************************************************************
206 * Function Name: usb1_host_UsbAttach
207 * Description : Connects the USB device.
209 * Return Value : none
210 *******************************************************************************/
211 void usb1_host_UsbAttach (void)
213 usb1_host_EnableINT_Module();
214 usb1_host_Disable_BchgINT();
215 usb1_host_Disable_AttachINT();
216 usb1_host_Enable_DetachINT();
219 /*******************************************************************************
220 * Function Name: usb1_host_UsbDetach
221 * Description : Disconnects the USB device.
223 * Return Value : none
224 *******************************************************************************/
225 void usb1_host_UsbDetach (void)
230 g_usb1_host_driver_state
= USB_HOST_DRV_DETACHED
;
232 /* Terminate all the pipes in which communications on port */
233 /* are currently carried out */
234 for (pipe
= 0; pipe
< (USB_HOST_MAX_PIPE_NO
+ 1); ++pipe
)
236 if (g_usb1_host_pipe_status
[pipe
] != USB_HOST_PIPE_IDLE
)
238 if (pipe
== USB_HOST_PIPE0
)
240 devadr
= RZA_IO_RegRead_16(&USB201
.DCPMAXP
,
241 USB_DCPMAXP_DEVSEL_SHIFT
,
246 devadr
= RZA_IO_RegRead_16(&g_usb1_host_pipemaxp
[pipe
], USB_PIPEMAXP_DEVSEL_SHIFT
, USB_PIPEMAXP_DEVSEL
);
249 if (devadr
== g_usb1_host_UsbAddress
)
251 usb1_host_stop_transfer(pipe
);
254 g_usb1_host_pipe_status
[pipe
] = USB_HOST_PIPE_IDLE
;
258 g_usb1_host_ConfigNum
= 0;
259 g_usb1_host_UsbAddress
= 0;
260 g_usb1_host_default_max_packet
[USB_HOST_DEVICE_0
] = 64;
262 usb1_host_UsbDetach2();
265 /*******************************************************************************
266 * Function Name: usb1_host_UsbDetach2
267 * Description : Disconnects the USB device.
269 * Return Value : none
270 *******************************************************************************/
271 void usb1_host_UsbDetach2 (void)
273 usb1_host_Disable_DetachINT();
274 usb1_host_Disable_BchgINT();
275 usb1_host_Enable_AttachINT();
278 /*******************************************************************************
279 * Function Name: usb1_host_UsbBusReset
280 * Description : Issues the USB bus reset signal.
282 * Return Value : uint16_t ; RHST
283 *******************************************************************************/
284 uint16_t usb1_host_UsbBusReset (void)
289 RZA_IO_RegWrite_16(&USB201
.DVSTCTR0
,
291 USB_DVSTCTR0_USBRST_SHIFT
,
292 USB_DVSTCTR0_USBRST
);
293 RZA_IO_RegWrite_16(&USB201
.DVSTCTR0
,
295 USB_DVSTCTR0_UACT_SHIFT
,
298 Userdef_USB_usb1_host_delay_xms(50);
300 buffer
= USB201
.DVSTCTR0
;
301 buffer
&= (uint16_t)(~(USB_HOST_BITRST
));
302 buffer
|= USB_HOST_BITUACT
;
303 USB201
.DVSTCTR0
= buffer
;
305 Userdef_USB_usb1_host_delay_xms(20);
307 for (loop
= 0, buffer
= USB_HOST_HSPROC
; loop
< 3; ++loop
)
309 buffer
= RZA_IO_RegRead_16(&USB201
.DVSTCTR0
,
310 USB_DVSTCTR0_RHST_SHIFT
,
312 if (buffer
== USB_HOST_HSPROC
)
314 Userdef_USB_usb1_host_delay_xms(10);
325 /*******************************************************************************
326 * Function Name: usb1_host_UsbResume
327 * Description : Issues the USB resume signal.
329 * Return Value : int32_t ; DEVDRV_SUCCESS
331 *******************************************************************************/
332 int32_t usb1_host_UsbResume (void)
336 if ((g_usb1_host_driver_state
& USB_HOST_DRV_SUSPEND
) == 0)
342 RZA_IO_RegWrite_16(&USB201
.INTENB1
,
344 USB_INTENB1_BCHGE_SHIFT
,
346 RZA_IO_RegWrite_16(&USB201
.DVSTCTR0
,
348 USB_DVSTCTR0_RESUME_SHIFT
,
349 USB_DVSTCTR0_RESUME
);
350 Userdef_USB_usb1_host_delay_xms(20);
352 buf
= USB201
.DVSTCTR0
;
353 buf
&= (uint16_t)(~(USB_HOST_BITRESUME
));
354 buf
|= USB_HOST_BITUACT
;
355 USB201
.DVSTCTR0
= buf
;
357 g_usb1_host_driver_state
&= (uint16_t)~USB_HOST_DRV_SUSPEND
;
359 return DEVDRV_SUCCESS
;
362 /*******************************************************************************
363 * Function Name: usb1_host_UsbSuspend
364 * Description : Issues the USB suspend signal.
366 * Return Value : int32_t ; DEVDRV_SUCCESS :not SUSPEND
367 * : ; DEVDRV_ERROR :SUSPEND
368 *******************************************************************************/
369 int32_t usb1_host_UsbSuspend (void)
373 if ((g_usb1_host_driver_state
& USB_HOST_DRV_SUSPEND
) != 0)
379 RZA_IO_RegWrite_16(&USB201
.DVSTCTR0
,
381 USB_DVSTCTR0_UACT_SHIFT
,
384 Userdef_USB_usb1_host_delay_xms(5);
386 buf
= RZA_IO_RegRead_16(&USB201
.SYSSTS0
,
387 USB_SYSSTS0_LNST_SHIFT
,
389 if ((buf
!= USB_HOST_FS_JSTS
) && (buf
!= USB_HOST_LS_JSTS
))
391 usb1_host_UsbDetach();
395 g_usb1_host_driver_state
|= USB_HOST_DRV_SUSPEND
;
398 return DEVDRV_SUCCESS
;
401 /*******************************************************************************
402 * Function Name: usb1_host_Enable_DetachINT
403 * Description : Enables the USB disconnection interrupt.
405 * Return Value : none
406 *******************************************************************************/
407 void usb1_host_Enable_DetachINT (void)
409 USB201
.INTSTS1
= (uint16_t)(~(USB_HOST_BITDTCH
));
410 RZA_IO_RegWrite_16(&USB201
.INTENB1
,
412 USB_INTENB1_DTCHE_SHIFT
,
416 /*******************************************************************************
417 * Function Name: usb1_host_Disable_DetachINT
418 * Description : Disables the USB disconnection interrupt.
420 * Return Value : none
421 *******************************************************************************/
422 void usb1_host_Disable_DetachINT (void)
424 USB201
.INTSTS1
= (uint16_t)(~(USB_HOST_BITDTCH
));
425 RZA_IO_RegWrite_16(&USB201
.INTENB1
,
427 USB_INTENB1_DTCHE_SHIFT
,
431 /*******************************************************************************
432 * Function Name: usb1_host_Enable_AttachINT
433 * Description : Enables the USB connection detection interrupt.
435 * Return Value : none
436 *******************************************************************************/
437 void usb1_host_Enable_AttachINT (void)
439 USB201
.INTSTS1
= (uint16_t)(~(USB_HOST_BITATTCH
));
440 RZA_IO_RegWrite_16(&USB201
.INTENB1
,
442 USB_INTENB1_ATTCHE_SHIFT
,
446 /*******************************************************************************
447 * Function Name: usb1_host_Disable_AttachINT
448 * Description : Disables the USB connection detection interrupt.
450 * Return Value : none
451 *******************************************************************************/
452 void usb1_host_Disable_AttachINT (void)
454 USB201
.INTSTS1
= (uint16_t)(~(USB_HOST_BITATTCH
));
455 RZA_IO_RegWrite_16(&USB201
.INTENB1
,
457 USB_INTENB1_ATTCHE_SHIFT
,
461 /*******************************************************************************
462 * Function Name: usb1_host_Disable_BchgINT
463 * Description : Disables the USB bus change detection interrupt.
465 * Return Value : none
466 *******************************************************************************/
467 void usb1_host_Disable_BchgINT (void)
469 USB201
.INTSTS1
= (uint16_t)(~(USB_HOST_BITBCHG
));
470 RZA_IO_RegWrite_16(&USB201
.INTENB1
,
472 USB_INTENB1_BCHGE_SHIFT
,
476 /*******************************************************************************
477 * Function Name: usb1_host_set_devadd
478 * Description : DEVADDn register is set by specified value
479 * Arguments : uint16_t addr : Device address
480 * : uint16_t *devadd : Set value
481 * Return Value : none
482 *******************************************************************************/
483 void usb1_host_set_devadd (uint16_t addr
, uint16_t * devadd
)
486 uint16_t ret_flag
= DEVDRV_FLAG_ON
; // avoid warning.
490 case USB_HOST_DEVICE_0
:
491 ptr
= (uint16_t *)&USB201
.DEVADD0
;
494 case USB_HOST_DEVICE_1
:
495 ptr
= (uint16_t *)&USB201
.DEVADD1
;
498 case USB_HOST_DEVICE_2
:
499 ptr
= (uint16_t *)&USB201
.DEVADD2
;
502 case USB_HOST_DEVICE_3
:
503 ptr
= (uint16_t *)&USB201
.DEVADD3
;
506 case USB_HOST_DEVICE_4
:
507 ptr
= (uint16_t *)&USB201
.DEVADD4
;
510 case USB_HOST_DEVICE_5
:
511 ptr
= (uint16_t *)&USB201
.DEVADD5
;
514 case USB_HOST_DEVICE_6
:
515 ptr
= (uint16_t *)&USB201
.DEVADD6
;
518 case USB_HOST_DEVICE_7
:
519 ptr
= (uint16_t *)&USB201
.DEVADD7
;
522 case USB_HOST_DEVICE_8
:
523 ptr
= (uint16_t *)&USB201
.DEVADD8
;
526 case USB_HOST_DEVICE_9
:
527 ptr
= (uint16_t *)&USB201
.DEVADD9
;
530 case USB_HOST_DEVICE_10
:
531 ptr
= (uint16_t *)&USB201
.DEVADDA
;
535 ret_flag
= DEVDRV_FLAG_OFF
;
539 if (ret_flag
== DEVDRV_FLAG_ON
)
541 *ptr
= (uint16_t)(*devadd
& USB_HOST_DEVADD_MASK
);
545 /*******************************************************************************
546 * Function Name: usb1_host_get_devadd
547 * Description : DEVADDn register is obtained
548 * Arguments : uint16_t addr : Device address
549 * : uint16_t *devadd : USB_HOST_DEVADD register value
550 * Return Value : none
551 *******************************************************************************/
552 void usb1_host_get_devadd (uint16_t addr
, uint16_t * devadd
)
555 uint16_t ret_flag
= DEVDRV_FLAG_ON
; // avoid warning.
559 case USB_HOST_DEVICE_0
:
560 ptr
= (uint16_t *)&USB201
.DEVADD0
;
563 case USB_HOST_DEVICE_1
:
564 ptr
= (uint16_t *)&USB201
.DEVADD1
;
567 case USB_HOST_DEVICE_2
:
568 ptr
= (uint16_t *)&USB201
.DEVADD2
;
571 case USB_HOST_DEVICE_3
:
572 ptr
= (uint16_t *)&USB201
.DEVADD3
;
575 case USB_HOST_DEVICE_4
:
576 ptr
= (uint16_t *)&USB201
.DEVADD4
;
579 case USB_HOST_DEVICE_5
:
580 ptr
= (uint16_t *)&USB201
.DEVADD5
;
583 case USB_HOST_DEVICE_6
:
584 ptr
= (uint16_t *)&USB201
.DEVADD6
;
587 case USB_HOST_DEVICE_7
:
588 ptr
= (uint16_t *)&USB201
.DEVADD7
;
591 case USB_HOST_DEVICE_8
:
592 ptr
= (uint16_t *)&USB201
.DEVADD8
;
595 case USB_HOST_DEVICE_9
:
596 ptr
= (uint16_t *)&USB201
.DEVADD9
;
599 case USB_HOST_DEVICE_10
:
600 ptr
= (uint16_t *)&USB201
.DEVADDA
;
604 ret_flag
= DEVDRV_FLAG_OFF
;
608 if (ret_flag
== DEVDRV_FLAG_ON
)
614 /*******************************************************************************
615 * Function Name: usb1_host_EnableINT_Module
616 * Description : Enables BEMP/NRDY/BRDY interrupt and SIGN/SACK interrupt.
617 * : Enables NRDY/BEMP interrupt in the pipe0.
619 * Return Value : none
620 *******************************************************************************/
621 void usb1_host_EnableINT_Module (void)
625 buf
= USB201
.INTENB0
;
626 buf
|= (USB_HOST_BITBEMPE
| USB_HOST_BITNRDYE
| USB_HOST_BITBRDYE
);
627 USB201
.INTENB0
= buf
;
629 buf
= USB201
.INTENB1
;
630 buf
|= (USB_HOST_BITSIGNE
| USB_HOST_BITSACKE
);
631 USB201
.INTENB1
= buf
;
633 usb1_host_enable_nrdy_int(USB_HOST_PIPE0
);
634 usb1_host_enable_bemp_int(USB_HOST_PIPE0
);