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);