X-TOUCH to djay bridge

Dependencies:   mbed mbed-rtos FATFileSystem

Committer:
okini3939
Date:
Wed Jun 05 04:54:37 2019 +0000
Revision:
1:0dac72ab5910
sample

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okini3939 1:0dac72ab5910 1 /*******************************************************************************
okini3939 1:0dac72ab5910 2 * DISCLAIMER
okini3939 1:0dac72ab5910 3 * This software is supplied by Renesas Electronics Corporation and is only
okini3939 1:0dac72ab5910 4 * intended for use with Renesas products. No other uses are authorized. This
okini3939 1:0dac72ab5910 5 * software is owned by Renesas Electronics Corporation and is protected under
okini3939 1:0dac72ab5910 6 * all applicable laws, including copyright laws.
okini3939 1:0dac72ab5910 7 * THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
okini3939 1:0dac72ab5910 8 * THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
okini3939 1:0dac72ab5910 9 * LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
okini3939 1:0dac72ab5910 10 * AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
okini3939 1:0dac72ab5910 11 * TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
okini3939 1:0dac72ab5910 12 * ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
okini3939 1:0dac72ab5910 13 * FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
okini3939 1:0dac72ab5910 14 * ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
okini3939 1:0dac72ab5910 15 * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
okini3939 1:0dac72ab5910 16 * Renesas reserves the right, without notice, to make changes to this software
okini3939 1:0dac72ab5910 17 * and to discontinue the availability of this software. By using this software,
okini3939 1:0dac72ab5910 18 * you agree to the additional terms and conditions found by accessing the
okini3939 1:0dac72ab5910 19 * following link:
okini3939 1:0dac72ab5910 20 * http://www.renesas.com/disclaimer
okini3939 1:0dac72ab5910 21 * Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
okini3939 1:0dac72ab5910 22 *******************************************************************************/
okini3939 1:0dac72ab5910 23 /*******************************************************************************
okini3939 1:0dac72ab5910 24 * File Name : usb1_host_intrn.c
okini3939 1:0dac72ab5910 25 * $Rev: 1116 $
okini3939 1:0dac72ab5910 26 * $Date:: 2014-07-09 16:29:19 +0900#$
okini3939 1:0dac72ab5910 27 * Device(s) : RZ/A1H
okini3939 1:0dac72ab5910 28 * Tool-Chain :
okini3939 1:0dac72ab5910 29 * OS : None
okini3939 1:0dac72ab5910 30 * H/W Platform :
okini3939 1:0dac72ab5910 31 * Description : RZ/A1H R7S72100 USB Sample Program
okini3939 1:0dac72ab5910 32 * Operation :
okini3939 1:0dac72ab5910 33 * Limitations :
okini3939 1:0dac72ab5910 34 *******************************************************************************/
okini3939 1:0dac72ab5910 35
okini3939 1:0dac72ab5910 36
okini3939 1:0dac72ab5910 37 /*******************************************************************************
okini3939 1:0dac72ab5910 38 Includes <System Includes> , "Project Includes"
okini3939 1:0dac72ab5910 39 *******************************************************************************/
okini3939 1:0dac72ab5910 40 #include "usb1_host.h"
okini3939 1:0dac72ab5910 41 #if(1) /* ohci_wrapp */
okini3939 1:0dac72ab5910 42 #include "ohci_wrapp_RZ_A1_local.h"
okini3939 1:0dac72ab5910 43 #endif
okini3939 1:0dac72ab5910 44
okini3939 1:0dac72ab5910 45
okini3939 1:0dac72ab5910 46 /*******************************************************************************
okini3939 1:0dac72ab5910 47 Typedef definitions
okini3939 1:0dac72ab5910 48 *******************************************************************************/
okini3939 1:0dac72ab5910 49
okini3939 1:0dac72ab5910 50
okini3939 1:0dac72ab5910 51 /*******************************************************************************
okini3939 1:0dac72ab5910 52 Macro definitions
okini3939 1:0dac72ab5910 53 *******************************************************************************/
okini3939 1:0dac72ab5910 54
okini3939 1:0dac72ab5910 55
okini3939 1:0dac72ab5910 56 /*******************************************************************************
okini3939 1:0dac72ab5910 57 Imported global variables and functions (from other files)
okini3939 1:0dac72ab5910 58 *******************************************************************************/
okini3939 1:0dac72ab5910 59
okini3939 1:0dac72ab5910 60
okini3939 1:0dac72ab5910 61 /*******************************************************************************
okini3939 1:0dac72ab5910 62 Exported global variables and functions (to be accessed by other files)
okini3939 1:0dac72ab5910 63 *******************************************************************************/
okini3939 1:0dac72ab5910 64
okini3939 1:0dac72ab5910 65
okini3939 1:0dac72ab5910 66 /*******************************************************************************
okini3939 1:0dac72ab5910 67 Private global variables and functions
okini3939 1:0dac72ab5910 68 *******************************************************************************/
okini3939 1:0dac72ab5910 69
okini3939 1:0dac72ab5910 70
okini3939 1:0dac72ab5910 71 /*******************************************************************************
okini3939 1:0dac72ab5910 72 * Function Name: usb1_host_brdy_int
okini3939 1:0dac72ab5910 73 * Description : Executes BRDY interrupt(USB_HOST_PIPE1-9).
okini3939 1:0dac72ab5910 74 * : According to the pipe that interrupt is generated in,
okini3939 1:0dac72ab5910 75 * : reads/writes buffer allocated in the pipe.
okini3939 1:0dac72ab5910 76 * : This function is executed in the BRDY interrupt handler.
okini3939 1:0dac72ab5910 77 * : This function clears BRDY interrupt status and BEMP interrupt
okini3939 1:0dac72ab5910 78 * : status.
okini3939 1:0dac72ab5910 79 * Arguments : uint16_t status ; BRDYSTS Register Value
okini3939 1:0dac72ab5910 80 * : uint16_t int_enb ; BRDYENB Register Value
okini3939 1:0dac72ab5910 81 * Return Value : none
okini3939 1:0dac72ab5910 82 *******************************************************************************/
okini3939 1:0dac72ab5910 83 void usb1_host_brdy_int (uint16_t status, uint16_t int_enb)
okini3939 1:0dac72ab5910 84 {
okini3939 1:0dac72ab5910 85 uint32_t int_sense = 0;
okini3939 1:0dac72ab5910 86 uint16_t pipe;
okini3939 1:0dac72ab5910 87 uint16_t pipebit;
okini3939 1:0dac72ab5910 88
okini3939 1:0dac72ab5910 89 for (pipe = USB_HOST_PIPE1; pipe <= USB_HOST_MAX_PIPE_NO; pipe++)
okini3939 1:0dac72ab5910 90 {
okini3939 1:0dac72ab5910 91 pipebit = g_usb1_host_bit_set[pipe];
okini3939 1:0dac72ab5910 92
okini3939 1:0dac72ab5910 93 if ((status & pipebit) && (int_enb & pipebit))
okini3939 1:0dac72ab5910 94 {
okini3939 1:0dac72ab5910 95 USB201.BRDYSTS = (uint16_t)~pipebit;
okini3939 1:0dac72ab5910 96 USB201.BEMPSTS = (uint16_t)~pipebit;
okini3939 1:0dac72ab5910 97
okini3939 1:0dac72ab5910 98 if ((g_usb1_host_PipeTbl[pipe] & USB_HOST_FIFO_USE) == USB_HOST_D0FIFO_DMA)
okini3939 1:0dac72ab5910 99 {
okini3939 1:0dac72ab5910 100 if (g_usb1_host_DmaStatus[USB_HOST_D0FIFO] != USB_HOST_DMA_READY)
okini3939 1:0dac72ab5910 101 {
okini3939 1:0dac72ab5910 102 usb1_host_dma_interrupt_d0fifo(int_sense);
okini3939 1:0dac72ab5910 103 }
okini3939 1:0dac72ab5910 104
okini3939 1:0dac72ab5910 105 if (RZA_IO_RegRead_16(&g_usb1_host_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
okini3939 1:0dac72ab5910 106 {
okini3939 1:0dac72ab5910 107 usb1_host_read_dma(pipe);
okini3939 1:0dac72ab5910 108 usb1_host_disable_brdy_int(pipe);
okini3939 1:0dac72ab5910 109 }
okini3939 1:0dac72ab5910 110 else
okini3939 1:0dac72ab5910 111 {
okini3939 1:0dac72ab5910 112 USB201.D0FIFOCTR = USB_HOST_BITBCLR;
okini3939 1:0dac72ab5910 113 g_usb1_host_pipe_status[pipe] = USB_HOST_PIPE_DONE;
okini3939 1:0dac72ab5910 114 }
okini3939 1:0dac72ab5910 115 }
okini3939 1:0dac72ab5910 116 else if ((g_usb1_host_PipeTbl[pipe] & USB_HOST_FIFO_USE) == USB_HOST_D1FIFO_DMA)
okini3939 1:0dac72ab5910 117 {
okini3939 1:0dac72ab5910 118 if (g_usb1_host_DmaStatus[USB_HOST_D1FIFO] != USB_HOST_DMA_READY)
okini3939 1:0dac72ab5910 119 {
okini3939 1:0dac72ab5910 120 usb1_host_dma_interrupt_d1fifo(int_sense);
okini3939 1:0dac72ab5910 121 }
okini3939 1:0dac72ab5910 122
okini3939 1:0dac72ab5910 123 if (RZA_IO_RegRead_16(&g_usb1_host_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
okini3939 1:0dac72ab5910 124 {
okini3939 1:0dac72ab5910 125 usb1_host_read_dma(pipe);
okini3939 1:0dac72ab5910 126 usb1_host_disable_brdy_int(pipe);
okini3939 1:0dac72ab5910 127 }
okini3939 1:0dac72ab5910 128 else
okini3939 1:0dac72ab5910 129 {
okini3939 1:0dac72ab5910 130 USB201.D1FIFOCTR = USB_HOST_BITBCLR;
okini3939 1:0dac72ab5910 131 g_usb1_host_pipe_status[pipe] = USB_HOST_PIPE_DONE;
okini3939 1:0dac72ab5910 132 }
okini3939 1:0dac72ab5910 133 }
okini3939 1:0dac72ab5910 134 else
okini3939 1:0dac72ab5910 135 {
okini3939 1:0dac72ab5910 136 if (RZA_IO_RegRead_16(&g_usb1_host_pipecfg[pipe], USB_PIPECFG_DIR_SHIFT, USB_PIPECFG_DIR) == 0)
okini3939 1:0dac72ab5910 137 {
okini3939 1:0dac72ab5910 138 usb1_host_read_buffer(pipe);
okini3939 1:0dac72ab5910 139 }
okini3939 1:0dac72ab5910 140 else
okini3939 1:0dac72ab5910 141 {
okini3939 1:0dac72ab5910 142 usb1_host_write_buffer(pipe);
okini3939 1:0dac72ab5910 143 }
okini3939 1:0dac72ab5910 144 }
okini3939 1:0dac72ab5910 145 #if(1) /* ohci_wrapp */
okini3939 1:0dac72ab5910 146 switch (g_usb1_host_pipe_status[pipe])
okini3939 1:0dac72ab5910 147 {
okini3939 1:0dac72ab5910 148 case USB_HOST_PIPE_DONE:
okini3939 1:0dac72ab5910 149 ohciwrapp_loc_TransEnd(pipe, TD_CC_NOERROR);
okini3939 1:0dac72ab5910 150 break;
okini3939 1:0dac72ab5910 151 case USB_HOST_PIPE_NORES:
okini3939 1:0dac72ab5910 152 case USB_HOST_PIPE_STALL:
okini3939 1:0dac72ab5910 153 case USB_HOST_PIPE_ERROR:
okini3939 1:0dac72ab5910 154 ohciwrapp_loc_TransEnd(pipe, TD_CC_STALL);
okini3939 1:0dac72ab5910 155 break;
okini3939 1:0dac72ab5910 156 default:
okini3939 1:0dac72ab5910 157 /* Do Nothing */
okini3939 1:0dac72ab5910 158 break;
okini3939 1:0dac72ab5910 159 }
okini3939 1:0dac72ab5910 160 #endif
okini3939 1:0dac72ab5910 161 }
okini3939 1:0dac72ab5910 162 }
okini3939 1:0dac72ab5910 163 }
okini3939 1:0dac72ab5910 164
okini3939 1:0dac72ab5910 165 /*******************************************************************************
okini3939 1:0dac72ab5910 166 * Function Name: usb1_host_nrdy_int
okini3939 1:0dac72ab5910 167 * Description : Executes NRDY interrupt(USB_HOST_PIPE1-9).
okini3939 1:0dac72ab5910 168 * : Checks NRDY interrupt cause by PID. When the cause if STALL,
okini3939 1:0dac72ab5910 169 * : regards the pipe state as STALL and ends the processing.
okini3939 1:0dac72ab5910 170 * : Then the cause is not STALL, increments the error count to
okini3939 1:0dac72ab5910 171 * : communicate again. When the error count is 3, determines
okini3939 1:0dac72ab5910 172 * : the pipe state as USB_HOST_PIPE_NORES and ends the processing.
okini3939 1:0dac72ab5910 173 * : This function is executed in the NRDY interrupt handler.
okini3939 1:0dac72ab5910 174 * : This function clears NRDY interrupt status.
okini3939 1:0dac72ab5910 175 * Arguments : uint16_t status ; NRDYSTS Register Value
okini3939 1:0dac72ab5910 176 * : uint16_t int_enb ; NRDYENB Register Value
okini3939 1:0dac72ab5910 177 * Return Value : none
okini3939 1:0dac72ab5910 178 *******************************************************************************/
okini3939 1:0dac72ab5910 179 void usb1_host_nrdy_int (uint16_t status, uint16_t int_enb)
okini3939 1:0dac72ab5910 180 {
okini3939 1:0dac72ab5910 181 uint16_t pid;
okini3939 1:0dac72ab5910 182 uint16_t pipe;
okini3939 1:0dac72ab5910 183 uint16_t bitcheck;
okini3939 1:0dac72ab5910 184
okini3939 1:0dac72ab5910 185 bitcheck = (uint16_t)(status & int_enb);
okini3939 1:0dac72ab5910 186
okini3939 1:0dac72ab5910 187 USB201.NRDYSTS = (uint16_t)~status;
okini3939 1:0dac72ab5910 188
okini3939 1:0dac72ab5910 189 for (pipe = USB_HOST_PIPE1; pipe <= USB_HOST_MAX_PIPE_NO; pipe++)
okini3939 1:0dac72ab5910 190 {
okini3939 1:0dac72ab5910 191 if ((bitcheck&g_usb1_host_bit_set[pipe]) == g_usb1_host_bit_set[pipe])
okini3939 1:0dac72ab5910 192 {
okini3939 1:0dac72ab5910 193 if (RZA_IO_RegRead_16(&USB201.SYSCFG0,
okini3939 1:0dac72ab5910 194 USB_SYSCFG_DCFM_SHIFT,
okini3939 1:0dac72ab5910 195 USB_SYSCFG_DCFM) == 1)
okini3939 1:0dac72ab5910 196 {
okini3939 1:0dac72ab5910 197 if (g_usb1_host_pipe_status[pipe] == USB_HOST_PIPE_WAIT)
okini3939 1:0dac72ab5910 198 {
okini3939 1:0dac72ab5910 199 pid = usb1_host_get_pid(pipe);
okini3939 1:0dac72ab5910 200
okini3939 1:0dac72ab5910 201 if ((pid == USB_HOST_PID_STALL) || (pid == USB_HOST_PID_STALL2))
okini3939 1:0dac72ab5910 202 {
okini3939 1:0dac72ab5910 203 g_usb1_host_pipe_status[pipe] = USB_HOST_PIPE_STALL;
okini3939 1:0dac72ab5910 204 #if(1) /* ohci_wrapp */
okini3939 1:0dac72ab5910 205 ohciwrapp_loc_TransEnd(pipe, TD_CC_STALL);
okini3939 1:0dac72ab5910 206 #endif
okini3939 1:0dac72ab5910 207 }
okini3939 1:0dac72ab5910 208 else
okini3939 1:0dac72ab5910 209 {
okini3939 1:0dac72ab5910 210 #if(1) /* ohci_wrapp */
okini3939 1:0dac72ab5910 211 g_usb1_host_pipe_status[pipe] = USB_HOST_PIPE_NORES;
okini3939 1:0dac72ab5910 212 ohciwrapp_loc_TransEnd(pipe, TD_CC_DEVICENOTRESPONDING);
okini3939 1:0dac72ab5910 213 #else
okini3939 1:0dac72ab5910 214 g_usb1_host_PipeIgnore[pipe]++;
okini3939 1:0dac72ab5910 215
okini3939 1:0dac72ab5910 216 if (g_usb1_host_PipeIgnore[pipe] == 3)
okini3939 1:0dac72ab5910 217 {
okini3939 1:0dac72ab5910 218 g_usb1_host_pipe_status[pipe] = USB_HOST_PIPE_NORES;
okini3939 1:0dac72ab5910 219 }
okini3939 1:0dac72ab5910 220 else
okini3939 1:0dac72ab5910 221 {
okini3939 1:0dac72ab5910 222 usb1_host_set_pid_buf(pipe);
okini3939 1:0dac72ab5910 223 }
okini3939 1:0dac72ab5910 224 #endif
okini3939 1:0dac72ab5910 225 }
okini3939 1:0dac72ab5910 226 }
okini3939 1:0dac72ab5910 227 }
okini3939 1:0dac72ab5910 228 else
okini3939 1:0dac72ab5910 229 {
okini3939 1:0dac72ab5910 230 /* USB Function */
okini3939 1:0dac72ab5910 231 }
okini3939 1:0dac72ab5910 232 }
okini3939 1:0dac72ab5910 233 }
okini3939 1:0dac72ab5910 234 }
okini3939 1:0dac72ab5910 235
okini3939 1:0dac72ab5910 236 /*******************************************************************************
okini3939 1:0dac72ab5910 237 * Function Name: usb1_host_bemp_int
okini3939 1:0dac72ab5910 238 * Description : Executes BEMP interrupt(USB_HOST_PIPE1-9).
okini3939 1:0dac72ab5910 239 * Arguments : uint16_t status ; BEMPSTS Register Value
okini3939 1:0dac72ab5910 240 * : uint16_t int_enb ; BEMPENB Register Value
okini3939 1:0dac72ab5910 241 * Return Value : none
okini3939 1:0dac72ab5910 242 *******************************************************************************/
okini3939 1:0dac72ab5910 243 void usb1_host_bemp_int (uint16_t status, uint16_t int_enb)
okini3939 1:0dac72ab5910 244 {
okini3939 1:0dac72ab5910 245 uint16_t pid;
okini3939 1:0dac72ab5910 246 uint16_t pipe;
okini3939 1:0dac72ab5910 247 uint16_t bitcheck;
okini3939 1:0dac72ab5910 248 uint16_t inbuf;
okini3939 1:0dac72ab5910 249
okini3939 1:0dac72ab5910 250 bitcheck = (uint16_t)(status & int_enb);
okini3939 1:0dac72ab5910 251
okini3939 1:0dac72ab5910 252 USB201.BEMPSTS = (uint16_t)~status;
okini3939 1:0dac72ab5910 253
okini3939 1:0dac72ab5910 254 for (pipe = USB_HOST_PIPE1; pipe <= USB_HOST_MAX_PIPE_NO; pipe++)
okini3939 1:0dac72ab5910 255 {
okini3939 1:0dac72ab5910 256 if ((bitcheck&g_usb1_host_bit_set[pipe]) == g_usb1_host_bit_set[pipe])
okini3939 1:0dac72ab5910 257 {
okini3939 1:0dac72ab5910 258 pid = usb1_host_get_pid(pipe);
okini3939 1:0dac72ab5910 259
okini3939 1:0dac72ab5910 260 if ((pid == USB_HOST_PID_STALL) || (pid == USB_HOST_PID_STALL2))
okini3939 1:0dac72ab5910 261 {
okini3939 1:0dac72ab5910 262 g_usb1_host_pipe_status[pipe] = USB_HOST_PIPE_STALL;
okini3939 1:0dac72ab5910 263 #if(1) /* ohci_wrapp */
okini3939 1:0dac72ab5910 264 ohciwrapp_loc_TransEnd(pipe, TD_CC_STALL);
okini3939 1:0dac72ab5910 265 #endif
okini3939 1:0dac72ab5910 266 }
okini3939 1:0dac72ab5910 267 else
okini3939 1:0dac72ab5910 268 {
okini3939 1:0dac72ab5910 269 inbuf = usb1_host_get_inbuf(pipe);
okini3939 1:0dac72ab5910 270
okini3939 1:0dac72ab5910 271 if (inbuf == 0)
okini3939 1:0dac72ab5910 272 {
okini3939 1:0dac72ab5910 273 usb1_host_disable_bemp_int(pipe);
okini3939 1:0dac72ab5910 274 usb1_host_set_pid_nak(pipe);
okini3939 1:0dac72ab5910 275 g_usb1_host_pipe_status[pipe] = USB_HOST_PIPE_DONE;
okini3939 1:0dac72ab5910 276 #if(1) /* ohci_wrapp */
okini3939 1:0dac72ab5910 277 ohciwrapp_loc_TransEnd(pipe, TD_CC_NOERROR);
okini3939 1:0dac72ab5910 278 #endif
okini3939 1:0dac72ab5910 279 }
okini3939 1:0dac72ab5910 280 }
okini3939 1:0dac72ab5910 281 }
okini3939 1:0dac72ab5910 282 }
okini3939 1:0dac72ab5910 283 }
okini3939 1:0dac72ab5910 284
okini3939 1:0dac72ab5910 285 /* End of File */