I changed one line of code in the file with path name: USBDeviceHT/targets/TARGET_Maxim

Fork of USBDeviceHT by Helmut Tschemernjak

Committer:
dev_alexander
Date:
Fri Jun 01 21:43:55 2018 +0000
Revision:
6:c1f162fd7777
Parent:
0:a3ea811f80f2
Fixed Error with code not compiling due to an issue with there not being a (uint32_t) cast of a (void) pointer. Maxim was the only mbed vendor to not have this one (uint32_t) cast in the spot it was added to. Look into public repos for similar cases.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Helmut64 0:a3ea811f80f2 1 /*******************************************************************************
Helmut64 0:a3ea811f80f2 2 * DISCLAIMER
Helmut64 0:a3ea811f80f2 3 * This software is supplied by Renesas Electronics Corporation and is only
Helmut64 0:a3ea811f80f2 4 * intended for use with Renesas products. No other uses are authorized. This
Helmut64 0:a3ea811f80f2 5 * software is owned by Renesas Electronics Corporation and is protected under
Helmut64 0:a3ea811f80f2 6 * all applicable laws, including copyright laws.
Helmut64 0:a3ea811f80f2 7 * THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
Helmut64 0:a3ea811f80f2 8 * THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
Helmut64 0:a3ea811f80f2 9 * LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
Helmut64 0:a3ea811f80f2 10 * AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
Helmut64 0:a3ea811f80f2 11 * TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
Helmut64 0:a3ea811f80f2 12 * ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
Helmut64 0:a3ea811f80f2 13 * FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
Helmut64 0:a3ea811f80f2 14 * ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
Helmut64 0:a3ea811f80f2 15 * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
Helmut64 0:a3ea811f80f2 16 * Renesas reserves the right, without notice, to make changes to this software
Helmut64 0:a3ea811f80f2 17 * and to discontinue the availability of this software. By using this software,
Helmut64 0:a3ea811f80f2 18 * you agree to the additional terms and conditions found by accessing the
Helmut64 0:a3ea811f80f2 19 * following link:
Helmut64 0:a3ea811f80f2 20 * http://www.renesas.com/disclaimer
Helmut64 0:a3ea811f80f2 21 * Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
Helmut64 0:a3ea811f80f2 22 *******************************************************************************/
Helmut64 0:a3ea811f80f2 23 /*******************************************************************************
Helmut64 0:a3ea811f80f2 24 * File Name : usb0_function_dataio.c
Helmut64 0:a3ea811f80f2 25 * $Rev: 1116 $
Helmut64 0:a3ea811f80f2 26 * $Date:: 2014-07-09 16:29:19 +0900#$
Helmut64 0:a3ea811f80f2 27 * Device(s) : RZ/A1H
Helmut64 0:a3ea811f80f2 28 * Tool-Chain :
Helmut64 0:a3ea811f80f2 29 * OS : None
Helmut64 0:a3ea811f80f2 30 * H/W Platform :
Helmut64 0:a3ea811f80f2 31 * Description : RZ/A1H R7S72100 USB Sample Program
Helmut64 0:a3ea811f80f2 32 * Operation :
Helmut64 0:a3ea811f80f2 33 * Limitations :
Helmut64 0:a3ea811f80f2 34 *******************************************************************************/
Helmut64 0:a3ea811f80f2 35
Helmut64 0:a3ea811f80f2 36
Helmut64 0:a3ea811f80f2 37 /*******************************************************************************
Helmut64 0:a3ea811f80f2 38 Includes <System Includes> , "Project Includes"
Helmut64 0:a3ea811f80f2 39 *******************************************************************************/
Helmut64 0:a3ea811f80f2 40 #include "usb0_function.h"
Helmut64 0:a3ea811f80f2 41
Helmut64 0:a3ea811f80f2 42
Helmut64 0:a3ea811f80f2 43 /*******************************************************************************
Helmut64 0:a3ea811f80f2 44 Typedef definitions
Helmut64 0:a3ea811f80f2 45 *******************************************************************************/
Helmut64 0:a3ea811f80f2 46
Helmut64 0:a3ea811f80f2 47
Helmut64 0:a3ea811f80f2 48 /*******************************************************************************
Helmut64 0:a3ea811f80f2 49 Macro definitions
Helmut64 0:a3ea811f80f2 50 *******************************************************************************/
Helmut64 0:a3ea811f80f2 51
Helmut64 0:a3ea811f80f2 52
Helmut64 0:a3ea811f80f2 53 /*******************************************************************************
Helmut64 0:a3ea811f80f2 54 Imported global variables and functions (from other files)
Helmut64 0:a3ea811f80f2 55 *******************************************************************************/
Helmut64 0:a3ea811f80f2 56
Helmut64 0:a3ea811f80f2 57
Helmut64 0:a3ea811f80f2 58 /*******************************************************************************
Helmut64 0:a3ea811f80f2 59 Exported global variables and functions (to be accessed by other files)
Helmut64 0:a3ea811f80f2 60 *******************************************************************************/
Helmut64 0:a3ea811f80f2 61
Helmut64 0:a3ea811f80f2 62
Helmut64 0:a3ea811f80f2 63 /*******************************************************************************
Helmut64 0:a3ea811f80f2 64 Private global variables and functions
Helmut64 0:a3ea811f80f2 65 *******************************************************************************/
Helmut64 0:a3ea811f80f2 66 static uint16_t g_usb0_function_mbw[(USB_FUNCTION_MAX_PIPE_NO + 1)];
Helmut64 0:a3ea811f80f2 67
Helmut64 0:a3ea811f80f2 68 static void usb0_function_start_receive_trns_c(uint16_t pipe, uint32_t size, uint8_t *data);
Helmut64 0:a3ea811f80f2 69 static void usb0_function_start_receive_trns_d0(uint16_t pipe, uint32_t size, uint8_t *data);
Helmut64 0:a3ea811f80f2 70 static void usb0_function_start_receive_trns_d1(uint16_t pipe, uint32_t size, uint8_t *data);
Helmut64 0:a3ea811f80f2 71 static void usb0_function_start_receive_dma_d0(uint16_t pipe, uint32_t size, uint8_t *data);
Helmut64 0:a3ea811f80f2 72 static void usb0_function_start_receive_dma_d1(uint16_t pipe, uint32_t size, uint8_t *data);
Helmut64 0:a3ea811f80f2 73 static uint16_t usb0_function_read_dma_d0(uint16_t pipe);
Helmut64 0:a3ea811f80f2 74 static uint16_t usb0_function_read_dma_d1(uint16_t pipe);
Helmut64 0:a3ea811f80f2 75 static uint16_t usb0_function_write_dma_d0(uint16_t pipe);
Helmut64 0:a3ea811f80f2 76 static uint16_t usb0_function_write_dma_d1(uint16_t pipe);
Helmut64 0:a3ea811f80f2 77
Helmut64 0:a3ea811f80f2 78 static void usb0_function_read_c_fifo(uint16_t pipe, uint16_t count);
Helmut64 0:a3ea811f80f2 79 static void usb0_function_write_c_fifo(uint16_t Pipe, uint16_t count);
Helmut64 0:a3ea811f80f2 80 static void usb0_function_read_d0_fifo(uint16_t pipe, uint16_t count);
Helmut64 0:a3ea811f80f2 81 static void usb0_function_write_d0_fifo(uint16_t pipe, uint16_t count);
Helmut64 0:a3ea811f80f2 82 static void usb0_function_read_d1_fifo(uint16_t pipe, uint16_t count);
Helmut64 0:a3ea811f80f2 83 static void usb0_function_write_d1_fifo(uint16_t pipe, uint16_t count);
Helmut64 0:a3ea811f80f2 84
Helmut64 0:a3ea811f80f2 85 static void usb0_function_clear_transaction_counter(uint16_t pipe);
Helmut64 0:a3ea811f80f2 86 static void usb0_function_set_transaction_counter(uint16_t pipe, uint32_t count);
Helmut64 0:a3ea811f80f2 87
Helmut64 0:a3ea811f80f2 88 static uint32_t usb0_function_com_get_dmasize(uint32_t trncount, uint32_t dtptr);
Helmut64 0:a3ea811f80f2 89
Helmut64 0:a3ea811f80f2 90 static uint16_t usb0_function_set_dfacc_d0(uint16_t mbw, uint32_t count);
Helmut64 0:a3ea811f80f2 91 static uint16_t usb0_function_set_dfacc_d1(uint16_t mbw, uint32_t count);
Helmut64 0:a3ea811f80f2 92
Helmut64 0:a3ea811f80f2 93
Helmut64 0:a3ea811f80f2 94 /*******************************************************************************
Helmut64 0:a3ea811f80f2 95 * Function Name: usb0_function_start_send_transfer
Helmut64 0:a3ea811f80f2 96 * Description : Starts the USB data communication using pipe specified by the argument.
Helmut64 0:a3ea811f80f2 97 * Arguments : uint16_t pipe ; Pipe Number
Helmut64 0:a3ea811f80f2 98 * : uint32_t size ; Data Size
Helmut64 0:a3ea811f80f2 99 * : uint8_t *data ; Data Address
Helmut64 0:a3ea811f80f2 100 * Return Value : DEVDRV_USBF_WRITEEND ; Write end
Helmut64 0:a3ea811f80f2 101 * : DEVDRV_USBF_WRITESHRT ; short data
Helmut64 0:a3ea811f80f2 102 * : DEVDRV_USBF_WRITING ; Continue of data write
Helmut64 0:a3ea811f80f2 103 * : DEVDRV_USBF_WRITEDMA ; Write DMA
Helmut64 0:a3ea811f80f2 104 * : DEVDRV_USBF_FIFOERROR ; FIFO status
Helmut64 0:a3ea811f80f2 105 *******************************************************************************/
Helmut64 0:a3ea811f80f2 106 uint16_t usb0_function_start_send_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
Helmut64 0:a3ea811f80f2 107 {
Helmut64 0:a3ea811f80f2 108 uint16_t status;
Helmut64 0:a3ea811f80f2 109 uint16_t usefifo;
Helmut64 0:a3ea811f80f2 110 uint16_t mbw;
Helmut64 0:a3ea811f80f2 111
Helmut64 0:a3ea811f80f2 112 g_usb0_function_data_count[pipe] = size;
Helmut64 0:a3ea811f80f2 113 g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
Helmut64 0:a3ea811f80f2 114 g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_WAIT;
Helmut64 0:a3ea811f80f2 115
Helmut64 0:a3ea811f80f2 116 usb0_function_clear_bemp_sts(pipe);
Helmut64 0:a3ea811f80f2 117 usb0_function_clear_brdy_sts(pipe);
Helmut64 0:a3ea811f80f2 118 usb0_function_clear_nrdy_sts(pipe);
Helmut64 0:a3ea811f80f2 119
Helmut64 0:a3ea811f80f2 120 mbw = usb0_function_get_mbw(size, (uint32_t)data);
Helmut64 0:a3ea811f80f2 121
Helmut64 0:a3ea811f80f2 122 usefifo = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
Helmut64 0:a3ea811f80f2 123
Helmut64 0:a3ea811f80f2 124 switch (usefifo)
Helmut64 0:a3ea811f80f2 125 {
Helmut64 0:a3ea811f80f2 126 case USB_FUNCTION_D0FIFO_USE:
Helmut64 0:a3ea811f80f2 127 case USB_FUNCTION_D0FIFO_DMA:
Helmut64 0:a3ea811f80f2 128 usefifo = USB_FUNCTION_D0USE;
Helmut64 0:a3ea811f80f2 129 break;
Helmut64 0:a3ea811f80f2 130
Helmut64 0:a3ea811f80f2 131 case USB_FUNCTION_D1FIFO_USE:
Helmut64 0:a3ea811f80f2 132 case USB_FUNCTION_D1FIFO_DMA:
Helmut64 0:a3ea811f80f2 133 usefifo = USB_FUNCTION_D1USE;
Helmut64 0:a3ea811f80f2 134 break;
Helmut64 0:a3ea811f80f2 135
Helmut64 0:a3ea811f80f2 136 default:
Helmut64 0:a3ea811f80f2 137 usefifo = USB_FUNCTION_CUSE;
Helmut64 0:a3ea811f80f2 138 break;
Helmut64 0:a3ea811f80f2 139 };
Helmut64 0:a3ea811f80f2 140
Helmut64 0:a3ea811f80f2 141 usb0_function_set_curpipe(USB_FUNCTION_PIPE0, usefifo, DEVDRV_USBF_NO, mbw);
Helmut64 0:a3ea811f80f2 142
Helmut64 0:a3ea811f80f2 143 usb0_function_clear_transaction_counter(pipe);
Helmut64 0:a3ea811f80f2 144
Helmut64 0:a3ea811f80f2 145 usb0_function_aclrm(pipe);
Helmut64 0:a3ea811f80f2 146
Helmut64 0:a3ea811f80f2 147 status = usb0_function_write_buffer(pipe);
Helmut64 0:a3ea811f80f2 148
Helmut64 0:a3ea811f80f2 149 if (status != DEVDRV_USBF_FIFOERROR)
Helmut64 0:a3ea811f80f2 150 {
Helmut64 0:a3ea811f80f2 151 usb0_function_set_pid_buf(pipe);
Helmut64 0:a3ea811f80f2 152 }
Helmut64 0:a3ea811f80f2 153
Helmut64 0:a3ea811f80f2 154 return status;
Helmut64 0:a3ea811f80f2 155 }
Helmut64 0:a3ea811f80f2 156
Helmut64 0:a3ea811f80f2 157 /*******************************************************************************
Helmut64 0:a3ea811f80f2 158 * Function Name: usb0_function_write_buffer
Helmut64 0:a3ea811f80f2 159 * Description : Writes data in the buffer allocated in the pipe specified by
Helmut64 0:a3ea811f80f2 160 * : the argument. The FIFO for using is set in the pipe definition table.
Helmut64 0:a3ea811f80f2 161 * Arguments : uint16_t pipe ; Pipe Number
Helmut64 0:a3ea811f80f2 162 * Return Value : DEVDRV_USBF_WRITEEND ; Write end
Helmut64 0:a3ea811f80f2 163 * : DEVDRV_USBF_WRITESHRT ; short data
Helmut64 0:a3ea811f80f2 164 * : DEVDRV_USBF_WRITING ; Continue of data write
Helmut64 0:a3ea811f80f2 165 * : DEVDRV_USBF_WRITEDMA ; Write DMA
Helmut64 0:a3ea811f80f2 166 * : DEVDRV_USBF_FIFOERROR ; FIFO status
Helmut64 0:a3ea811f80f2 167 *******************************************************************************/
Helmut64 0:a3ea811f80f2 168 uint16_t usb0_function_write_buffer (uint16_t pipe)
Helmut64 0:a3ea811f80f2 169 {
Helmut64 0:a3ea811f80f2 170 uint16_t status;
Helmut64 0:a3ea811f80f2 171 uint16_t usefifo;
Helmut64 0:a3ea811f80f2 172
Helmut64 0:a3ea811f80f2 173 g_usb0_function_PipeIgnore[pipe] = 0;
Helmut64 0:a3ea811f80f2 174 usefifo = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
Helmut64 0:a3ea811f80f2 175
Helmut64 0:a3ea811f80f2 176 switch (usefifo)
Helmut64 0:a3ea811f80f2 177 {
Helmut64 0:a3ea811f80f2 178 case USB_FUNCTION_D0FIFO_USE:
Helmut64 0:a3ea811f80f2 179 status = usb0_function_write_buffer_d0(pipe);
Helmut64 0:a3ea811f80f2 180 break;
Helmut64 0:a3ea811f80f2 181
Helmut64 0:a3ea811f80f2 182 case USB_FUNCTION_D1FIFO_USE:
Helmut64 0:a3ea811f80f2 183 status = usb0_function_write_buffer_d1(pipe);
Helmut64 0:a3ea811f80f2 184 break;
Helmut64 0:a3ea811f80f2 185
Helmut64 0:a3ea811f80f2 186 case USB_FUNCTION_D0FIFO_DMA:
Helmut64 0:a3ea811f80f2 187 status = usb0_function_write_dma_d0(pipe);
Helmut64 0:a3ea811f80f2 188 break;
Helmut64 0:a3ea811f80f2 189
Helmut64 0:a3ea811f80f2 190 case USB_FUNCTION_D1FIFO_DMA:
Helmut64 0:a3ea811f80f2 191 status = usb0_function_write_dma_d1(pipe);
Helmut64 0:a3ea811f80f2 192 break;
Helmut64 0:a3ea811f80f2 193
Helmut64 0:a3ea811f80f2 194 default:
Helmut64 0:a3ea811f80f2 195 status = usb0_function_write_buffer_c(pipe);
Helmut64 0:a3ea811f80f2 196 break;
Helmut64 0:a3ea811f80f2 197 };
Helmut64 0:a3ea811f80f2 198
Helmut64 0:a3ea811f80f2 199 switch (status)
Helmut64 0:a3ea811f80f2 200 {
Helmut64 0:a3ea811f80f2 201 case DEVDRV_USBF_WRITING: /* Continue of data write */
Helmut64 0:a3ea811f80f2 202 usb0_function_enable_nrdy_int(pipe); /* Error (NORES or STALL) */
Helmut64 0:a3ea811f80f2 203 usb0_function_enable_brdy_int(pipe); /* Enable Ready Interrupt */
Helmut64 0:a3ea811f80f2 204 break;
Helmut64 0:a3ea811f80f2 205
Helmut64 0:a3ea811f80f2 206 case DEVDRV_USBF_WRITEEND: /* End of data write */
Helmut64 0:a3ea811f80f2 207 case DEVDRV_USBF_WRITESHRT: /* End of data write */
Helmut64 0:a3ea811f80f2 208 usb0_function_disable_brdy_int(pipe); /* Disable Ready Interrupt */
Helmut64 0:a3ea811f80f2 209 usb0_function_clear_nrdy_sts(pipe);
Helmut64 0:a3ea811f80f2 210 usb0_function_enable_nrdy_int(pipe); /* Error (NORES or STALL) */
Helmut64 0:a3ea811f80f2 211 /* for last transfer */
Helmut64 0:a3ea811f80f2 212 usb0_function_enable_bemp_int(pipe); /* Enable Empty Interrupt */
Helmut64 0:a3ea811f80f2 213 break;
Helmut64 0:a3ea811f80f2 214
Helmut64 0:a3ea811f80f2 215 case DEVDRV_USBF_WRITEDMA: /* DMA write */
Helmut64 0:a3ea811f80f2 216 usb0_function_clear_nrdy_sts(pipe);
Helmut64 0:a3ea811f80f2 217 usb0_function_enable_nrdy_int(pipe); /* Error (NORES or STALL) */
Helmut64 0:a3ea811f80f2 218 break;
Helmut64 0:a3ea811f80f2 219
Helmut64 0:a3ea811f80f2 220 case DEVDRV_USBF_FIFOERROR: /* FIFO access status */
Helmut64 0:a3ea811f80f2 221 default:
Helmut64 0:a3ea811f80f2 222 usb0_function_disable_brdy_int(pipe); /* Disable Ready Interrupt */
Helmut64 0:a3ea811f80f2 223 usb0_function_disable_bemp_int(pipe); /* Disable Empty Interrupt */
Helmut64 0:a3ea811f80f2 224 g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
Helmut64 0:a3ea811f80f2 225 break;
Helmut64 0:a3ea811f80f2 226 }
Helmut64 0:a3ea811f80f2 227
Helmut64 0:a3ea811f80f2 228 return status; /* End or Err or Continue */
Helmut64 0:a3ea811f80f2 229 }
Helmut64 0:a3ea811f80f2 230
Helmut64 0:a3ea811f80f2 231 /*******************************************************************************
Helmut64 0:a3ea811f80f2 232 * Function Name: usb0_function_write_buffer_c
Helmut64 0:a3ea811f80f2 233 * Description : Writes data in the buffer allocated in the pipe specified in
Helmut64 0:a3ea811f80f2 234 * : the argument. Writes data by CPU transfer using CFIFO.
Helmut64 0:a3ea811f80f2 235 * Arguments : uint16_t pipe ; Pipe Number
Helmut64 0:a3ea811f80f2 236 * Return Value : DEVDRV_USBF_WRITEEND ; Write end
Helmut64 0:a3ea811f80f2 237 * : DEVDRV_USBF_WRITESHRT ; short data
Helmut64 0:a3ea811f80f2 238 * : DEVDRV_USBF_WRITING ; Continue of data write
Helmut64 0:a3ea811f80f2 239 * : DEVDRV_USBF_WRITEDMA ; Write DMA
Helmut64 0:a3ea811f80f2 240 * : DEVDRV_USBF_FIFOERROR ; FIFO status
Helmut64 0:a3ea811f80f2 241 *******************************************************************************/
Helmut64 0:a3ea811f80f2 242 uint16_t usb0_function_write_buffer_c (uint16_t pipe)
Helmut64 0:a3ea811f80f2 243 {
Helmut64 0:a3ea811f80f2 244 uint32_t count;
Helmut64 0:a3ea811f80f2 245 uint16_t size;
Helmut64 0:a3ea811f80f2 246 uint16_t buffer;
Helmut64 0:a3ea811f80f2 247 uint16_t mxps;
Helmut64 0:a3ea811f80f2 248 uint16_t status;
Helmut64 0:a3ea811f80f2 249 uint16_t mbw;
Helmut64 0:a3ea811f80f2 250
Helmut64 0:a3ea811f80f2 251 if (g_usb0_function_CtrZeroLengthFlag == 1)
Helmut64 0:a3ea811f80f2 252 {
Helmut64 0:a3ea811f80f2 253 g_usb0_function_CtrZeroLengthFlag = 0; /* Zero Length Packet Flag CLR */
Helmut64 0:a3ea811f80f2 254 return DEVDRV_USBF_WRITEEND;
Helmut64 0:a3ea811f80f2 255 }
Helmut64 0:a3ea811f80f2 256
Helmut64 0:a3ea811f80f2 257 mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
Helmut64 0:a3ea811f80f2 258 if (pipe == USB_FUNCTION_PIPE0)
Helmut64 0:a3ea811f80f2 259 {
Helmut64 0:a3ea811f80f2 260 buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_WRITE, mbw);
Helmut64 0:a3ea811f80f2 261 }
Helmut64 0:a3ea811f80f2 262 else
Helmut64 0:a3ea811f80f2 263 {
Helmut64 0:a3ea811f80f2 264 buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_CUSE, DEVDRV_USBF_NO, mbw);
Helmut64 0:a3ea811f80f2 265 }
Helmut64 0:a3ea811f80f2 266
Helmut64 0:a3ea811f80f2 267 if (buffer == DEVDRV_USBF_FIFOERROR) /* FIFO access status */
Helmut64 0:a3ea811f80f2 268 {
Helmut64 0:a3ea811f80f2 269 return DEVDRV_USBF_FIFOERROR;
Helmut64 0:a3ea811f80f2 270 }
Helmut64 0:a3ea811f80f2 271
Helmut64 0:a3ea811f80f2 272 size = usb0_function_get_buf_size(pipe); /* Data buffer size */
Helmut64 0:a3ea811f80f2 273 mxps = usb0_function_get_mxps(pipe); /* Max Packet Size */
Helmut64 0:a3ea811f80f2 274
Helmut64 0:a3ea811f80f2 275 if (g_usb0_function_data_count[pipe] <= (uint32_t)size)
Helmut64 0:a3ea811f80f2 276 {
Helmut64 0:a3ea811f80f2 277 status = DEVDRV_USBF_WRITEEND; /* write continues */
Helmut64 0:a3ea811f80f2 278 count = g_usb0_function_data_count[pipe];
Helmut64 0:a3ea811f80f2 279
Helmut64 0:a3ea811f80f2 280 if (count == 0)
Helmut64 0:a3ea811f80f2 281 {
Helmut64 0:a3ea811f80f2 282 status = DEVDRV_USBF_WRITESHRT; /* Null Packet is end of write */
Helmut64 0:a3ea811f80f2 283 }
Helmut64 0:a3ea811f80f2 284
Helmut64 0:a3ea811f80f2 285 if ((count % mxps) != 0)
Helmut64 0:a3ea811f80f2 286 {
Helmut64 0:a3ea811f80f2 287 status = DEVDRV_USBF_WRITESHRT; /* Short Packet is end of write */
Helmut64 0:a3ea811f80f2 288 }
Helmut64 0:a3ea811f80f2 289 }
Helmut64 0:a3ea811f80f2 290 else
Helmut64 0:a3ea811f80f2 291 {
Helmut64 0:a3ea811f80f2 292 status = DEVDRV_USBF_WRITING; /* write continues */
Helmut64 0:a3ea811f80f2 293 count = (uint32_t)size;
Helmut64 0:a3ea811f80f2 294 }
Helmut64 0:a3ea811f80f2 295
Helmut64 0:a3ea811f80f2 296 usb0_function_write_c_fifo(pipe, (uint16_t)count);
Helmut64 0:a3ea811f80f2 297
Helmut64 0:a3ea811f80f2 298 if (g_usb0_function_data_count[pipe] < (uint32_t)size)
Helmut64 0:a3ea811f80f2 299 {
Helmut64 0:a3ea811f80f2 300 g_usb0_function_data_count[pipe] = 0;
Helmut64 0:a3ea811f80f2 301
Helmut64 0:a3ea811f80f2 302 if (RZA_IO_RegRead_16(&USB200.CFIFOCTR, USB_CFIFOCTR_BVAL_SHIFT, USB_CFIFOCTR_BVAL) == 0)
Helmut64 0:a3ea811f80f2 303 {
Helmut64 0:a3ea811f80f2 304 USB200.CFIFOCTR = USB_FUNCTION_BITBVAL; /* Short Packet */
Helmut64 0:a3ea811f80f2 305 g_usb0_function_CtrZeroLengthFlag = 1; /* Zero Length Packet Flag */
Helmut64 0:a3ea811f80f2 306 }
Helmut64 0:a3ea811f80f2 307 }
Helmut64 0:a3ea811f80f2 308 else
Helmut64 0:a3ea811f80f2 309 {
Helmut64 0:a3ea811f80f2 310 g_usb0_function_data_count[pipe] -= count;
Helmut64 0:a3ea811f80f2 311 }
Helmut64 0:a3ea811f80f2 312
Helmut64 0:a3ea811f80f2 313 return status; /* End or Err or Continue */
Helmut64 0:a3ea811f80f2 314 }
Helmut64 0:a3ea811f80f2 315
Helmut64 0:a3ea811f80f2 316 /*******************************************************************************
Helmut64 0:a3ea811f80f2 317 * Function Name: usb0_function_write_buffer_d0
Helmut64 0:a3ea811f80f2 318 * Description : Writes data in the buffer allocated in the pipe specified in the argument.
Helmut64 0:a3ea811f80f2 319 * : Writes data by CPU transfer using D0FIFO.
Helmut64 0:a3ea811f80f2 320 * Arguments : uint16_t pipe ; Pipe Number
Helmut64 0:a3ea811f80f2 321 * Return Value : DEVDRV_USBF_WRITEEND ; Write end
Helmut64 0:a3ea811f80f2 322 * : DEVDRV_USBF_WRITESHRT ; short data
Helmut64 0:a3ea811f80f2 323 * : DEVDRV_USBF_WRITING ; Continue of data write
Helmut64 0:a3ea811f80f2 324 * : DEVDRV_USBF_WRITEDMA ; Write DMA
Helmut64 0:a3ea811f80f2 325 * : DEVDRV_USBF_FIFOERROR ; FIFO status
Helmut64 0:a3ea811f80f2 326 *******************************************************************************/
Helmut64 0:a3ea811f80f2 327 uint16_t usb0_function_write_buffer_d0 (uint16_t pipe)
Helmut64 0:a3ea811f80f2 328 {
Helmut64 0:a3ea811f80f2 329 uint32_t count;
Helmut64 0:a3ea811f80f2 330 uint16_t size;
Helmut64 0:a3ea811f80f2 331 uint16_t buffer;
Helmut64 0:a3ea811f80f2 332 uint16_t mxps;
Helmut64 0:a3ea811f80f2 333 uint16_t status;
Helmut64 0:a3ea811f80f2 334 uint16_t mbw;
Helmut64 0:a3ea811f80f2 335
Helmut64 0:a3ea811f80f2 336 mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
Helmut64 0:a3ea811f80f2 337 buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
Helmut64 0:a3ea811f80f2 338 if (buffer == DEVDRV_USBF_FIFOERROR) /* FIFO access status */
Helmut64 0:a3ea811f80f2 339 {
Helmut64 0:a3ea811f80f2 340 return DEVDRV_USBF_FIFOERROR;
Helmut64 0:a3ea811f80f2 341 }
Helmut64 0:a3ea811f80f2 342
Helmut64 0:a3ea811f80f2 343 size = usb0_function_get_buf_size(pipe); /* Data buffer size */
Helmut64 0:a3ea811f80f2 344 mxps = usb0_function_get_mxps(pipe); /* Max Packet Size */
Helmut64 0:a3ea811f80f2 345
Helmut64 0:a3ea811f80f2 346 if (g_usb0_function_data_count[pipe] <= (uint32_t)size)
Helmut64 0:a3ea811f80f2 347 {
Helmut64 0:a3ea811f80f2 348 status = DEVDRV_USBF_WRITEEND; /* write continues */
Helmut64 0:a3ea811f80f2 349 count = g_usb0_function_data_count[pipe];
Helmut64 0:a3ea811f80f2 350
Helmut64 0:a3ea811f80f2 351 if (count == 0)
Helmut64 0:a3ea811f80f2 352 {
Helmut64 0:a3ea811f80f2 353 status = DEVDRV_USBF_WRITESHRT; /* Null Packet is end of write */
Helmut64 0:a3ea811f80f2 354 }
Helmut64 0:a3ea811f80f2 355
Helmut64 0:a3ea811f80f2 356 if ((count % mxps) != 0)
Helmut64 0:a3ea811f80f2 357 {
Helmut64 0:a3ea811f80f2 358 status = DEVDRV_USBF_WRITESHRT; /* Short Packet is end of write */
Helmut64 0:a3ea811f80f2 359 }
Helmut64 0:a3ea811f80f2 360 }
Helmut64 0:a3ea811f80f2 361 else
Helmut64 0:a3ea811f80f2 362 {
Helmut64 0:a3ea811f80f2 363 status = DEVDRV_USBF_WRITING; /* write continues */
Helmut64 0:a3ea811f80f2 364 count = (uint32_t)size;
Helmut64 0:a3ea811f80f2 365 }
Helmut64 0:a3ea811f80f2 366
Helmut64 0:a3ea811f80f2 367 usb0_function_write_d0_fifo(pipe, (uint16_t)count);
Helmut64 0:a3ea811f80f2 368
Helmut64 0:a3ea811f80f2 369 if (g_usb0_function_data_count[pipe] < (uint32_t)size)
Helmut64 0:a3ea811f80f2 370 {
Helmut64 0:a3ea811f80f2 371 g_usb0_function_data_count[pipe] = 0;
Helmut64 0:a3ea811f80f2 372 if (RZA_IO_RegRead_16(&USB200.D0FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
Helmut64 0:a3ea811f80f2 373 {
Helmut64 0:a3ea811f80f2 374 USB200.D0FIFOCTR = USB_FUNCTION_BITBVAL; /* Short Packet */
Helmut64 0:a3ea811f80f2 375 }
Helmut64 0:a3ea811f80f2 376 }
Helmut64 0:a3ea811f80f2 377 else
Helmut64 0:a3ea811f80f2 378 {
Helmut64 0:a3ea811f80f2 379 g_usb0_function_data_count[pipe] -= count;
Helmut64 0:a3ea811f80f2 380 }
Helmut64 0:a3ea811f80f2 381
Helmut64 0:a3ea811f80f2 382 return status; /* End or Err or Continue */
Helmut64 0:a3ea811f80f2 383 }
Helmut64 0:a3ea811f80f2 384
Helmut64 0:a3ea811f80f2 385 /*******************************************************************************
Helmut64 0:a3ea811f80f2 386 * Function Name: usb0_function_write_buffer_d1
Helmut64 0:a3ea811f80f2 387 * Description : Writes data in the buffer allocated in the pipe specified in the argument.
Helmut64 0:a3ea811f80f2 388 * : Writes data by CPU transfer using D1FIFO.
Helmut64 0:a3ea811f80f2 389 * Arguments : uint16_t pipe ; Pipe Number
Helmut64 0:a3ea811f80f2 390 * Return Value : DEVDRV_USBF_WRITEEND ; Write end
Helmut64 0:a3ea811f80f2 391 * : DEVDRV_USBF_WRITESHRT ; short data
Helmut64 0:a3ea811f80f2 392 * : DEVDRV_USBF_WRITING ; Continue of data write
Helmut64 0:a3ea811f80f2 393 * : DEVDRV_USBF_WRITEDMA ; Write DMA
Helmut64 0:a3ea811f80f2 394 * : DEVDRV_USBF_FIFOERROR ; FIFO status
Helmut64 0:a3ea811f80f2 395 *******************************************************************************/
Helmut64 0:a3ea811f80f2 396 uint16_t usb0_function_write_buffer_d1 (uint16_t pipe)
Helmut64 0:a3ea811f80f2 397 {
Helmut64 0:a3ea811f80f2 398 uint32_t count;
Helmut64 0:a3ea811f80f2 399 uint16_t size;
Helmut64 0:a3ea811f80f2 400 uint16_t buffer;
Helmut64 0:a3ea811f80f2 401 uint16_t mxps;
Helmut64 0:a3ea811f80f2 402 uint16_t status;
Helmut64 0:a3ea811f80f2 403 uint16_t mbw;
Helmut64 0:a3ea811f80f2 404
Helmut64 0:a3ea811f80f2 405 mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
Helmut64 0:a3ea811f80f2 406 buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
Helmut64 0:a3ea811f80f2 407
Helmut64 0:a3ea811f80f2 408 if (buffer == DEVDRV_USBF_FIFOERROR) /* FIFO access status */
Helmut64 0:a3ea811f80f2 409 {
Helmut64 0:a3ea811f80f2 410 return DEVDRV_USBF_FIFOERROR;
Helmut64 0:a3ea811f80f2 411 }
Helmut64 0:a3ea811f80f2 412
Helmut64 0:a3ea811f80f2 413 size = usb0_function_get_buf_size(pipe); /* Data buffer size */
Helmut64 0:a3ea811f80f2 414 mxps = usb0_function_get_mxps(pipe); /* Max Packet Size */
Helmut64 0:a3ea811f80f2 415
Helmut64 0:a3ea811f80f2 416 if (g_usb0_function_data_count[pipe] <= (uint32_t)size)
Helmut64 0:a3ea811f80f2 417 {
Helmut64 0:a3ea811f80f2 418 status = DEVDRV_USBF_WRITEEND; /* write continues */
Helmut64 0:a3ea811f80f2 419 count = g_usb0_function_data_count[pipe];
Helmut64 0:a3ea811f80f2 420
Helmut64 0:a3ea811f80f2 421 if (count == 0)
Helmut64 0:a3ea811f80f2 422 {
Helmut64 0:a3ea811f80f2 423 status = DEVDRV_USBF_WRITESHRT; /* Null Packet is end of write */
Helmut64 0:a3ea811f80f2 424 }
Helmut64 0:a3ea811f80f2 425
Helmut64 0:a3ea811f80f2 426 if ((count % mxps) != 0)
Helmut64 0:a3ea811f80f2 427 {
Helmut64 0:a3ea811f80f2 428 status = DEVDRV_USBF_WRITESHRT; /* Short Packet is end of write */
Helmut64 0:a3ea811f80f2 429 }
Helmut64 0:a3ea811f80f2 430 }
Helmut64 0:a3ea811f80f2 431 else
Helmut64 0:a3ea811f80f2 432 {
Helmut64 0:a3ea811f80f2 433 status = DEVDRV_USBF_WRITING; /* write continues */
Helmut64 0:a3ea811f80f2 434 count = (uint32_t)size;
Helmut64 0:a3ea811f80f2 435 }
Helmut64 0:a3ea811f80f2 436
Helmut64 0:a3ea811f80f2 437 usb0_function_write_d1_fifo(pipe, (uint16_t)count);
Helmut64 0:a3ea811f80f2 438
Helmut64 0:a3ea811f80f2 439 if (g_usb0_function_data_count[pipe] < (uint32_t)size)
Helmut64 0:a3ea811f80f2 440 {
Helmut64 0:a3ea811f80f2 441 g_usb0_function_data_count[pipe] = 0;
Helmut64 0:a3ea811f80f2 442
Helmut64 0:a3ea811f80f2 443 if (RZA_IO_RegRead_16(&USB200.D1FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
Helmut64 0:a3ea811f80f2 444 {
Helmut64 0:a3ea811f80f2 445 USB200.D1FIFOCTR = USB_FUNCTION_BITBVAL; /* Short Packet */
Helmut64 0:a3ea811f80f2 446 }
Helmut64 0:a3ea811f80f2 447 }
Helmut64 0:a3ea811f80f2 448 else
Helmut64 0:a3ea811f80f2 449 {
Helmut64 0:a3ea811f80f2 450 g_usb0_function_data_count[pipe] -= count;
Helmut64 0:a3ea811f80f2 451 }
Helmut64 0:a3ea811f80f2 452
Helmut64 0:a3ea811f80f2 453 return status; /* End or Err or Continue */
Helmut64 0:a3ea811f80f2 454 }
Helmut64 0:a3ea811f80f2 455
Helmut64 0:a3ea811f80f2 456 /*******************************************************************************
Helmut64 0:a3ea811f80f2 457 * Function Name: usb0_function_write_dma_d0
Helmut64 0:a3ea811f80f2 458 * Description : Writes data in the buffer allocated in the pipe specified in the argument.
Helmut64 0:a3ea811f80f2 459 * : Writes data by DMA transfer using D0FIFO.
Helmut64 0:a3ea811f80f2 460 * : The DMA-ch for using is specified by Userdef_USB_usb0_function_start_dma().
Helmut64 0:a3ea811f80f2 461 * Arguments : uint16_t pipe ; Pipe Number
Helmut64 0:a3ea811f80f2 462 * Return Value : DEVDRV_USBF_WRITEEND : Write end
Helmut64 0:a3ea811f80f2 463 * : DEVDRV_USBF_WRITESHRT : short data
Helmut64 0:a3ea811f80f2 464 * : DEVDRV_USBF_WRITING : Continue of data write
Helmut64 0:a3ea811f80f2 465 * : DEVDRV_USBF_WRITEDMA : Write DMA
Helmut64 0:a3ea811f80f2 466 * : DEVDRV_USBF_FIFOERROR : FIFO status
Helmut64 0:a3ea811f80f2 467 *******************************************************************************/
Helmut64 0:a3ea811f80f2 468 static uint16_t usb0_function_write_dma_d0 (uint16_t pipe)
Helmut64 0:a3ea811f80f2 469 {
Helmut64 0:a3ea811f80f2 470 uint32_t count;
Helmut64 0:a3ea811f80f2 471 uint16_t size;
Helmut64 0:a3ea811f80f2 472 uint16_t buffer;
Helmut64 0:a3ea811f80f2 473 uint16_t status;
Helmut64 0:a3ea811f80f2 474 uint16_t mbw;
Helmut64 0:a3ea811f80f2 475 uint16_t dfacc = 0;
Helmut64 0:a3ea811f80f2 476
Helmut64 0:a3ea811f80f2 477 mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
Helmut64 0:a3ea811f80f2 478 buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw);
Helmut64 0:a3ea811f80f2 479
Helmut64 0:a3ea811f80f2 480 if (buffer == DEVDRV_USBF_FIFOERROR) /* FIFO access status */
Helmut64 0:a3ea811f80f2 481 {
Helmut64 0:a3ea811f80f2 482 return DEVDRV_USBF_FIFOERROR;
Helmut64 0:a3ea811f80f2 483 }
Helmut64 0:a3ea811f80f2 484
Helmut64 0:a3ea811f80f2 485 size = usb0_function_get_buf_size(pipe); /* Data buffer size */
Helmut64 0:a3ea811f80f2 486 count = g_usb0_function_data_count[pipe];
Helmut64 0:a3ea811f80f2 487
Helmut64 0:a3ea811f80f2 488 if (count != 0)
Helmut64 0:a3ea811f80f2 489 {
Helmut64 0:a3ea811f80f2 490 g_usb0_function_DmaPipe[USB_FUNCTION_D0FIFO] = pipe;
Helmut64 0:a3ea811f80f2 491
Helmut64 0:a3ea811f80f2 492 if ((count % size) != 0)
Helmut64 0:a3ea811f80f2 493 {
Helmut64 0:a3ea811f80f2 494 g_usb0_function_DmaBval[USB_FUNCTION_D0FIFO] = 1;
Helmut64 0:a3ea811f80f2 495 }
Helmut64 0:a3ea811f80f2 496 else
Helmut64 0:a3ea811f80f2 497 {
Helmut64 0:a3ea811f80f2 498 g_usb0_function_DmaBval[USB_FUNCTION_D0FIFO] = 0;
Helmut64 0:a3ea811f80f2 499 }
Helmut64 0:a3ea811f80f2 500
Helmut64 0:a3ea811f80f2 501 dfacc = usb0_function_set_dfacc_d0(mbw, count);
Helmut64 0:a3ea811f80f2 502
Helmut64 0:a3ea811f80f2 503 if (mbw == USB_FUNCTION_BITMBW_32)
Helmut64 0:a3ea811f80f2 504 {
Helmut64 0:a3ea811f80f2 505 g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 2; /* 32bit transfer */
Helmut64 0:a3ea811f80f2 506 }
Helmut64 0:a3ea811f80f2 507 else if (mbw == USB_FUNCTION_BITMBW_16)
Helmut64 0:a3ea811f80f2 508 {
Helmut64 0:a3ea811f80f2 509 g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 1; /* 16bit transfer */
Helmut64 0:a3ea811f80f2 510 }
Helmut64 0:a3ea811f80f2 511 else
Helmut64 0:a3ea811f80f2 512 {
Helmut64 0:a3ea811f80f2 513 g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 0; /* 8bit transfer */
Helmut64 0:a3ea811f80f2 514 }
Helmut64 0:a3ea811f80f2 515
Helmut64 0:a3ea811f80f2 516 g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].fifo = USB_FUNCTION_D0FIFO_DMA;
Helmut64 0:a3ea811f80f2 517 g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].dir = USB_FUNCTION_BUF2FIFO;
Helmut64 0:a3ea811f80f2 518 g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].buffer = (uint32_t)g_usb0_function_data_pointer[pipe];
Helmut64 0:a3ea811f80f2 519 g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].bytes = count;
Helmut64 0:a3ea811f80f2 520
Helmut64 0:a3ea811f80f2 521 Userdef_USB_usb0_function_start_dma(&g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO], dfacc);
Helmut64 0:a3ea811f80f2 522
Helmut64 0:a3ea811f80f2 523 usb0_function_set_curpipe2(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw, dfacc);
Helmut64 0:a3ea811f80f2 524
Helmut64 0:a3ea811f80f2 525 RZA_IO_RegWrite_16(&USB200.D0FIFOSEL, 1, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
Helmut64 0:a3ea811f80f2 526
Helmut64 0:a3ea811f80f2 527 g_usb0_function_data_count[pipe] = 0;
Helmut64 0:a3ea811f80f2 528 g_usb0_function_data_pointer[pipe] += count;
Helmut64 0:a3ea811f80f2 529 status = DEVDRV_USBF_WRITEDMA; /* DMA write */
Helmut64 0:a3ea811f80f2 530 }
Helmut64 0:a3ea811f80f2 531 else
Helmut64 0:a3ea811f80f2 532 {
Helmut64 0:a3ea811f80f2 533 if (RZA_IO_RegRead_16(&USB200.D0FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
Helmut64 0:a3ea811f80f2 534 {
Helmut64 0:a3ea811f80f2 535 RZA_IO_RegWrite_16(&USB200.D0FIFOCTR, 1, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL); /* Short Packet */
Helmut64 0:a3ea811f80f2 536 }
Helmut64 0:a3ea811f80f2 537 status = DEVDRV_USBF_WRITESHRT; /* Short Packet is end of write */
Helmut64 0:a3ea811f80f2 538 }
Helmut64 0:a3ea811f80f2 539
Helmut64 0:a3ea811f80f2 540 return status; /* End or Err or Continue */
Helmut64 0:a3ea811f80f2 541 }
Helmut64 0:a3ea811f80f2 542
Helmut64 0:a3ea811f80f2 543 /*******************************************************************************
Helmut64 0:a3ea811f80f2 544 * Function Name: usb0_function_write_dma_d1
Helmut64 0:a3ea811f80f2 545 * Description : Writes data in the buffer allocated in the pipe specified in the argument.
Helmut64 0:a3ea811f80f2 546 * : Writes data by DMA transfer using D1FIFO.
Helmut64 0:a3ea811f80f2 547 * : The DMA-ch for using is specified by Userdef_USB_usb0_function_start_dma().
Helmut64 0:a3ea811f80f2 548 * Arguments : uint16_t pipe ; Pipe Number
Helmut64 0:a3ea811f80f2 549 * Return Value : DEVDRV_USBF_WRITEEND : Write end
Helmut64 0:a3ea811f80f2 550 * : DEVDRV_USBF_WRITESHRT : short data
Helmut64 0:a3ea811f80f2 551 * : DEVDRV_USBF_WRITING : Continue of data write
Helmut64 0:a3ea811f80f2 552 * : DEVDRV_USBF_WRITEDMA : Write DMA
Helmut64 0:a3ea811f80f2 553 * : DEVDRV_USBF_FIFOERROR : FIFO status
Helmut64 0:a3ea811f80f2 554 *******************************************************************************/
Helmut64 0:a3ea811f80f2 555 static uint16_t usb0_function_write_dma_d1 (uint16_t pipe)
Helmut64 0:a3ea811f80f2 556 {
Helmut64 0:a3ea811f80f2 557 uint32_t count;
Helmut64 0:a3ea811f80f2 558 uint16_t size;
Helmut64 0:a3ea811f80f2 559 uint16_t buffer;
Helmut64 0:a3ea811f80f2 560 uint16_t status;
Helmut64 0:a3ea811f80f2 561 uint16_t mbw;
Helmut64 0:a3ea811f80f2 562 uint16_t dfacc=0;
Helmut64 0:a3ea811f80f2 563
Helmut64 0:a3ea811f80f2 564 mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
Helmut64 0:a3ea811f80f2 565 buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw);
Helmut64 0:a3ea811f80f2 566
Helmut64 0:a3ea811f80f2 567 if (buffer == DEVDRV_USBF_FIFOERROR) /* FIFO access status */
Helmut64 0:a3ea811f80f2 568 {
Helmut64 0:a3ea811f80f2 569 return DEVDRV_USBF_FIFOERROR;
Helmut64 0:a3ea811f80f2 570 }
Helmut64 0:a3ea811f80f2 571
Helmut64 0:a3ea811f80f2 572 size = usb0_function_get_buf_size(pipe); /* Data buffer size */
Helmut64 0:a3ea811f80f2 573 count = g_usb0_function_data_count[pipe];
Helmut64 0:a3ea811f80f2 574
Helmut64 0:a3ea811f80f2 575 if (count != 0)
Helmut64 0:a3ea811f80f2 576 {
Helmut64 0:a3ea811f80f2 577 g_usb0_function_DmaPipe[USB_FUNCTION_D1FIFO] = pipe;
Helmut64 0:a3ea811f80f2 578 if ((count % size) != 0)
Helmut64 0:a3ea811f80f2 579 {
Helmut64 0:a3ea811f80f2 580 g_usb0_function_DmaBval[USB_FUNCTION_D1FIFO] = 1;
Helmut64 0:a3ea811f80f2 581 }
Helmut64 0:a3ea811f80f2 582 else
Helmut64 0:a3ea811f80f2 583 {
Helmut64 0:a3ea811f80f2 584 g_usb0_function_DmaBval[USB_FUNCTION_D1FIFO] = 0;
Helmut64 0:a3ea811f80f2 585 }
Helmut64 0:a3ea811f80f2 586
Helmut64 0:a3ea811f80f2 587 dfacc = usb0_function_set_dfacc_d1(mbw, count);
Helmut64 0:a3ea811f80f2 588
Helmut64 0:a3ea811f80f2 589 if (mbw == USB_FUNCTION_BITMBW_32)
Helmut64 0:a3ea811f80f2 590 {
Helmut64 0:a3ea811f80f2 591 g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 2; /* 32bit transfer */
Helmut64 0:a3ea811f80f2 592 }
Helmut64 0:a3ea811f80f2 593 else if (mbw == USB_FUNCTION_BITMBW_16)
Helmut64 0:a3ea811f80f2 594 {
Helmut64 0:a3ea811f80f2 595 g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 1; /* 16bit transfer */
Helmut64 0:a3ea811f80f2 596 }
Helmut64 0:a3ea811f80f2 597 else
Helmut64 0:a3ea811f80f2 598 {
Helmut64 0:a3ea811f80f2 599 g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 0; /* 8bit transfer */
Helmut64 0:a3ea811f80f2 600 }
Helmut64 0:a3ea811f80f2 601
Helmut64 0:a3ea811f80f2 602 g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].fifo = USB_FUNCTION_D1FIFO_DMA;
Helmut64 0:a3ea811f80f2 603 g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].dir = USB_FUNCTION_BUF2FIFO;
Helmut64 0:a3ea811f80f2 604 g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].buffer = (uint32_t)g_usb0_function_data_pointer[pipe];
Helmut64 0:a3ea811f80f2 605 g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].bytes = count;
Helmut64 0:a3ea811f80f2 606
Helmut64 0:a3ea811f80f2 607 Userdef_USB_usb0_function_start_dma(&g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO], dfacc);
Helmut64 0:a3ea811f80f2 608
Helmut64 0:a3ea811f80f2 609 usb0_function_set_curpipe2(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw, dfacc);
Helmut64 0:a3ea811f80f2 610
Helmut64 0:a3ea811f80f2 611 RZA_IO_RegWrite_16(&USB200.D1FIFOSEL, 1, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
Helmut64 0:a3ea811f80f2 612
Helmut64 0:a3ea811f80f2 613 g_usb0_function_data_count[pipe] = 0;
Helmut64 0:a3ea811f80f2 614 g_usb0_function_data_pointer[pipe] += count;
Helmut64 0:a3ea811f80f2 615
Helmut64 0:a3ea811f80f2 616 status = DEVDRV_USBF_WRITEDMA; /* DMA write */
Helmut64 0:a3ea811f80f2 617 }
Helmut64 0:a3ea811f80f2 618 else
Helmut64 0:a3ea811f80f2 619 {
Helmut64 0:a3ea811f80f2 620 if (RZA_IO_RegRead_16(&USB200.D1FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
Helmut64 0:a3ea811f80f2 621 {
Helmut64 0:a3ea811f80f2 622 RZA_IO_RegWrite_16(&USB200.D1FIFOCTR, 1, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL); /* Short Packet */
Helmut64 0:a3ea811f80f2 623 }
Helmut64 0:a3ea811f80f2 624 status = DEVDRV_USBF_WRITESHRT; /* Short Packet is end of write */
Helmut64 0:a3ea811f80f2 625 }
Helmut64 0:a3ea811f80f2 626
Helmut64 0:a3ea811f80f2 627 return status; /* End or Err or Continue */
Helmut64 0:a3ea811f80f2 628 }
Helmut64 0:a3ea811f80f2 629
Helmut64 0:a3ea811f80f2 630 /*******************************************************************************
Helmut64 0:a3ea811f80f2 631 * Function Name: usb0_function_start_receive_transfer
Helmut64 0:a3ea811f80f2 632 * Description : Starts USB data reception using the pipe specified in the argument.
Helmut64 0:a3ea811f80f2 633 * : The FIFO for using is set in the pipe definition table.
Helmut64 0:a3ea811f80f2 634 * Arguments : uint16_t pipe ; Pipe Number
Helmut64 0:a3ea811f80f2 635 * : uint32_t size ; Data Size
Helmut64 0:a3ea811f80f2 636 * : uint8_t *data ; Data Address
Helmut64 0:a3ea811f80f2 637 * Return Value : none
Helmut64 0:a3ea811f80f2 638 *******************************************************************************/
Helmut64 0:a3ea811f80f2 639 void usb0_function_start_receive_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
Helmut64 0:a3ea811f80f2 640 {
Helmut64 0:a3ea811f80f2 641 uint16_t usefifo;
Helmut64 0:a3ea811f80f2 642
Helmut64 0:a3ea811f80f2 643 usb0_function_clear_bemp_sts(pipe);
Helmut64 0:a3ea811f80f2 644 usb0_function_clear_brdy_sts(pipe);
Helmut64 0:a3ea811f80f2 645 usb0_function_clear_nrdy_sts(pipe);
Helmut64 0:a3ea811f80f2 646
Helmut64 0:a3ea811f80f2 647 usefifo = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
Helmut64 0:a3ea811f80f2 648
Helmut64 0:a3ea811f80f2 649 switch (usefifo)
Helmut64 0:a3ea811f80f2 650 {
Helmut64 0:a3ea811f80f2 651 case USB_FUNCTION_D0FIFO_USE:
Helmut64 0:a3ea811f80f2 652 usb0_function_start_receive_trns_d0(pipe, size, data);
Helmut64 0:a3ea811f80f2 653 break;
Helmut64 0:a3ea811f80f2 654
Helmut64 0:a3ea811f80f2 655 case USB_FUNCTION_D1FIFO_USE:
Helmut64 0:a3ea811f80f2 656 usb0_function_start_receive_trns_d1(pipe, size, data);
Helmut64 0:a3ea811f80f2 657 break;
Helmut64 0:a3ea811f80f2 658
Helmut64 0:a3ea811f80f2 659 case USB_FUNCTION_D0FIFO_DMA:
Helmut64 0:a3ea811f80f2 660 usb0_function_start_receive_dma_d0(pipe, size, data);
Helmut64 0:a3ea811f80f2 661 break;
Helmut64 0:a3ea811f80f2 662
Helmut64 0:a3ea811f80f2 663 case USB_FUNCTION_D1FIFO_DMA:
Helmut64 0:a3ea811f80f2 664 usb0_function_start_receive_dma_d1(pipe, size, data);
Helmut64 0:a3ea811f80f2 665 break;
Helmut64 0:a3ea811f80f2 666
Helmut64 0:a3ea811f80f2 667 default:
Helmut64 0:a3ea811f80f2 668 usb0_function_start_receive_trns_c(pipe, size, data);
Helmut64 0:a3ea811f80f2 669 break;
Helmut64 0:a3ea811f80f2 670 }
Helmut64 0:a3ea811f80f2 671 }
Helmut64 0:a3ea811f80f2 672
Helmut64 0:a3ea811f80f2 673 /*******************************************************************************
Helmut64 0:a3ea811f80f2 674 * Function Name: usb0_function_start_receive_trns_c
Helmut64 0:a3ea811f80f2 675 * Description : Reads data from the buffer allocated in the pipe specified in the argument.
Helmut64 0:a3ea811f80f2 676 * : Reads data by CPU transfer using CFIFO.
Helmut64 0:a3ea811f80f2 677 * : When storing data in the buffer allocated in the pipe specified in the
Helmut64 0:a3ea811f80f2 678 * : argument, BRDY interrupt is generated to read data
Helmut64 0:a3ea811f80f2 679 * : in the interrupt.
Helmut64 0:a3ea811f80f2 680 * Arguments : uint16_t pipe ; Pipe Number
Helmut64 0:a3ea811f80f2 681 * : uint32_t size ; Data Size
Helmut64 0:a3ea811f80f2 682 * : uint8_t *data ; Data Address
Helmut64 0:a3ea811f80f2 683 * Return Value : none
Helmut64 0:a3ea811f80f2 684 *******************************************************************************/
Helmut64 0:a3ea811f80f2 685 static void usb0_function_start_receive_trns_c (uint16_t pipe, uint32_t size, uint8_t * data)
Helmut64 0:a3ea811f80f2 686 {
Helmut64 0:a3ea811f80f2 687 uint16_t mbw;
Helmut64 0:a3ea811f80f2 688
Helmut64 0:a3ea811f80f2 689 usb0_function_set_pid_nak(pipe);
Helmut64 0:a3ea811f80f2 690 g_usb0_function_data_count[pipe] = size;
Helmut64 0:a3ea811f80f2 691 g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
Helmut64 0:a3ea811f80f2 692 g_usb0_function_PipeIgnore[pipe] = 0;
Helmut64 0:a3ea811f80f2 693
Helmut64 0:a3ea811f80f2 694 g_usb0_function_PipeDataSize[pipe] = size;
Helmut64 0:a3ea811f80f2 695 g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_WAIT;
Helmut64 0:a3ea811f80f2 696
Helmut64 0:a3ea811f80f2 697 mbw = usb0_function_get_mbw(size, (uint32_t)data);
Helmut64 0:a3ea811f80f2 698 usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_READ, mbw);
Helmut64 0:a3ea811f80f2 699 USB200.CFIFOCTR = USB_FUNCTION_BITBCLR;
Helmut64 0:a3ea811f80f2 700
Helmut64 0:a3ea811f80f2 701 usb0_function_set_transaction_counter(pipe, size);
Helmut64 0:a3ea811f80f2 702
Helmut64 0:a3ea811f80f2 703 usb0_function_aclrm(pipe);
Helmut64 0:a3ea811f80f2 704
Helmut64 0:a3ea811f80f2 705 usb0_function_enable_nrdy_int(pipe);
Helmut64 0:a3ea811f80f2 706 usb0_function_enable_brdy_int(pipe);
Helmut64 0:a3ea811f80f2 707
Helmut64 0:a3ea811f80f2 708 usb0_function_set_pid_buf(pipe);
Helmut64 0:a3ea811f80f2 709 }
Helmut64 0:a3ea811f80f2 710
Helmut64 0:a3ea811f80f2 711 /*******************************************************************************
Helmut64 0:a3ea811f80f2 712 * Function Name: usb0_function_start_receive_trns_d0
Helmut64 0:a3ea811f80f2 713 * Description : Reads data from the buffer allocated in the pipe specified in the argument.
Helmut64 0:a3ea811f80f2 714 * : Reads data by CPU transfer using D0FIFO.
Helmut64 0:a3ea811f80f2 715 * : This function does not read data from the buffer.
Helmut64 0:a3ea811f80f2 716 * : When storing data in the buffer allocated in the pipe specified
Helmut64 0:a3ea811f80f2 717 * : in the argument, BRDY interrupt is generated to read data in the
Helmut64 0:a3ea811f80f2 718 * : interrupt.
Helmut64 0:a3ea811f80f2 719 * Arguments : uint16_t pipe ; Pipe Number
Helmut64 0:a3ea811f80f2 720 * : uint32_t size ; Data Size
Helmut64 0:a3ea811f80f2 721 * : uint8_t *data ; Data Address
Helmut64 0:a3ea811f80f2 722 * Return Value : none
Helmut64 0:a3ea811f80f2 723 *******************************************************************************/
Helmut64 0:a3ea811f80f2 724 static void usb0_function_start_receive_trns_d0 (uint16_t pipe, uint32_t size, uint8_t * data)
Helmut64 0:a3ea811f80f2 725 {
Helmut64 0:a3ea811f80f2 726 uint16_t mbw;
Helmut64 0:a3ea811f80f2 727
Helmut64 0:a3ea811f80f2 728 usb0_function_set_pid_nak(pipe);
Helmut64 0:a3ea811f80f2 729 g_usb0_function_data_count[pipe] = size;
Helmut64 0:a3ea811f80f2 730 g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
Helmut64 0:a3ea811f80f2 731 g_usb0_function_PipeIgnore[pipe] = 0;
Helmut64 0:a3ea811f80f2 732
Helmut64 0:a3ea811f80f2 733 g_usb0_function_PipeDataSize[pipe] = size;
Helmut64 0:a3ea811f80f2 734 g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_WAIT;
Helmut64 0:a3ea811f80f2 735
Helmut64 0:a3ea811f80f2 736 mbw = usb0_function_get_mbw(size, (uint32_t)data);
Helmut64 0:a3ea811f80f2 737 usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
Helmut64 0:a3ea811f80f2 738
Helmut64 0:a3ea811f80f2 739 usb0_function_set_transaction_counter(pipe, size);
Helmut64 0:a3ea811f80f2 740
Helmut64 0:a3ea811f80f2 741 usb0_function_aclrm(pipe);
Helmut64 0:a3ea811f80f2 742
Helmut64 0:a3ea811f80f2 743 usb0_function_enable_nrdy_int(pipe);
Helmut64 0:a3ea811f80f2 744 usb0_function_enable_brdy_int(pipe);
Helmut64 0:a3ea811f80f2 745
Helmut64 0:a3ea811f80f2 746 usb0_function_set_pid_buf(pipe);
Helmut64 0:a3ea811f80f2 747 }
Helmut64 0:a3ea811f80f2 748
Helmut64 0:a3ea811f80f2 749 /*******************************************************************************
Helmut64 0:a3ea811f80f2 750 * Function Name: usb0_function_start_receive_trns_d1
Helmut64 0:a3ea811f80f2 751 * Description : Reads data from the buffer allocated in the pipe specified in the argument.
Helmut64 0:a3ea811f80f2 752 * : Reads data by CPU transfer using D1FIFO.
Helmut64 0:a3ea811f80f2 753 * : This function does not read data from the buffer.
Helmut64 0:a3ea811f80f2 754 * : When storing data in the buffer allocated in the pipe specified
Helmut64 0:a3ea811f80f2 755 * : in the argument, BRDY interrupt is generated to read data.
Helmut64 0:a3ea811f80f2 756 * Arguments : uint16_t pipe ; Pipe Number
Helmut64 0:a3ea811f80f2 757 * : uint32_t size ; Data Size
Helmut64 0:a3ea811f80f2 758 * : uint8_t *data ; Data Address
Helmut64 0:a3ea811f80f2 759 * Return Value : none
Helmut64 0:a3ea811f80f2 760 *******************************************************************************/
Helmut64 0:a3ea811f80f2 761 static void usb0_function_start_receive_trns_d1 (uint16_t pipe, uint32_t size, uint8_t * data)
Helmut64 0:a3ea811f80f2 762 {
Helmut64 0:a3ea811f80f2 763 uint16_t mbw;
Helmut64 0:a3ea811f80f2 764
Helmut64 0:a3ea811f80f2 765 usb0_function_set_pid_nak(pipe);
Helmut64 0:a3ea811f80f2 766 g_usb0_function_data_count[pipe] = size;
Helmut64 0:a3ea811f80f2 767 g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
Helmut64 0:a3ea811f80f2 768 g_usb0_function_PipeIgnore[pipe] = 0;
Helmut64 0:a3ea811f80f2 769
Helmut64 0:a3ea811f80f2 770 g_usb0_function_PipeDataSize[pipe] = size;
Helmut64 0:a3ea811f80f2 771 g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_WAIT;
Helmut64 0:a3ea811f80f2 772
Helmut64 0:a3ea811f80f2 773 mbw = usb0_function_get_mbw(size, (uint32_t)data);
Helmut64 0:a3ea811f80f2 774 usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
Helmut64 0:a3ea811f80f2 775
Helmut64 0:a3ea811f80f2 776 usb0_function_set_transaction_counter(pipe, size);
Helmut64 0:a3ea811f80f2 777
Helmut64 0:a3ea811f80f2 778 usb0_function_aclrm(pipe);
Helmut64 0:a3ea811f80f2 779
Helmut64 0:a3ea811f80f2 780 usb0_function_enable_nrdy_int(pipe);
Helmut64 0:a3ea811f80f2 781 usb0_function_enable_brdy_int(pipe);
Helmut64 0:a3ea811f80f2 782
Helmut64 0:a3ea811f80f2 783 usb0_function_set_pid_buf(pipe);
Helmut64 0:a3ea811f80f2 784 }
Helmut64 0:a3ea811f80f2 785
Helmut64 0:a3ea811f80f2 786 /*******************************************************************************
Helmut64 0:a3ea811f80f2 787 * Function Name: usb0_function_start_receive_dma_d0
Helmut64 0:a3ea811f80f2 788 * Description : Reads data from the buffer allocated in the pipe specified in the argument.
Helmut64 0:a3ea811f80f2 789 * : Reads data by DMA transfer using D0FIFO.
Helmut64 0:a3ea811f80f2 790 * : This function does not read data from the buffer.
Helmut64 0:a3ea811f80f2 791 * : When storing data in the buffer allocated in the pipe specified
Helmut64 0:a3ea811f80f2 792 * : in the argument, delivered read request to DMAC to read data from
Helmut64 0:a3ea811f80f2 793 * : the buffer by DMAC.
Helmut64 0:a3ea811f80f2 794 * Arguments : uint16_t pipe ; Pipe Number
Helmut64 0:a3ea811f80f2 795 * : uint32_t size ; Data Size
Helmut64 0:a3ea811f80f2 796 * : uint8_t *data ; Data Address
Helmut64 0:a3ea811f80f2 797 * Return Value : none
Helmut64 0:a3ea811f80f2 798 *******************************************************************************/
Helmut64 0:a3ea811f80f2 799 static void usb0_function_start_receive_dma_d0 (uint16_t pipe, uint32_t size, uint8_t * data)
Helmut64 0:a3ea811f80f2 800 {
Helmut64 0:a3ea811f80f2 801 uint16_t mbw;
Helmut64 0:a3ea811f80f2 802
Helmut64 0:a3ea811f80f2 803 usb0_function_set_pid_nak(pipe);
Helmut64 0:a3ea811f80f2 804 g_usb0_function_data_count[pipe] = size;
Helmut64 0:a3ea811f80f2 805 g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
Helmut64 0:a3ea811f80f2 806 g_usb0_function_PipeIgnore[pipe] = 0;
Helmut64 0:a3ea811f80f2 807
Helmut64 0:a3ea811f80f2 808 g_usb0_function_PipeDataSize[pipe] = 0;
Helmut64 0:a3ea811f80f2 809 g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_WAIT;
Helmut64 0:a3ea811f80f2 810
Helmut64 0:a3ea811f80f2 811 mbw = usb0_function_get_mbw(size, (uint32_t)data);
Helmut64 0:a3ea811f80f2 812 usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
Helmut64 0:a3ea811f80f2 813
Helmut64 0:a3ea811f80f2 814 usb0_function_set_transaction_counter(pipe, size);
Helmut64 0:a3ea811f80f2 815
Helmut64 0:a3ea811f80f2 816 usb0_function_aclrm(pipe);
Helmut64 0:a3ea811f80f2 817
Helmut64 0:a3ea811f80f2 818 if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
Helmut64 0:a3ea811f80f2 819 {
Helmut64 0:a3ea811f80f2 820 usb0_function_read_dma(pipe);
Helmut64 0:a3ea811f80f2 821
Helmut64 0:a3ea811f80f2 822 usb0_function_enable_nrdy_int(pipe);
Helmut64 0:a3ea811f80f2 823 usb0_function_enable_brdy_int(pipe);
Helmut64 0:a3ea811f80f2 824 }
Helmut64 0:a3ea811f80f2 825 else
Helmut64 0:a3ea811f80f2 826 {
Helmut64 0:a3ea811f80f2 827 usb0_function_enable_nrdy_int(pipe);
Helmut64 0:a3ea811f80f2 828 usb0_function_enable_brdy_int(pipe);
Helmut64 0:a3ea811f80f2 829 }
Helmut64 0:a3ea811f80f2 830
Helmut64 0:a3ea811f80f2 831 usb0_function_set_pid_buf(pipe);
Helmut64 0:a3ea811f80f2 832 }
Helmut64 0:a3ea811f80f2 833
Helmut64 0:a3ea811f80f2 834 /*******************************************************************************
Helmut64 0:a3ea811f80f2 835 * Function Name: usb0_function_start_receive_dma_d1
Helmut64 0:a3ea811f80f2 836 * Description : Read data from the buffer allocated in the pipe specified in the argument.
Helmut64 0:a3ea811f80f2 837 * : Reads data by DMA transfer using D0FIFO.
Helmut64 0:a3ea811f80f2 838 * : This function does not read data from the buffer.
Helmut64 0:a3ea811f80f2 839 * : When storing data in the buffer allocated in the pipe specified
Helmut64 0:a3ea811f80f2 840 * : in the argument, delivered read request to DMAC to read data from
Helmut64 0:a3ea811f80f2 841 * : the buffer by DMAC.
Helmut64 0:a3ea811f80f2 842 * Arguments : uint16_t pipe ; Pipe Number
Helmut64 0:a3ea811f80f2 843 * : uint32_t size ; Data Size
Helmut64 0:a3ea811f80f2 844 * : uint8_t *data ; Data Address
Helmut64 0:a3ea811f80f2 845 * Return Value : none
Helmut64 0:a3ea811f80f2 846 *******************************************************************************/
Helmut64 0:a3ea811f80f2 847 static void usb0_function_start_receive_dma_d1 (uint16_t pipe, uint32_t size, uint8_t * data)
Helmut64 0:a3ea811f80f2 848 {
Helmut64 0:a3ea811f80f2 849 uint16_t mbw;
Helmut64 0:a3ea811f80f2 850
Helmut64 0:a3ea811f80f2 851 usb0_function_set_pid_nak(pipe);
Helmut64 0:a3ea811f80f2 852 g_usb0_function_data_count[pipe] = size;
Helmut64 0:a3ea811f80f2 853 g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
Helmut64 0:a3ea811f80f2 854 g_usb0_function_PipeIgnore[pipe] = 0;
Helmut64 0:a3ea811f80f2 855
Helmut64 0:a3ea811f80f2 856 g_usb0_function_PipeDataSize[pipe] = 0;
Helmut64 0:a3ea811f80f2 857 g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_WAIT;
Helmut64 0:a3ea811f80f2 858
Helmut64 0:a3ea811f80f2 859 mbw = usb0_function_get_mbw(size, (uint32_t)data);
Helmut64 0:a3ea811f80f2 860 usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
Helmut64 0:a3ea811f80f2 861
Helmut64 0:a3ea811f80f2 862 usb0_function_set_transaction_counter(pipe, size);
Helmut64 0:a3ea811f80f2 863
Helmut64 0:a3ea811f80f2 864 usb0_function_aclrm(pipe);
Helmut64 0:a3ea811f80f2 865
Helmut64 0:a3ea811f80f2 866 if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
Helmut64 0:a3ea811f80f2 867 {
Helmut64 0:a3ea811f80f2 868 usb0_function_read_dma(pipe);
Helmut64 0:a3ea811f80f2 869
Helmut64 0:a3ea811f80f2 870 usb0_function_enable_nrdy_int(pipe);
Helmut64 0:a3ea811f80f2 871 usb0_function_enable_brdy_int(pipe);
Helmut64 0:a3ea811f80f2 872 }
Helmut64 0:a3ea811f80f2 873 else
Helmut64 0:a3ea811f80f2 874 {
Helmut64 0:a3ea811f80f2 875 usb0_function_enable_nrdy_int(pipe);
Helmut64 0:a3ea811f80f2 876 usb0_function_enable_brdy_int(pipe);
Helmut64 0:a3ea811f80f2 877 }
Helmut64 0:a3ea811f80f2 878
Helmut64 0:a3ea811f80f2 879 usb0_function_set_pid_buf(pipe);
Helmut64 0:a3ea811f80f2 880 }
Helmut64 0:a3ea811f80f2 881
Helmut64 0:a3ea811f80f2 882 /*******************************************************************************
Helmut64 0:a3ea811f80f2 883 * Function Name: usb0_function_read_buffer
Helmut64 0:a3ea811f80f2 884 * Description : Reads data from the buffer allocated in the pipe specified
Helmut64 0:a3ea811f80f2 885 * : in the argument.
Helmut64 0:a3ea811f80f2 886 * : Uses FIF0 set in the pipe definition table.
Helmut64 0:a3ea811f80f2 887 * Arguments : uint16_t pipe ; Pipe Number
Helmut64 0:a3ea811f80f2 888 * Return Value : USB_FUNCTION_READEND ; Read end
Helmut64 0:a3ea811f80f2 889 * : USB_FUNCTION_READSHRT ; short data
Helmut64 0:a3ea811f80f2 890 * : USB_FUNCTION_READING ; Continue of data read
Helmut64 0:a3ea811f80f2 891 * : USB_FUNCTION_READOVER ; buffer over
Helmut64 0:a3ea811f80f2 892 * : DEVDRV_USBF_FIFOERROR ; FIFO status
Helmut64 0:a3ea811f80f2 893 *******************************************************************************/
Helmut64 0:a3ea811f80f2 894 uint16_t usb0_function_read_buffer (uint16_t pipe)
Helmut64 0:a3ea811f80f2 895 {
Helmut64 0:a3ea811f80f2 896 uint16_t status;
Helmut64 0:a3ea811f80f2 897
Helmut64 0:a3ea811f80f2 898 g_usb0_function_PipeIgnore[pipe] = 0;
Helmut64 0:a3ea811f80f2 899
Helmut64 0:a3ea811f80f2 900 if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_USE)
Helmut64 0:a3ea811f80f2 901 {
Helmut64 0:a3ea811f80f2 902 status = usb0_function_read_buffer_d0(pipe);
Helmut64 0:a3ea811f80f2 903 }
Helmut64 0:a3ea811f80f2 904 else if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_USE)
Helmut64 0:a3ea811f80f2 905 {
Helmut64 0:a3ea811f80f2 906 status = usb0_function_read_buffer_d1(pipe);
Helmut64 0:a3ea811f80f2 907 }
Helmut64 0:a3ea811f80f2 908 else
Helmut64 0:a3ea811f80f2 909 {
Helmut64 0:a3ea811f80f2 910 status = usb0_function_read_buffer_c(pipe);
Helmut64 0:a3ea811f80f2 911 }
Helmut64 0:a3ea811f80f2 912
Helmut64 0:a3ea811f80f2 913 switch (status)
Helmut64 0:a3ea811f80f2 914 {
Helmut64 0:a3ea811f80f2 915 case USB_FUNCTION_READING: /* Continue of data read */
Helmut64 0:a3ea811f80f2 916 break;
Helmut64 0:a3ea811f80f2 917
Helmut64 0:a3ea811f80f2 918 case USB_FUNCTION_READEND: /* End of data read */
Helmut64 0:a3ea811f80f2 919 case USB_FUNCTION_READSHRT: /* End of data read */
Helmut64 0:a3ea811f80f2 920 usb0_function_disable_brdy_int(pipe);
Helmut64 0:a3ea811f80f2 921 g_usb0_function_PipeDataSize[pipe] -= g_usb0_function_data_count[pipe];
Helmut64 0:a3ea811f80f2 922 g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
Helmut64 0:a3ea811f80f2 923 break;
Helmut64 0:a3ea811f80f2 924
Helmut64 0:a3ea811f80f2 925 case USB_FUNCTION_READOVER: /* buffer over */
Helmut64 0:a3ea811f80f2 926 if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_USE)
Helmut64 0:a3ea811f80f2 927 {
Helmut64 0:a3ea811f80f2 928 USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR; /* Clear BCLR */
Helmut64 0:a3ea811f80f2 929 }
Helmut64 0:a3ea811f80f2 930 else if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_USE)
Helmut64 0:a3ea811f80f2 931 {
Helmut64 0:a3ea811f80f2 932 USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR; /* Clear BCLR */
Helmut64 0:a3ea811f80f2 933 }
Helmut64 0:a3ea811f80f2 934 else
Helmut64 0:a3ea811f80f2 935 {
Helmut64 0:a3ea811f80f2 936 USB200.CFIFOCTR = USB_FUNCTION_BITBCLR; /* Clear BCLR */
Helmut64 0:a3ea811f80f2 937 }
Helmut64 0:a3ea811f80f2 938 usb0_function_disable_brdy_int(pipe); /* Disable Ready Interrupt */
Helmut64 0:a3ea811f80f2 939 g_usb0_function_PipeDataSize[pipe] -= g_usb0_function_data_count[pipe];
Helmut64 0:a3ea811f80f2 940 g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
Helmut64 0:a3ea811f80f2 941 break;
Helmut64 0:a3ea811f80f2 942
Helmut64 0:a3ea811f80f2 943 case DEVDRV_USBF_FIFOERROR: /* FIFO access status */
Helmut64 0:a3ea811f80f2 944 default:
Helmut64 0:a3ea811f80f2 945 usb0_function_disable_brdy_int(pipe); /* Disable Ready Interrupt */
Helmut64 0:a3ea811f80f2 946 g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
Helmut64 0:a3ea811f80f2 947 break;
Helmut64 0:a3ea811f80f2 948 }
Helmut64 0:a3ea811f80f2 949
Helmut64 0:a3ea811f80f2 950 return status; /* End or Err or Continue */
Helmut64 0:a3ea811f80f2 951 }
Helmut64 0:a3ea811f80f2 952
Helmut64 0:a3ea811f80f2 953 /*******************************************************************************
Helmut64 0:a3ea811f80f2 954 * Function Name: usb0_function_read_buffer_c
Helmut64 0:a3ea811f80f2 955 * Description : Reads data from the buffer allocated in the pipe specified in the argument.
Helmut64 0:a3ea811f80f2 956 * : Reads data by CPU transfer using CFIFO.
Helmut64 0:a3ea811f80f2 957 * Arguments : uint16_t pipe ; Pipe Number
Helmut64 0:a3ea811f80f2 958 * Return Value : USB_FUNCTION_READEND ; Read end
Helmut64 0:a3ea811f80f2 959 * : USB_FUNCTION_READSHRT ; short data
Helmut64 0:a3ea811f80f2 960 * : USB_FUNCTION_READING ; Continue of data read
Helmut64 0:a3ea811f80f2 961 * : USB_FUNCTION_READOVER ; buffer over
Helmut64 0:a3ea811f80f2 962 * : DEVDRV_USBF_FIFOERROR ; FIFO status
Helmut64 0:a3ea811f80f2 963 *******************************************************************************/
Helmut64 0:a3ea811f80f2 964 uint16_t usb0_function_read_buffer_c (uint16_t pipe)
Helmut64 0:a3ea811f80f2 965 {
Helmut64 0:a3ea811f80f2 966 uint32_t count;
Helmut64 0:a3ea811f80f2 967 uint32_t dtln;
Helmut64 0:a3ea811f80f2 968 uint16_t buffer;
Helmut64 0:a3ea811f80f2 969 uint16_t mxps;
Helmut64 0:a3ea811f80f2 970 uint16_t status;
Helmut64 0:a3ea811f80f2 971 uint16_t mbw;
Helmut64 0:a3ea811f80f2 972
Helmut64 0:a3ea811f80f2 973 mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
Helmut64 0:a3ea811f80f2 974 buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_CUSE, DEVDRV_USBF_NO, mbw);
Helmut64 0:a3ea811f80f2 975
Helmut64 0:a3ea811f80f2 976 if (buffer == DEVDRV_USBF_FIFOERROR) /* FIFO access status */
Helmut64 0:a3ea811f80f2 977 {
Helmut64 0:a3ea811f80f2 978 return DEVDRV_USBF_FIFOERROR;
Helmut64 0:a3ea811f80f2 979 }
Helmut64 0:a3ea811f80f2 980
Helmut64 0:a3ea811f80f2 981 dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
Helmut64 0:a3ea811f80f2 982 mxps = usb0_function_get_mxps(pipe); /* Max Packet Size */
Helmut64 0:a3ea811f80f2 983
Helmut64 0:a3ea811f80f2 984 if (g_usb0_function_data_count[pipe] < dtln) /* Buffer Over ? */
Helmut64 0:a3ea811f80f2 985 {
Helmut64 0:a3ea811f80f2 986 status = USB_FUNCTION_READOVER;
Helmut64 0:a3ea811f80f2 987 usb0_function_set_pid_nak(pipe); /* Set NAK */
Helmut64 0:a3ea811f80f2 988 count = g_usb0_function_data_count[pipe];
Helmut64 0:a3ea811f80f2 989 }
Helmut64 0:a3ea811f80f2 990 else if (g_usb0_function_data_count[pipe] == dtln) /* just Receive Size */
Helmut64 0:a3ea811f80f2 991 {
Helmut64 0:a3ea811f80f2 992 status = USB_FUNCTION_READEND;
Helmut64 0:a3ea811f80f2 993 usb0_function_set_pid_nak(pipe); /* Set NAK */
Helmut64 0:a3ea811f80f2 994 count = dtln;
Helmut64 0:a3ea811f80f2 995
Helmut64 0:a3ea811f80f2 996 if (count == 0)
Helmut64 0:a3ea811f80f2 997 {
Helmut64 0:a3ea811f80f2 998 status = USB_FUNCTION_READSHRT; /* Null Packet receive */
Helmut64 0:a3ea811f80f2 999 }
Helmut64 0:a3ea811f80f2 1000
Helmut64 0:a3ea811f80f2 1001 if ((count % mxps) != 0)
Helmut64 0:a3ea811f80f2 1002 {
Helmut64 0:a3ea811f80f2 1003 status = USB_FUNCTION_READSHRT; /* Short Packet receive */
Helmut64 0:a3ea811f80f2 1004 }
Helmut64 0:a3ea811f80f2 1005 }
Helmut64 0:a3ea811f80f2 1006 else /* continue Receive data */
Helmut64 0:a3ea811f80f2 1007 {
Helmut64 0:a3ea811f80f2 1008 status = USB_FUNCTION_READING;
Helmut64 0:a3ea811f80f2 1009 count = dtln;
Helmut64 0:a3ea811f80f2 1010
Helmut64 0:a3ea811f80f2 1011 if (count == 0)
Helmut64 0:a3ea811f80f2 1012 {
Helmut64 0:a3ea811f80f2 1013 status = USB_FUNCTION_READSHRT; /* Null Packet receive */
Helmut64 0:a3ea811f80f2 1014 usb0_function_set_pid_nak(pipe); /* Set NAK */
Helmut64 0:a3ea811f80f2 1015 }
Helmut64 0:a3ea811f80f2 1016
Helmut64 0:a3ea811f80f2 1017 if ((count % mxps) != 0)
Helmut64 0:a3ea811f80f2 1018 {
Helmut64 0:a3ea811f80f2 1019 status = USB_FUNCTION_READSHRT; /* Short Packet receive */
Helmut64 0:a3ea811f80f2 1020 usb0_function_set_pid_nak(pipe); /* Set NAK */
Helmut64 0:a3ea811f80f2 1021 }
Helmut64 0:a3ea811f80f2 1022 }
Helmut64 0:a3ea811f80f2 1023
Helmut64 0:a3ea811f80f2 1024 if (count == 0) /* 0 length packet */
Helmut64 0:a3ea811f80f2 1025 {
Helmut64 0:a3ea811f80f2 1026 USB200.CFIFOCTR = USB_FUNCTION_BITBCLR; /* Clear BCLR */
Helmut64 0:a3ea811f80f2 1027 }
Helmut64 0:a3ea811f80f2 1028 else
Helmut64 0:a3ea811f80f2 1029 {
Helmut64 0:a3ea811f80f2 1030 usb0_function_read_c_fifo(pipe, (uint16_t)count);
Helmut64 0:a3ea811f80f2 1031 }
Helmut64 0:a3ea811f80f2 1032
Helmut64 0:a3ea811f80f2 1033 g_usb0_function_data_count[pipe] -= count;
Helmut64 0:a3ea811f80f2 1034
Helmut64 0:a3ea811f80f2 1035 return status; /* End or Err or Continue */
Helmut64 0:a3ea811f80f2 1036 }
Helmut64 0:a3ea811f80f2 1037
Helmut64 0:a3ea811f80f2 1038 /*******************************************************************************
Helmut64 0:a3ea811f80f2 1039 * Function Name: usb0_function_read_buffer_d0
Helmut64 0:a3ea811f80f2 1040 * Description : Reads data from the buffer allocated in the pipe specified in
Helmut64 0:a3ea811f80f2 1041 * : the argument.
Helmut64 0:a3ea811f80f2 1042 * : Reads data by CPU transfer using D0FIFO.
Helmut64 0:a3ea811f80f2 1043 * Arguments : uint16_t pipe ; Pipe Number
Helmut64 0:a3ea811f80f2 1044 * Return Value : USB_FUNCTION_READEND ; Read end
Helmut64 0:a3ea811f80f2 1045 * : USB_FUNCTION_READSHRT ; short data
Helmut64 0:a3ea811f80f2 1046 * : USB_FUNCTION_READING ; Continue of data read
Helmut64 0:a3ea811f80f2 1047 * : USB_FUNCTION_READOVER ; buffer over
Helmut64 0:a3ea811f80f2 1048 * : DEVDRV_USBF_FIFOERROR ; FIFO status
Helmut64 0:a3ea811f80f2 1049 *******************************************************************************/
Helmut64 0:a3ea811f80f2 1050 uint16_t usb0_function_read_buffer_d0 (uint16_t pipe)
Helmut64 0:a3ea811f80f2 1051 {
Helmut64 0:a3ea811f80f2 1052 uint32_t count;
Helmut64 0:a3ea811f80f2 1053 uint32_t dtln;
Helmut64 0:a3ea811f80f2 1054 uint16_t buffer;
Helmut64 0:a3ea811f80f2 1055 uint16_t mxps;
Helmut64 0:a3ea811f80f2 1056 uint16_t status;
Helmut64 0:a3ea811f80f2 1057 uint16_t mbw;
Helmut64 0:a3ea811f80f2 1058 uint16_t pipebuf_size;
Helmut64 0:a3ea811f80f2 1059
Helmut64 0:a3ea811f80f2 1060 mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
Helmut64 0:a3ea811f80f2 1061 buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
Helmut64 0:a3ea811f80f2 1062
Helmut64 0:a3ea811f80f2 1063 if (buffer == DEVDRV_USBF_FIFOERROR) /* FIFO access status */
Helmut64 0:a3ea811f80f2 1064 {
Helmut64 0:a3ea811f80f2 1065 return DEVDRV_USBF_FIFOERROR;
Helmut64 0:a3ea811f80f2 1066 }
Helmut64 0:a3ea811f80f2 1067
Helmut64 0:a3ea811f80f2 1068 dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
Helmut64 0:a3ea811f80f2 1069 mxps = usb0_function_get_mxps(pipe); /* Max Packet Size */
Helmut64 0:a3ea811f80f2 1070
Helmut64 0:a3ea811f80f2 1071 if (g_usb0_function_data_count[pipe] < dtln) /* Buffer Over ? */
Helmut64 0:a3ea811f80f2 1072 {
Helmut64 0:a3ea811f80f2 1073 status = USB_FUNCTION_READOVER;
Helmut64 0:a3ea811f80f2 1074 usb0_function_set_pid_nak(pipe); /* Set NAK */
Helmut64 0:a3ea811f80f2 1075 count = g_usb0_function_data_count[pipe];
Helmut64 0:a3ea811f80f2 1076 }
Helmut64 0:a3ea811f80f2 1077 else if (g_usb0_function_data_count[pipe] == dtln) /* just Receive Size */
Helmut64 0:a3ea811f80f2 1078 {
Helmut64 0:a3ea811f80f2 1079 status = USB_FUNCTION_READEND;
Helmut64 0:a3ea811f80f2 1080 usb0_function_set_pid_nak(pipe); /* Set NAK */
Helmut64 0:a3ea811f80f2 1081 count = dtln;
Helmut64 0:a3ea811f80f2 1082
Helmut64 0:a3ea811f80f2 1083 if (count == 0)
Helmut64 0:a3ea811f80f2 1084 {
Helmut64 0:a3ea811f80f2 1085 status = USB_FUNCTION_READSHRT; /* Null Packet receive */
Helmut64 0:a3ea811f80f2 1086 }
Helmut64 0:a3ea811f80f2 1087
Helmut64 0:a3ea811f80f2 1088 if ((count % mxps) != 0)
Helmut64 0:a3ea811f80f2 1089 {
Helmut64 0:a3ea811f80f2 1090 status = USB_FUNCTION_READSHRT; /* Short Packet receive */
Helmut64 0:a3ea811f80f2 1091 }
Helmut64 0:a3ea811f80f2 1092 }
Helmut64 0:a3ea811f80f2 1093 else /* continue Receive data */
Helmut64 0:a3ea811f80f2 1094 {
Helmut64 0:a3ea811f80f2 1095 status = USB_FUNCTION_READING;
Helmut64 0:a3ea811f80f2 1096 count = dtln;
Helmut64 0:a3ea811f80f2 1097
Helmut64 0:a3ea811f80f2 1098 if (count == 0)
Helmut64 0:a3ea811f80f2 1099 {
Helmut64 0:a3ea811f80f2 1100 status = USB_FUNCTION_READSHRT; /* Null Packet receive */
Helmut64 0:a3ea811f80f2 1101 usb0_function_set_pid_nak(pipe); /* Set NAK */
Helmut64 0:a3ea811f80f2 1102 }
Helmut64 0:a3ea811f80f2 1103
Helmut64 0:a3ea811f80f2 1104 if ((count % mxps) != 0)
Helmut64 0:a3ea811f80f2 1105 {
Helmut64 0:a3ea811f80f2 1106 status = USB_FUNCTION_READSHRT; /* Short Packet receive */
Helmut64 0:a3ea811f80f2 1107 usb0_function_set_pid_nak(pipe); /* Set NAK */
Helmut64 0:a3ea811f80f2 1108 }
Helmut64 0:a3ea811f80f2 1109 else
Helmut64 0:a3ea811f80f2 1110 {
Helmut64 0:a3ea811f80f2 1111 pipebuf_size = usb0_function_get_buf_size(pipe); /* Data buffer size */
Helmut64 0:a3ea811f80f2 1112
Helmut64 0:a3ea811f80f2 1113 if (count != pipebuf_size)
Helmut64 0:a3ea811f80f2 1114 {
Helmut64 0:a3ea811f80f2 1115 status = USB_FUNCTION_READSHRT; /* Short Packet receive */
Helmut64 0:a3ea811f80f2 1116 usb0_function_set_pid_nak(pipe); /* Set NAK */
Helmut64 0:a3ea811f80f2 1117 }
Helmut64 0:a3ea811f80f2 1118 }
Helmut64 0:a3ea811f80f2 1119 }
Helmut64 0:a3ea811f80f2 1120
Helmut64 0:a3ea811f80f2 1121 if (count == 0) /* 0 length packet */
Helmut64 0:a3ea811f80f2 1122 {
Helmut64 0:a3ea811f80f2 1123 USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR; /* Clear BCLR */
Helmut64 0:a3ea811f80f2 1124 }
Helmut64 0:a3ea811f80f2 1125 else
Helmut64 0:a3ea811f80f2 1126 {
Helmut64 0:a3ea811f80f2 1127 usb0_function_read_d0_fifo(pipe, (uint16_t)count);
Helmut64 0:a3ea811f80f2 1128 }
Helmut64 0:a3ea811f80f2 1129
Helmut64 0:a3ea811f80f2 1130 g_usb0_function_data_count[pipe] -= count;
Helmut64 0:a3ea811f80f2 1131
Helmut64 0:a3ea811f80f2 1132 return status; /* End or Err or Continue */
Helmut64 0:a3ea811f80f2 1133 }
Helmut64 0:a3ea811f80f2 1134
Helmut64 0:a3ea811f80f2 1135 /*******************************************************************************
Helmut64 0:a3ea811f80f2 1136 * Function Name: usb0_function_read_buffer_d1
Helmut64 0:a3ea811f80f2 1137 * Description : Reads data from the buffer allocated in the pipe specified
Helmut64 0:a3ea811f80f2 1138 * : in the argument.
Helmut64 0:a3ea811f80f2 1139 * : Reads data by CPU transfer using D1FIFO.
Helmut64 0:a3ea811f80f2 1140 * Arguments : uint16_t pipe ; Pipe Number
Helmut64 0:a3ea811f80f2 1141 * Return Value : USB_FUNCTION_READEND ; Read end
Helmut64 0:a3ea811f80f2 1142 * : USB_FUNCTION_READSHRT ; short data
Helmut64 0:a3ea811f80f2 1143 * : USB_FUNCTION_READING ; Continue of data read
Helmut64 0:a3ea811f80f2 1144 * : USB_FUNCTION_READOVER ; buffer over
Helmut64 0:a3ea811f80f2 1145 * : DEVDRV_USBF_FIFOERROR ; FIFO status
Helmut64 0:a3ea811f80f2 1146 *******************************************************************************/
Helmut64 0:a3ea811f80f2 1147 uint16_t usb0_function_read_buffer_d1 (uint16_t pipe)
Helmut64 0:a3ea811f80f2 1148 {
Helmut64 0:a3ea811f80f2 1149 uint32_t count;
Helmut64 0:a3ea811f80f2 1150 uint32_t dtln;
Helmut64 0:a3ea811f80f2 1151 uint16_t buffer;
Helmut64 0:a3ea811f80f2 1152 uint16_t mxps;
Helmut64 0:a3ea811f80f2 1153 uint16_t status;
Helmut64 0:a3ea811f80f2 1154 uint16_t mbw;
Helmut64 0:a3ea811f80f2 1155 uint16_t pipebuf_size;
Helmut64 0:a3ea811f80f2 1156
Helmut64 0:a3ea811f80f2 1157 mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
Helmut64 0:a3ea811f80f2 1158 buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
Helmut64 0:a3ea811f80f2 1159
Helmut64 0:a3ea811f80f2 1160 if (buffer == DEVDRV_USBF_FIFOERROR) /* FIFO access status */
Helmut64 0:a3ea811f80f2 1161 {
Helmut64 0:a3ea811f80f2 1162 return DEVDRV_USBF_FIFOERROR;
Helmut64 0:a3ea811f80f2 1163 }
Helmut64 0:a3ea811f80f2 1164
Helmut64 0:a3ea811f80f2 1165 dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
Helmut64 0:a3ea811f80f2 1166 mxps = usb0_function_get_mxps(pipe); /* Max Packet Size */
Helmut64 0:a3ea811f80f2 1167
Helmut64 0:a3ea811f80f2 1168 if (g_usb0_function_data_count[pipe] < dtln) /* Buffer Over ? */
Helmut64 0:a3ea811f80f2 1169 {
Helmut64 0:a3ea811f80f2 1170 status = USB_FUNCTION_READOVER;
Helmut64 0:a3ea811f80f2 1171 usb0_function_set_pid_nak(pipe); /* Set NAK */
Helmut64 0:a3ea811f80f2 1172 count = g_usb0_function_data_count[pipe];
Helmut64 0:a3ea811f80f2 1173 }
Helmut64 0:a3ea811f80f2 1174 else if (g_usb0_function_data_count[pipe] == dtln) /* just Receive Size */
Helmut64 0:a3ea811f80f2 1175 {
Helmut64 0:a3ea811f80f2 1176 status = USB_FUNCTION_READEND;
Helmut64 0:a3ea811f80f2 1177 usb0_function_set_pid_nak(pipe); /* Set NAK */
Helmut64 0:a3ea811f80f2 1178 count = dtln;
Helmut64 0:a3ea811f80f2 1179 if (count == 0)
Helmut64 0:a3ea811f80f2 1180 {
Helmut64 0:a3ea811f80f2 1181 status = USB_FUNCTION_READSHRT; /* Null Packet receive */
Helmut64 0:a3ea811f80f2 1182 }
Helmut64 0:a3ea811f80f2 1183
Helmut64 0:a3ea811f80f2 1184 if ((count % mxps) != 0)
Helmut64 0:a3ea811f80f2 1185 {
Helmut64 0:a3ea811f80f2 1186 status = USB_FUNCTION_READSHRT; /* Short Packet receive */
Helmut64 0:a3ea811f80f2 1187 }
Helmut64 0:a3ea811f80f2 1188 }
Helmut64 0:a3ea811f80f2 1189 else /* continue Receive data */
Helmut64 0:a3ea811f80f2 1190 {
Helmut64 0:a3ea811f80f2 1191 status = USB_FUNCTION_READING;
Helmut64 0:a3ea811f80f2 1192 count = dtln;
Helmut64 0:a3ea811f80f2 1193 if (count == 0)
Helmut64 0:a3ea811f80f2 1194 {
Helmut64 0:a3ea811f80f2 1195 status = USB_FUNCTION_READSHRT; /* Null Packet receive */
Helmut64 0:a3ea811f80f2 1196 usb0_function_set_pid_nak(pipe); /* Set NAK */
Helmut64 0:a3ea811f80f2 1197 }
Helmut64 0:a3ea811f80f2 1198
Helmut64 0:a3ea811f80f2 1199 if ((count % mxps) != 0)
Helmut64 0:a3ea811f80f2 1200 {
Helmut64 0:a3ea811f80f2 1201 status = USB_FUNCTION_READSHRT; /* Short Packet receive */
Helmut64 0:a3ea811f80f2 1202 usb0_function_set_pid_nak(pipe); /* Set NAK */
Helmut64 0:a3ea811f80f2 1203 }
Helmut64 0:a3ea811f80f2 1204 else
Helmut64 0:a3ea811f80f2 1205 {
Helmut64 0:a3ea811f80f2 1206 pipebuf_size = usb0_function_get_buf_size(pipe); /* Data buffer size */
Helmut64 0:a3ea811f80f2 1207
Helmut64 0:a3ea811f80f2 1208 if (count != pipebuf_size)
Helmut64 0:a3ea811f80f2 1209 {
Helmut64 0:a3ea811f80f2 1210 status = USB_FUNCTION_READSHRT; /* Short Packet receive */
Helmut64 0:a3ea811f80f2 1211 usb0_function_set_pid_nak(pipe); /* Set NAK */
Helmut64 0:a3ea811f80f2 1212 }
Helmut64 0:a3ea811f80f2 1213 }
Helmut64 0:a3ea811f80f2 1214 }
Helmut64 0:a3ea811f80f2 1215
Helmut64 0:a3ea811f80f2 1216 if (count == 0) /* 0 length packet */
Helmut64 0:a3ea811f80f2 1217 {
Helmut64 0:a3ea811f80f2 1218 USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR; /* Clear BCLR */
Helmut64 0:a3ea811f80f2 1219 }
Helmut64 0:a3ea811f80f2 1220 else
Helmut64 0:a3ea811f80f2 1221 {
Helmut64 0:a3ea811f80f2 1222 usb0_function_read_d1_fifo(pipe, (uint16_t)count);
Helmut64 0:a3ea811f80f2 1223 }
Helmut64 0:a3ea811f80f2 1224
Helmut64 0:a3ea811f80f2 1225 g_usb0_function_data_count[pipe] -= count;
Helmut64 0:a3ea811f80f2 1226
Helmut64 0:a3ea811f80f2 1227 return status; /* End or Err or Continue */
Helmut64 0:a3ea811f80f2 1228 }
Helmut64 0:a3ea811f80f2 1229
Helmut64 0:a3ea811f80f2 1230 /*******************************************************************************
Helmut64 0:a3ea811f80f2 1231 * Function Name: usb0_function_read_dma
Helmut64 0:a3ea811f80f2 1232 * Description : Reads data from the buffer allocated in the pipe specified
Helmut64 0:a3ea811f80f2 1233 * : in the argument.
Helmut64 0:a3ea811f80f2 1234 * : Reads data by DMA transfer using D0FIFO or D1FIFO.
Helmut64 0:a3ea811f80f2 1235 * Arguments : uint16_t pipe ; Pipe Number
Helmut64 0:a3ea811f80f2 1236 * Return Value : USB_FUNCTION_READEND ; Read end
Helmut64 0:a3ea811f80f2 1237 * : USB_FUNCTION_READSHRT ; short data
Helmut64 0:a3ea811f80f2 1238 * : USB_FUNCTION_READING ; Continue of data read
Helmut64 0:a3ea811f80f2 1239 * : USB_FUNCTION_READOVER ; buffer over
Helmut64 0:a3ea811f80f2 1240 * : DEVDRV_USBF_FIFOERROR ; FIFO status
Helmut64 0:a3ea811f80f2 1241 *******************************************************************************/
Helmut64 0:a3ea811f80f2 1242 uint16_t usb0_function_read_dma (uint16_t pipe)
Helmut64 0:a3ea811f80f2 1243 {
Helmut64 0:a3ea811f80f2 1244 uint16_t status;
Helmut64 0:a3ea811f80f2 1245
Helmut64 0:a3ea811f80f2 1246 g_usb0_function_PipeIgnore[pipe] = 0;
Helmut64 0:a3ea811f80f2 1247 if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_DMA)
Helmut64 0:a3ea811f80f2 1248 {
Helmut64 0:a3ea811f80f2 1249 status = usb0_function_read_dma_d0(pipe);
Helmut64 0:a3ea811f80f2 1250 }
Helmut64 0:a3ea811f80f2 1251 else
Helmut64 0:a3ea811f80f2 1252 {
Helmut64 0:a3ea811f80f2 1253 status = usb0_function_read_dma_d1(pipe);
Helmut64 0:a3ea811f80f2 1254 }
Helmut64 0:a3ea811f80f2 1255
Helmut64 0:a3ea811f80f2 1256 switch (status)
Helmut64 0:a3ea811f80f2 1257 {
Helmut64 0:a3ea811f80f2 1258 case USB_FUNCTION_READING: /* Continue of data read */
Helmut64 0:a3ea811f80f2 1259 break;
Helmut64 0:a3ea811f80f2 1260
Helmut64 0:a3ea811f80f2 1261 case USB_FUNCTION_READZERO: /* End of data read */
Helmut64 0:a3ea811f80f2 1262 usb0_function_disable_brdy_int(pipe);
Helmut64 0:a3ea811f80f2 1263 g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
Helmut64 0:a3ea811f80f2 1264 break;
Helmut64 0:a3ea811f80f2 1265
Helmut64 0:a3ea811f80f2 1266 case USB_FUNCTION_READEND: /* End of data read */
Helmut64 0:a3ea811f80f2 1267 case USB_FUNCTION_READSHRT: /* End of data read */
Helmut64 0:a3ea811f80f2 1268 usb0_function_disable_brdy_int(pipe);
Helmut64 0:a3ea811f80f2 1269
Helmut64 0:a3ea811f80f2 1270 if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
Helmut64 0:a3ea811f80f2 1271 {
Helmut64 0:a3ea811f80f2 1272 g_usb0_function_PipeDataSize[pipe] -= g_usb0_function_data_count[pipe];
Helmut64 0:a3ea811f80f2 1273 }
Helmut64 0:a3ea811f80f2 1274 break;
Helmut64 0:a3ea811f80f2 1275
Helmut64 0:a3ea811f80f2 1276 case USB_FUNCTION_READOVER: /* buffer over */
Helmut64 0:a3ea811f80f2 1277 usb0_function_disable_brdy_int(pipe); /* Disable Ready Interrupt */
Helmut64 0:a3ea811f80f2 1278
Helmut64 0:a3ea811f80f2 1279 if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
Helmut64 0:a3ea811f80f2 1280 {
Helmut64 0:a3ea811f80f2 1281 g_usb0_function_PipeDataSize[pipe] -= g_usb0_function_data_count[pipe];
Helmut64 0:a3ea811f80f2 1282 }
Helmut64 0:a3ea811f80f2 1283 g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
Helmut64 0:a3ea811f80f2 1284 break;
Helmut64 0:a3ea811f80f2 1285
Helmut64 0:a3ea811f80f2 1286 case DEVDRV_USBF_FIFOERROR: /* FIFO access status */
Helmut64 0:a3ea811f80f2 1287 default:
Helmut64 0:a3ea811f80f2 1288 usb0_function_disable_brdy_int(pipe); /* Disable Ready Interrupt */
Helmut64 0:a3ea811f80f2 1289 g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
Helmut64 0:a3ea811f80f2 1290 break;
Helmut64 0:a3ea811f80f2 1291 }
Helmut64 0:a3ea811f80f2 1292
Helmut64 0:a3ea811f80f2 1293 return status; /* End or Err or Continue */
Helmut64 0:a3ea811f80f2 1294 }
Helmut64 0:a3ea811f80f2 1295
Helmut64 0:a3ea811f80f2 1296 /*******************************************************************************
Helmut64 0:a3ea811f80f2 1297 * Function Name: usb0_function_read_dma_d0
Helmut64 0:a3ea811f80f2 1298 * Description : Writes data in the buffer allocated in the pipe specified
Helmut64 0:a3ea811f80f2 1299 * : in the argument.
Helmut64 0:a3ea811f80f2 1300 * : Reads data by DMA transfer using D0FIFO.
Helmut64 0:a3ea811f80f2 1301 * Arguments : uint16_t pipe ; Pipe Number
Helmut64 0:a3ea811f80f2 1302 * Return Value : USB_FUNCTION_READEND ; Read end
Helmut64 0:a3ea811f80f2 1303 * : USB_FUNCTION_READSHRT ; short data
Helmut64 0:a3ea811f80f2 1304 * : USB_FUNCTION_READZERO ; zero data
Helmut64 0:a3ea811f80f2 1305 * : USB_FUNCTION_READING ; Continue of data read
Helmut64 0:a3ea811f80f2 1306 * : USB_FUNCTION_READOVER ; buffer over
Helmut64 0:a3ea811f80f2 1307 * : DEVDRV_USBF_FIFOERROR ; FIFO status
Helmut64 0:a3ea811f80f2 1308 *******************************************************************************/
Helmut64 0:a3ea811f80f2 1309 static uint16_t usb0_function_read_dma_d0 (uint16_t pipe)
Helmut64 0:a3ea811f80f2 1310 {
Helmut64 0:a3ea811f80f2 1311 uint32_t count;
Helmut64 0:a3ea811f80f2 1312 uint32_t dtln;
Helmut64 0:a3ea811f80f2 1313 uint16_t buffer;
Helmut64 0:a3ea811f80f2 1314 uint16_t mxps;
Helmut64 0:a3ea811f80f2 1315 uint16_t status;
Helmut64 0:a3ea811f80f2 1316 uint16_t mbw;
Helmut64 0:a3ea811f80f2 1317 uint16_t dfacc = 0;
Helmut64 0:a3ea811f80f2 1318 uint16_t pipebuf_size;
Helmut64 0:a3ea811f80f2 1319
Helmut64 0:a3ea811f80f2 1320 g_usb0_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_READY;
Helmut64 0:a3ea811f80f2 1321
Helmut64 0:a3ea811f80f2 1322 mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
Helmut64 0:a3ea811f80f2 1323
Helmut64 0:a3ea811f80f2 1324 if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
Helmut64 0:a3ea811f80f2 1325 {
Helmut64 0:a3ea811f80f2 1326 count = g_usb0_function_data_count[pipe];
Helmut64 0:a3ea811f80f2 1327 status = USB_FUNCTION_READING;
Helmut64 0:a3ea811f80f2 1328 }
Helmut64 0:a3ea811f80f2 1329 else
Helmut64 0:a3ea811f80f2 1330 {
Helmut64 0:a3ea811f80f2 1331 buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw);
Helmut64 0:a3ea811f80f2 1332
Helmut64 0:a3ea811f80f2 1333 if (buffer == DEVDRV_USBF_FIFOERROR) /* FIFO access status */
Helmut64 0:a3ea811f80f2 1334 {
Helmut64 0:a3ea811f80f2 1335 return DEVDRV_USBF_FIFOERROR;
Helmut64 0:a3ea811f80f2 1336 }
Helmut64 0:a3ea811f80f2 1337
Helmut64 0:a3ea811f80f2 1338 dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
Helmut64 0:a3ea811f80f2 1339 mxps = usb0_function_get_mxps(pipe); /* Max Packet Size */
Helmut64 0:a3ea811f80f2 1340
Helmut64 0:a3ea811f80f2 1341 if (g_usb0_function_data_count[pipe] < dtln) /* Buffer Over ? */
Helmut64 0:a3ea811f80f2 1342 {
Helmut64 0:a3ea811f80f2 1343 status = USB_FUNCTION_READOVER;
Helmut64 0:a3ea811f80f2 1344 count = g_usb0_function_data_count[pipe];
Helmut64 0:a3ea811f80f2 1345 }
Helmut64 0:a3ea811f80f2 1346 else if (g_usb0_function_data_count[pipe] == dtln) /* just Receive Size */
Helmut64 0:a3ea811f80f2 1347 {
Helmut64 0:a3ea811f80f2 1348 status = USB_FUNCTION_READEND;
Helmut64 0:a3ea811f80f2 1349 count = dtln;
Helmut64 0:a3ea811f80f2 1350 if (count == 0)
Helmut64 0:a3ea811f80f2 1351 {
Helmut64 0:a3ea811f80f2 1352 status = USB_FUNCTION_READSHRT; /* Null Packet receive */
Helmut64 0:a3ea811f80f2 1353 }
Helmut64 0:a3ea811f80f2 1354
Helmut64 0:a3ea811f80f2 1355 if ((count % mxps) != 0)
Helmut64 0:a3ea811f80f2 1356 {
Helmut64 0:a3ea811f80f2 1357 status = USB_FUNCTION_READSHRT; /* Short Packet receive */
Helmut64 0:a3ea811f80f2 1358 }
Helmut64 0:a3ea811f80f2 1359 }
Helmut64 0:a3ea811f80f2 1360 else /* continue Receive data */
Helmut64 0:a3ea811f80f2 1361 {
Helmut64 0:a3ea811f80f2 1362 status = USB_FUNCTION_READING;
Helmut64 0:a3ea811f80f2 1363 count = dtln;
Helmut64 0:a3ea811f80f2 1364
Helmut64 0:a3ea811f80f2 1365 if (count == 0)
Helmut64 0:a3ea811f80f2 1366 {
Helmut64 0:a3ea811f80f2 1367 status = USB_FUNCTION_READSHRT; /* Null Packet receive */
Helmut64 0:a3ea811f80f2 1368 }
Helmut64 0:a3ea811f80f2 1369
Helmut64 0:a3ea811f80f2 1370 if ((count % mxps) != 0)
Helmut64 0:a3ea811f80f2 1371 {
Helmut64 0:a3ea811f80f2 1372 status = USB_FUNCTION_READSHRT; /* Short Packet receive */
Helmut64 0:a3ea811f80f2 1373 }
Helmut64 0:a3ea811f80f2 1374 else
Helmut64 0:a3ea811f80f2 1375 {
Helmut64 0:a3ea811f80f2 1376 pipebuf_size = usb0_function_get_buf_size(pipe); /* Data buffer size */
Helmut64 0:a3ea811f80f2 1377 if (count != pipebuf_size)
Helmut64 0:a3ea811f80f2 1378 {
Helmut64 0:a3ea811f80f2 1379 status = USB_FUNCTION_READSHRT; /* Short Packet receive */
Helmut64 0:a3ea811f80f2 1380 }
Helmut64 0:a3ea811f80f2 1381 }
Helmut64 0:a3ea811f80f2 1382 }
Helmut64 0:a3ea811f80f2 1383 }
Helmut64 0:a3ea811f80f2 1384
Helmut64 0:a3ea811f80f2 1385 if (count == 0) /* 0 length packet */
Helmut64 0:a3ea811f80f2 1386 {
Helmut64 0:a3ea811f80f2 1387 if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
Helmut64 0:a3ea811f80f2 1388 {
Helmut64 0:a3ea811f80f2 1389 USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR; /* Clear BCLR */
Helmut64 0:a3ea811f80f2 1390 status = USB_FUNCTION_READZERO; /* Null Packet receive */
Helmut64 0:a3ea811f80f2 1391 }
Helmut64 0:a3ea811f80f2 1392 else
Helmut64 0:a3ea811f80f2 1393 {
Helmut64 0:a3ea811f80f2 1394 usb0_function_set_curpipe(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw);
Helmut64 0:a3ea811f80f2 1395 /* transaction counter No set */
Helmut64 0:a3ea811f80f2 1396 /* FRDY = 1, DTLN = 0 -> BRDY */
Helmut64 0:a3ea811f80f2 1397 }
Helmut64 0:a3ea811f80f2 1398 }
Helmut64 0:a3ea811f80f2 1399 else
Helmut64 0:a3ea811f80f2 1400 {
Helmut64 0:a3ea811f80f2 1401 dfacc = usb0_function_set_dfacc_d0(mbw, count);
Helmut64 0:a3ea811f80f2 1402
Helmut64 0:a3ea811f80f2 1403 if (mbw == USB_FUNCTION_BITMBW_32)
Helmut64 0:a3ea811f80f2 1404 {
Helmut64 0:a3ea811f80f2 1405 g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 2; /* 32bit transfer */
Helmut64 0:a3ea811f80f2 1406 }
Helmut64 0:a3ea811f80f2 1407 else if (mbw == USB_FUNCTION_BITMBW_16)
Helmut64 0:a3ea811f80f2 1408 {
Helmut64 0:a3ea811f80f2 1409 g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 1; /* 16bit transfer */
Helmut64 0:a3ea811f80f2 1410 }
Helmut64 0:a3ea811f80f2 1411 else
Helmut64 0:a3ea811f80f2 1412 {
Helmut64 0:a3ea811f80f2 1413 g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 0; /* 8bit transfer */
Helmut64 0:a3ea811f80f2 1414 }
Helmut64 0:a3ea811f80f2 1415
Helmut64 0:a3ea811f80f2 1416 g_usb0_function_DmaPipe[USB_FUNCTION_D0FIFO] = pipe; /* not use in read operation */
Helmut64 0:a3ea811f80f2 1417 g_usb0_function_DmaBval[USB_FUNCTION_D0FIFO] = 0; /* not use in read operation */
Helmut64 0:a3ea811f80f2 1418
Helmut64 0:a3ea811f80f2 1419 g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].fifo = USB_FUNCTION_D0FIFO_DMA;
Helmut64 0:a3ea811f80f2 1420 g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].dir = USB_FUNCTION_FIFO2BUF;
Helmut64 0:a3ea811f80f2 1421 g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].buffer = (uint32_t)g_usb0_function_data_pointer[pipe];
Helmut64 0:a3ea811f80f2 1422 g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].bytes = count;
Helmut64 0:a3ea811f80f2 1423
Helmut64 0:a3ea811f80f2 1424 if (status == USB_FUNCTION_READING)
Helmut64 0:a3ea811f80f2 1425 {
Helmut64 0:a3ea811f80f2 1426 g_usb0_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_BUSY;
Helmut64 0:a3ea811f80f2 1427 }
Helmut64 0:a3ea811f80f2 1428 else
Helmut64 0:a3ea811f80f2 1429 {
Helmut64 0:a3ea811f80f2 1430 g_usb0_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_BUSYEND;
Helmut64 0:a3ea811f80f2 1431 }
Helmut64 0:a3ea811f80f2 1432
Helmut64 0:a3ea811f80f2 1433 Userdef_USB_usb0_function_start_dma(&g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO], dfacc);
Helmut64 0:a3ea811f80f2 1434
Helmut64 0:a3ea811f80f2 1435 usb0_function_set_curpipe2(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw, dfacc);
Helmut64 0:a3ea811f80f2 1436
Helmut64 0:a3ea811f80f2 1437 RZA_IO_RegWrite_16(&USB200.D0FIFOSEL,
Helmut64 0:a3ea811f80f2 1438 1,
Helmut64 0:a3ea811f80f2 1439 USB_DnFIFOSEL_DREQE_SHIFT,
Helmut64 0:a3ea811f80f2 1440 USB_DnFIFOSEL_DREQE);
Helmut64 0:a3ea811f80f2 1441 }
Helmut64 0:a3ea811f80f2 1442
Helmut64 0:a3ea811f80f2 1443 if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
Helmut64 0:a3ea811f80f2 1444 {
Helmut64 0:a3ea811f80f2 1445 g_usb0_function_data_count[pipe] -= count;
Helmut64 0:a3ea811f80f2 1446 g_usb0_function_data_pointer[pipe] += count;
Helmut64 0:a3ea811f80f2 1447 g_usb0_function_PipeDataSize[pipe] += count;
Helmut64 0:a3ea811f80f2 1448 }
Helmut64 0:a3ea811f80f2 1449
Helmut64 0:a3ea811f80f2 1450 return status; /* End or Err or Continue */
Helmut64 0:a3ea811f80f2 1451 }
Helmut64 0:a3ea811f80f2 1452
Helmut64 0:a3ea811f80f2 1453 /*******************************************************************************
Helmut64 0:a3ea811f80f2 1454 * Function Name: usb0_function_read_dma_d1
Helmut64 0:a3ea811f80f2 1455 * Description : Reads data from the buffer allocated in the pipe specified in
Helmut64 0:a3ea811f80f2 1456 * : the argument.
Helmut64 0:a3ea811f80f2 1457 * : Reads data by DMA transfer using D1FIFO.
Helmut64 0:a3ea811f80f2 1458 * Arguments : uint16_t pipe ; Pipe Number
Helmut64 0:a3ea811f80f2 1459 * Return Value : USB_FUNCTION_READEND ; Read end
Helmut64 0:a3ea811f80f2 1460 * : USB_FUNCTION_READSHRT ; short data
Helmut64 0:a3ea811f80f2 1461 * : USB_FUNCTION_READZERO ; zero data
Helmut64 0:a3ea811f80f2 1462 * : USB_FUNCTION_READING ; Continue of data read
Helmut64 0:a3ea811f80f2 1463 * : USB_FUNCTION_READOVER ; buffer over
Helmut64 0:a3ea811f80f2 1464 * : DEVDRV_USBF_FIFOERROR ; FIFO status
Helmut64 0:a3ea811f80f2 1465 *******************************************************************************/
Helmut64 0:a3ea811f80f2 1466 static uint16_t usb0_function_read_dma_d1 (uint16_t pipe)
Helmut64 0:a3ea811f80f2 1467 {
Helmut64 0:a3ea811f80f2 1468 uint32_t count;
Helmut64 0:a3ea811f80f2 1469 uint32_t dtln;
Helmut64 0:a3ea811f80f2 1470 uint16_t buffer;
Helmut64 0:a3ea811f80f2 1471 uint16_t mxps;
Helmut64 0:a3ea811f80f2 1472 uint16_t status;
Helmut64 0:a3ea811f80f2 1473 uint16_t mbw;
Helmut64 0:a3ea811f80f2 1474 uint16_t dfacc=0;
Helmut64 0:a3ea811f80f2 1475 uint16_t pipebuf_size;
Helmut64 0:a3ea811f80f2 1476
Helmut64 0:a3ea811f80f2 1477 g_usb0_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_READY;
Helmut64 0:a3ea811f80f2 1478
Helmut64 0:a3ea811f80f2 1479 mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
Helmut64 0:a3ea811f80f2 1480
Helmut64 0:a3ea811f80f2 1481 if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
Helmut64 0:a3ea811f80f2 1482 {
Helmut64 0:a3ea811f80f2 1483 count = g_usb0_function_data_count[pipe];
Helmut64 0:a3ea811f80f2 1484 status = USB_FUNCTION_READING;
Helmut64 0:a3ea811f80f2 1485 }
Helmut64 0:a3ea811f80f2 1486 else
Helmut64 0:a3ea811f80f2 1487 {
Helmut64 0:a3ea811f80f2 1488 buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw);
Helmut64 0:a3ea811f80f2 1489 if (buffer == DEVDRV_USBF_FIFOERROR) /* FIFO access status */
Helmut64 0:a3ea811f80f2 1490 {
Helmut64 0:a3ea811f80f2 1491 return DEVDRV_USBF_FIFOERROR;
Helmut64 0:a3ea811f80f2 1492 }
Helmut64 0:a3ea811f80f2 1493
Helmut64 0:a3ea811f80f2 1494 dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
Helmut64 0:a3ea811f80f2 1495 mxps = usb0_function_get_mxps(pipe); /* Max Packet Size */
Helmut64 0:a3ea811f80f2 1496
Helmut64 0:a3ea811f80f2 1497 if (g_usb0_function_data_count[pipe] < dtln) /* Buffer Over ? */
Helmut64 0:a3ea811f80f2 1498 {
Helmut64 0:a3ea811f80f2 1499 status = USB_FUNCTION_READOVER;
Helmut64 0:a3ea811f80f2 1500 count = g_usb0_function_data_count[pipe];
Helmut64 0:a3ea811f80f2 1501 }
Helmut64 0:a3ea811f80f2 1502 else if (g_usb0_function_data_count[pipe] == dtln) /* just Receive Size */
Helmut64 0:a3ea811f80f2 1503 {
Helmut64 0:a3ea811f80f2 1504 status = USB_FUNCTION_READEND;
Helmut64 0:a3ea811f80f2 1505 count = dtln;
Helmut64 0:a3ea811f80f2 1506 if (count == 0)
Helmut64 0:a3ea811f80f2 1507 {
Helmut64 0:a3ea811f80f2 1508 status = USB_FUNCTION_READSHRT; /* Null Packet receive */
Helmut64 0:a3ea811f80f2 1509 }
Helmut64 0:a3ea811f80f2 1510
Helmut64 0:a3ea811f80f2 1511 if ((count % mxps) != 0)
Helmut64 0:a3ea811f80f2 1512 {
Helmut64 0:a3ea811f80f2 1513 status = USB_FUNCTION_READSHRT; /* Short Packet receive */
Helmut64 0:a3ea811f80f2 1514 }
Helmut64 0:a3ea811f80f2 1515 }
Helmut64 0:a3ea811f80f2 1516 else /* continue Receive data */
Helmut64 0:a3ea811f80f2 1517 {
Helmut64 0:a3ea811f80f2 1518 status = USB_FUNCTION_READING;
Helmut64 0:a3ea811f80f2 1519 count = dtln;
Helmut64 0:a3ea811f80f2 1520 if (count == 0)
Helmut64 0:a3ea811f80f2 1521 {
Helmut64 0:a3ea811f80f2 1522 status = USB_FUNCTION_READSHRT; /* Null Packet receive */
Helmut64 0:a3ea811f80f2 1523 }
Helmut64 0:a3ea811f80f2 1524
Helmut64 0:a3ea811f80f2 1525 if ((count % mxps) != 0)
Helmut64 0:a3ea811f80f2 1526 {
Helmut64 0:a3ea811f80f2 1527 status = USB_FUNCTION_READSHRT; /* Short Packet receive */
Helmut64 0:a3ea811f80f2 1528 }
Helmut64 0:a3ea811f80f2 1529 else
Helmut64 0:a3ea811f80f2 1530 {
Helmut64 0:a3ea811f80f2 1531 pipebuf_size = usb0_function_get_buf_size(pipe); /* Data buffer size */
Helmut64 0:a3ea811f80f2 1532 if (count != pipebuf_size)
Helmut64 0:a3ea811f80f2 1533 {
Helmut64 0:a3ea811f80f2 1534 status = USB_FUNCTION_READSHRT; /* Short Packet receive */
Helmut64 0:a3ea811f80f2 1535 }
Helmut64 0:a3ea811f80f2 1536 }
Helmut64 0:a3ea811f80f2 1537 }
Helmut64 0:a3ea811f80f2 1538 }
Helmut64 0:a3ea811f80f2 1539
Helmut64 0:a3ea811f80f2 1540 if (count == 0) /* 0 length packet */
Helmut64 0:a3ea811f80f2 1541 {
Helmut64 0:a3ea811f80f2 1542 if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
Helmut64 0:a3ea811f80f2 1543 {
Helmut64 0:a3ea811f80f2 1544 USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR; /* Clear BCLR */
Helmut64 0:a3ea811f80f2 1545 status = USB_FUNCTION_READZERO; /* Null Packet receive */
Helmut64 0:a3ea811f80f2 1546 }
Helmut64 0:a3ea811f80f2 1547 else
Helmut64 0:a3ea811f80f2 1548 {
Helmut64 0:a3ea811f80f2 1549 usb0_function_set_curpipe(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw);
Helmut64 0:a3ea811f80f2 1550 /* transaction counter No set */
Helmut64 0:a3ea811f80f2 1551 /* FRDY = 1, DTLN = 0 -> BRDY */
Helmut64 0:a3ea811f80f2 1552 }
Helmut64 0:a3ea811f80f2 1553 }
Helmut64 0:a3ea811f80f2 1554 else
Helmut64 0:a3ea811f80f2 1555 {
Helmut64 0:a3ea811f80f2 1556 dfacc = usb0_function_set_dfacc_d1(mbw, count);
Helmut64 0:a3ea811f80f2 1557
Helmut64 0:a3ea811f80f2 1558 if (mbw == USB_FUNCTION_BITMBW_32)
Helmut64 0:a3ea811f80f2 1559 {
Helmut64 0:a3ea811f80f2 1560 g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 2; /* 32bit transfer */
Helmut64 0:a3ea811f80f2 1561 }
Helmut64 0:a3ea811f80f2 1562 else if (mbw == USB_FUNCTION_BITMBW_16)
Helmut64 0:a3ea811f80f2 1563 {
Helmut64 0:a3ea811f80f2 1564 g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 1; /* 16bit transfer */
Helmut64 0:a3ea811f80f2 1565 }
Helmut64 0:a3ea811f80f2 1566 else
Helmut64 0:a3ea811f80f2 1567 {
Helmut64 0:a3ea811f80f2 1568 g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 0; /* 8bit transfer */
Helmut64 0:a3ea811f80f2 1569 }
Helmut64 0:a3ea811f80f2 1570
Helmut64 0:a3ea811f80f2 1571 g_usb0_function_DmaPipe[USB_FUNCTION_D1FIFO] = pipe; /* not use in read operation */
Helmut64 0:a3ea811f80f2 1572 g_usb0_function_DmaBval[USB_FUNCTION_D1FIFO] = 0; /* not use in read operation */
Helmut64 0:a3ea811f80f2 1573
Helmut64 0:a3ea811f80f2 1574 g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].fifo = USB_FUNCTION_D1FIFO_DMA;
Helmut64 0:a3ea811f80f2 1575 g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].dir = USB_FUNCTION_FIFO2BUF;
Helmut64 0:a3ea811f80f2 1576 g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].buffer = (uint32_t)g_usb0_function_data_pointer[pipe];
Helmut64 0:a3ea811f80f2 1577 g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].bytes = count;
Helmut64 0:a3ea811f80f2 1578
Helmut64 0:a3ea811f80f2 1579 if (status == USB_FUNCTION_READING)
Helmut64 0:a3ea811f80f2 1580 {
Helmut64 0:a3ea811f80f2 1581 g_usb0_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_BUSY;
Helmut64 0:a3ea811f80f2 1582 }
Helmut64 0:a3ea811f80f2 1583 else
Helmut64 0:a3ea811f80f2 1584 {
Helmut64 0:a3ea811f80f2 1585 g_usb0_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_BUSYEND;
Helmut64 0:a3ea811f80f2 1586 }
Helmut64 0:a3ea811f80f2 1587
Helmut64 0:a3ea811f80f2 1588 Userdef_USB_usb0_function_start_dma(&g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO], dfacc);
Helmut64 0:a3ea811f80f2 1589
Helmut64 0:a3ea811f80f2 1590 usb0_function_set_curpipe2(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw, dfacc);
Helmut64 0:a3ea811f80f2 1591
Helmut64 0:a3ea811f80f2 1592 RZA_IO_RegWrite_16(&USB200.D1FIFOSEL,
Helmut64 0:a3ea811f80f2 1593 1,
Helmut64 0:a3ea811f80f2 1594 USB_DnFIFOSEL_DREQE_SHIFT,
Helmut64 0:a3ea811f80f2 1595 USB_DnFIFOSEL_DREQE);
Helmut64 0:a3ea811f80f2 1596 }
Helmut64 0:a3ea811f80f2 1597
Helmut64 0:a3ea811f80f2 1598 if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
Helmut64 0:a3ea811f80f2 1599 {
Helmut64 0:a3ea811f80f2 1600 g_usb0_function_data_count[pipe] -= count;
Helmut64 0:a3ea811f80f2 1601 g_usb0_function_data_pointer[pipe] += count;
Helmut64 0:a3ea811f80f2 1602 g_usb0_function_PipeDataSize[pipe] += count;
Helmut64 0:a3ea811f80f2 1603 }
Helmut64 0:a3ea811f80f2 1604
Helmut64 0:a3ea811f80f2 1605 return status; /* End or Err or Continue */
Helmut64 0:a3ea811f80f2 1606 }
Helmut64 0:a3ea811f80f2 1607
Helmut64 0:a3ea811f80f2 1608 /*******************************************************************************
Helmut64 0:a3ea811f80f2 1609 * Function Name: usb0_function_change_fifo_port
Helmut64 0:a3ea811f80f2 1610 * Description : Allocates FIF0 specified by the argument in the pipe assigned
Helmut64 0:a3ea811f80f2 1611 * : by the argument. After allocating FIF0, waits in the software
Helmut64 0:a3ea811f80f2 1612 * : till the corresponding pipe becomes ready.
Helmut64 0:a3ea811f80f2 1613 * Arguments : uint16_t pipe ; Pipe Number
Helmut64 0:a3ea811f80f2 1614 * : uint16_t fifosel ; Select FIFO
Helmut64 0:a3ea811f80f2 1615 * : uint16_t isel ; FIFO Access Direction
Helmut64 0:a3ea811f80f2 1616 * : uint16_t mbw ; FIFO Port Access Bit Width
Helmut64 0:a3ea811f80f2 1617 * Return Value : DEVDRV_USBF_FIFOERROR ; Error
Helmut64 0:a3ea811f80f2 1618 * : Others ; CFIFOCTR/D0FIFOCTR/D1FIFOCTR Register Value
Helmut64 0:a3ea811f80f2 1619 *******************************************************************************/
Helmut64 0:a3ea811f80f2 1620 uint16_t usb0_function_change_fifo_port (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw)
Helmut64 0:a3ea811f80f2 1621 {
Helmut64 0:a3ea811f80f2 1622 uint16_t buffer;
Helmut64 0:a3ea811f80f2 1623 uint32_t loop;
Helmut64 0:a3ea811f80f2 1624 volatile uint32_t loop2;
Helmut64 0:a3ea811f80f2 1625
Helmut64 0:a3ea811f80f2 1626 usb0_function_set_curpipe(pipe, fifosel, isel, mbw);
Helmut64 0:a3ea811f80f2 1627
Helmut64 0:a3ea811f80f2 1628 for (loop = 0; loop < 4; loop++)
Helmut64 0:a3ea811f80f2 1629 {
Helmut64 0:a3ea811f80f2 1630 switch (fifosel)
Helmut64 0:a3ea811f80f2 1631 {
Helmut64 0:a3ea811f80f2 1632 case USB_FUNCTION_CUSE:
Helmut64 0:a3ea811f80f2 1633 buffer = USB200.CFIFOCTR;
Helmut64 0:a3ea811f80f2 1634 break;
Helmut64 0:a3ea811f80f2 1635
Helmut64 0:a3ea811f80f2 1636 case USB_FUNCTION_D0USE:
Helmut64 0:a3ea811f80f2 1637 case USB_FUNCTION_D0DMA:
Helmut64 0:a3ea811f80f2 1638 buffer = USB200.D0FIFOCTR;
Helmut64 0:a3ea811f80f2 1639 break;
Helmut64 0:a3ea811f80f2 1640
Helmut64 0:a3ea811f80f2 1641 case USB_FUNCTION_D1USE:
Helmut64 0:a3ea811f80f2 1642 case USB_FUNCTION_D1DMA:
Helmut64 0:a3ea811f80f2 1643 buffer = USB200.D1FIFOCTR;
Helmut64 0:a3ea811f80f2 1644 break;
Helmut64 0:a3ea811f80f2 1645
Helmut64 0:a3ea811f80f2 1646 default:
Helmut64 0:a3ea811f80f2 1647 buffer = 0;
Helmut64 0:a3ea811f80f2 1648 break;
Helmut64 0:a3ea811f80f2 1649 }
Helmut64 0:a3ea811f80f2 1650
Helmut64 0:a3ea811f80f2 1651 if ((buffer & USB_FUNCTION_BITFRDY) == USB_FUNCTION_BITFRDY)
Helmut64 0:a3ea811f80f2 1652 {
Helmut64 0:a3ea811f80f2 1653 return buffer;
Helmut64 0:a3ea811f80f2 1654 }
Helmut64 0:a3ea811f80f2 1655
Helmut64 0:a3ea811f80f2 1656 loop2 = 25;
Helmut64 0:a3ea811f80f2 1657 while (loop2-- > 0)
Helmut64 0:a3ea811f80f2 1658 {
Helmut64 0:a3ea811f80f2 1659 /* wait */
Helmut64 0:a3ea811f80f2 1660 }
Helmut64 0:a3ea811f80f2 1661 }
Helmut64 0:a3ea811f80f2 1662
Helmut64 0:a3ea811f80f2 1663 return DEVDRV_USBF_FIFOERROR;
Helmut64 0:a3ea811f80f2 1664 }
Helmut64 0:a3ea811f80f2 1665
Helmut64 0:a3ea811f80f2 1666 /*******************************************************************************
Helmut64 0:a3ea811f80f2 1667 * Function Name: usb0_function_set_curpipe
Helmut64 0:a3ea811f80f2 1668 * Description : Allocates FIF0 specified by the argument in the pipe assigned
Helmut64 0:a3ea811f80f2 1669 * : by the argument.
Helmut64 0:a3ea811f80f2 1670 * Arguments : uint16_t pipe ; Pipe Number
Helmut64 0:a3ea811f80f2 1671 * : uint16_t fifosel ; Select FIFO
Helmut64 0:a3ea811f80f2 1672 * : uint16_t isel ; FIFO Access Direction
Helmut64 0:a3ea811f80f2 1673 * : uint16_t mbw ; FIFO Port Access Bit Width
Helmut64 0:a3ea811f80f2 1674 * Return Value : none
Helmut64 0:a3ea811f80f2 1675 *******************************************************************************/
Helmut64 0:a3ea811f80f2 1676 void usb0_function_set_curpipe (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw)
Helmut64 0:a3ea811f80f2 1677 {
Helmut64 0:a3ea811f80f2 1678 uint16_t buffer;
Helmut64 0:a3ea811f80f2 1679 uint32_t loop;
Helmut64 0:a3ea811f80f2 1680 volatile uint32_t loop2;
Helmut64 0:a3ea811f80f2 1681
Helmut64 0:a3ea811f80f2 1682 g_usb0_function_mbw[pipe] = mbw;
Helmut64 0:a3ea811f80f2 1683
Helmut64 0:a3ea811f80f2 1684 switch (fifosel)
Helmut64 0:a3ea811f80f2 1685 {
Helmut64 0:a3ea811f80f2 1686 case USB_FUNCTION_CUSE:
Helmut64 0:a3ea811f80f2 1687 buffer = USB200.CFIFOSEL;
Helmut64 0:a3ea811f80f2 1688 buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE);
Helmut64 0:a3ea811f80f2 1689 buffer |= (uint16_t)(~isel & USB_FUNCTION_BITISEL);
Helmut64 0:a3ea811f80f2 1690 USB200.CFIFOSEL = buffer;
Helmut64 0:a3ea811f80f2 1691
Helmut64 0:a3ea811f80f2 1692 for (loop = 0; loop < 4; loop++)
Helmut64 0:a3ea811f80f2 1693 {
Helmut64 0:a3ea811f80f2 1694 if ((USB200.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
Helmut64 0:a3ea811f80f2 1695 (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
Helmut64 0:a3ea811f80f2 1696 {
Helmut64 0:a3ea811f80f2 1697 break;
Helmut64 0:a3ea811f80f2 1698 }
Helmut64 0:a3ea811f80f2 1699
Helmut64 0:a3ea811f80f2 1700 loop2 = 100;
Helmut64 0:a3ea811f80f2 1701
Helmut64 0:a3ea811f80f2 1702 while (loop2-- > 0)
Helmut64 0:a3ea811f80f2 1703 {
Helmut64 0:a3ea811f80f2 1704 /* wait */
Helmut64 0:a3ea811f80f2 1705 }
Helmut64 0:a3ea811f80f2 1706 }
Helmut64 0:a3ea811f80f2 1707 buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
Helmut64 0:a3ea811f80f2 1708 buffer |= (uint16_t)(isel | pipe | mbw);
Helmut64 0:a3ea811f80f2 1709 USB200.CFIFOSEL = buffer;
Helmut64 0:a3ea811f80f2 1710
Helmut64 0:a3ea811f80f2 1711 for (loop = 0; loop < 4; loop++)
Helmut64 0:a3ea811f80f2 1712 {
Helmut64 0:a3ea811f80f2 1713 if ((USB200.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
Helmut64 0:a3ea811f80f2 1714 (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
Helmut64 0:a3ea811f80f2 1715 {
Helmut64 0:a3ea811f80f2 1716 break;
Helmut64 0:a3ea811f80f2 1717 }
Helmut64 0:a3ea811f80f2 1718
Helmut64 0:a3ea811f80f2 1719 loop2 = 100;
Helmut64 0:a3ea811f80f2 1720
Helmut64 0:a3ea811f80f2 1721 while (loop2-- > 0)
Helmut64 0:a3ea811f80f2 1722 {
Helmut64 0:a3ea811f80f2 1723 /* wait */
Helmut64 0:a3ea811f80f2 1724 }
Helmut64 0:a3ea811f80f2 1725 }
Helmut64 0:a3ea811f80f2 1726 break;
Helmut64 0:a3ea811f80f2 1727
Helmut64 0:a3ea811f80f2 1728 case USB_FUNCTION_D0DMA:
Helmut64 0:a3ea811f80f2 1729 case USB_FUNCTION_D0USE:
Helmut64 0:a3ea811f80f2 1730 buffer = USB200.D0FIFOSEL;
Helmut64 0:a3ea811f80f2 1731 buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
Helmut64 0:a3ea811f80f2 1732 USB200.D0FIFOSEL = buffer;
Helmut64 0:a3ea811f80f2 1733
Helmut64 0:a3ea811f80f2 1734 for (loop = 0; loop < 4; loop++)
Helmut64 0:a3ea811f80f2 1735 {
Helmut64 0:a3ea811f80f2 1736 if ((USB200.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
Helmut64 0:a3ea811f80f2 1737 (buffer & USB_FUNCTION_BITCURPIPE))
Helmut64 0:a3ea811f80f2 1738 {
Helmut64 0:a3ea811f80f2 1739 break;
Helmut64 0:a3ea811f80f2 1740 }
Helmut64 0:a3ea811f80f2 1741
Helmut64 0:a3ea811f80f2 1742 loop2 = 100;
Helmut64 0:a3ea811f80f2 1743
Helmut64 0:a3ea811f80f2 1744 while (loop2-- > 0)
Helmut64 0:a3ea811f80f2 1745 {
Helmut64 0:a3ea811f80f2 1746 /* wait */
Helmut64 0:a3ea811f80f2 1747 }
Helmut64 0:a3ea811f80f2 1748 }
Helmut64 0:a3ea811f80f2 1749 buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
Helmut64 0:a3ea811f80f2 1750 buffer |= (uint16_t)(pipe | mbw);
Helmut64 0:a3ea811f80f2 1751 USB200.D0FIFOSEL = buffer;
Helmut64 0:a3ea811f80f2 1752
Helmut64 0:a3ea811f80f2 1753 for (loop = 0; loop < 4; loop++)
Helmut64 0:a3ea811f80f2 1754 {
Helmut64 0:a3ea811f80f2 1755 if ((USB200.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
Helmut64 0:a3ea811f80f2 1756 (buffer & USB_FUNCTION_BITCURPIPE))
Helmut64 0:a3ea811f80f2 1757 {
Helmut64 0:a3ea811f80f2 1758 break;
Helmut64 0:a3ea811f80f2 1759 }
Helmut64 0:a3ea811f80f2 1760
Helmut64 0:a3ea811f80f2 1761 loop2 = 100;
Helmut64 0:a3ea811f80f2 1762 while (loop2-- > 0)
Helmut64 0:a3ea811f80f2 1763 {
Helmut64 0:a3ea811f80f2 1764 /* wait */
Helmut64 0:a3ea811f80f2 1765 }
Helmut64 0:a3ea811f80f2 1766 }
Helmut64 0:a3ea811f80f2 1767 break;
Helmut64 0:a3ea811f80f2 1768
Helmut64 0:a3ea811f80f2 1769 case USB_FUNCTION_D1DMA:
Helmut64 0:a3ea811f80f2 1770 case USB_FUNCTION_D1USE:
Helmut64 0:a3ea811f80f2 1771 buffer = USB200.D1FIFOSEL;
Helmut64 0:a3ea811f80f2 1772 buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
Helmut64 0:a3ea811f80f2 1773 USB200.D1FIFOSEL = buffer;
Helmut64 0:a3ea811f80f2 1774
Helmut64 0:a3ea811f80f2 1775 for (loop = 0; loop < 4; loop++)
Helmut64 0:a3ea811f80f2 1776 {
Helmut64 0:a3ea811f80f2 1777 if ((USB200.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
Helmut64 0:a3ea811f80f2 1778 (buffer & USB_FUNCTION_BITCURPIPE))
Helmut64 0:a3ea811f80f2 1779 {
Helmut64 0:a3ea811f80f2 1780 break;
Helmut64 0:a3ea811f80f2 1781 }
Helmut64 0:a3ea811f80f2 1782
Helmut64 0:a3ea811f80f2 1783 loop2 = 100;
Helmut64 0:a3ea811f80f2 1784
Helmut64 0:a3ea811f80f2 1785 while (loop2-- > 0)
Helmut64 0:a3ea811f80f2 1786 {
Helmut64 0:a3ea811f80f2 1787 /* wait */
Helmut64 0:a3ea811f80f2 1788 }
Helmut64 0:a3ea811f80f2 1789 }
Helmut64 0:a3ea811f80f2 1790 buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
Helmut64 0:a3ea811f80f2 1791 buffer |= (uint16_t)(pipe | mbw);
Helmut64 0:a3ea811f80f2 1792 USB200.D1FIFOSEL = buffer;
Helmut64 0:a3ea811f80f2 1793
Helmut64 0:a3ea811f80f2 1794 for (loop = 0; loop < 4; loop++)
Helmut64 0:a3ea811f80f2 1795 {
Helmut64 0:a3ea811f80f2 1796 if ((USB200.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
Helmut64 0:a3ea811f80f2 1797 (buffer & USB_FUNCTION_BITCURPIPE))
Helmut64 0:a3ea811f80f2 1798 {
Helmut64 0:a3ea811f80f2 1799 break;
Helmut64 0:a3ea811f80f2 1800 }
Helmut64 0:a3ea811f80f2 1801
Helmut64 0:a3ea811f80f2 1802 loop2 = 100;
Helmut64 0:a3ea811f80f2 1803
Helmut64 0:a3ea811f80f2 1804 while (loop2-- > 0)
Helmut64 0:a3ea811f80f2 1805 {
Helmut64 0:a3ea811f80f2 1806 /* wait */
Helmut64 0:a3ea811f80f2 1807 }
Helmut64 0:a3ea811f80f2 1808 }
Helmut64 0:a3ea811f80f2 1809 break;
Helmut64 0:a3ea811f80f2 1810
Helmut64 0:a3ea811f80f2 1811 default:
Helmut64 0:a3ea811f80f2 1812 break;
Helmut64 0:a3ea811f80f2 1813 }
Helmut64 0:a3ea811f80f2 1814
Helmut64 0:a3ea811f80f2 1815 /* Cautions !!!
Helmut64 0:a3ea811f80f2 1816 * Depending on the external bus speed of CPU, you may need to wait for 450ns here.
Helmut64 0:a3ea811f80f2 1817 * For details, please look at the data sheet. */
Helmut64 0:a3ea811f80f2 1818 loop2 = 100;
Helmut64 0:a3ea811f80f2 1819
Helmut64 0:a3ea811f80f2 1820 while (loop2-- > 0)
Helmut64 0:a3ea811f80f2 1821 {
Helmut64 0:a3ea811f80f2 1822 /* wait */
Helmut64 0:a3ea811f80f2 1823 }
Helmut64 0:a3ea811f80f2 1824 }
Helmut64 0:a3ea811f80f2 1825
Helmut64 0:a3ea811f80f2 1826 /*******************************************************************************
Helmut64 0:a3ea811f80f2 1827 * Function Name: usb0_function_set_curpipe2
Helmut64 0:a3ea811f80f2 1828 * Description : Allocates FIF0 specified by the argument in the pipe assigned
Helmut64 0:a3ea811f80f2 1829 * : by the argument.
Helmut64 0:a3ea811f80f2 1830 * Arguments : uint16_t pipe ; Pipe Number
Helmut64 0:a3ea811f80f2 1831 * : uint16_t fifosel ; Select FIFO
Helmut64 0:a3ea811f80f2 1832 * : uint16_t isel ; FIFO Access Direction
Helmut64 0:a3ea811f80f2 1833 * : uint16_t mbw ; FIFO Port Access Bit Width
Helmut64 0:a3ea811f80f2 1834 * : uint16_t dfacc ; DFACC Access mode
Helmut64 0:a3ea811f80f2 1835 * Return Value : none
Helmut64 0:a3ea811f80f2 1836 *******************************************************************************/
Helmut64 0:a3ea811f80f2 1837 void usb0_function_set_curpipe2 (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw, uint16_t dfacc)
Helmut64 0:a3ea811f80f2 1838 {
Helmut64 0:a3ea811f80f2 1839 uint16_t buffer;
Helmut64 0:a3ea811f80f2 1840 uint32_t loop;
Helmut64 0:a3ea811f80f2 1841 #ifdef __USB_FUNCTION_DF_ACC_ENABLE__
Helmut64 0:a3ea811f80f2 1842 uint32_t dummy;
Helmut64 0:a3ea811f80f2 1843 #endif
Helmut64 0:a3ea811f80f2 1844 volatile uint32_t loop2;
Helmut64 0:a3ea811f80f2 1845
Helmut64 0:a3ea811f80f2 1846 g_usb0_function_mbw[pipe] = mbw;
Helmut64 0:a3ea811f80f2 1847
Helmut64 0:a3ea811f80f2 1848 switch (fifosel)
Helmut64 0:a3ea811f80f2 1849 {
Helmut64 0:a3ea811f80f2 1850 case USB_FUNCTION_CUSE:
Helmut64 0:a3ea811f80f2 1851 buffer = USB200.CFIFOSEL;
Helmut64 0:a3ea811f80f2 1852 buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE);
Helmut64 0:a3ea811f80f2 1853 buffer |= (uint16_t)(~isel & USB_FUNCTION_BITISEL);
Helmut64 0:a3ea811f80f2 1854 USB200.CFIFOSEL = buffer;
Helmut64 0:a3ea811f80f2 1855
Helmut64 0:a3ea811f80f2 1856 for (loop = 0; loop < 4; loop++)
Helmut64 0:a3ea811f80f2 1857 {
Helmut64 0:a3ea811f80f2 1858 if ((USB200.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
Helmut64 0:a3ea811f80f2 1859 (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
Helmut64 0:a3ea811f80f2 1860 {
Helmut64 0:a3ea811f80f2 1861 break;
Helmut64 0:a3ea811f80f2 1862 }
Helmut64 0:a3ea811f80f2 1863
Helmut64 0:a3ea811f80f2 1864 loop2 = 100;
Helmut64 0:a3ea811f80f2 1865 while (loop2-- > 0)
Helmut64 0:a3ea811f80f2 1866 {
Helmut64 0:a3ea811f80f2 1867 /* wait */
Helmut64 0:a3ea811f80f2 1868 }
Helmut64 0:a3ea811f80f2 1869 }
Helmut64 0:a3ea811f80f2 1870 buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
Helmut64 0:a3ea811f80f2 1871 buffer |= (uint16_t)(isel | pipe | mbw);
Helmut64 0:a3ea811f80f2 1872 USB200.CFIFOSEL = buffer;
Helmut64 0:a3ea811f80f2 1873
Helmut64 0:a3ea811f80f2 1874 for (loop = 0; loop < 4; loop++)
Helmut64 0:a3ea811f80f2 1875 {
Helmut64 0:a3ea811f80f2 1876 if ((USB200.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
Helmut64 0:a3ea811f80f2 1877 (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
Helmut64 0:a3ea811f80f2 1878 {
Helmut64 0:a3ea811f80f2 1879 break;
Helmut64 0:a3ea811f80f2 1880 }
Helmut64 0:a3ea811f80f2 1881
Helmut64 0:a3ea811f80f2 1882 loop2 = 100;
Helmut64 0:a3ea811f80f2 1883
Helmut64 0:a3ea811f80f2 1884 while (loop2-- > 0)
Helmut64 0:a3ea811f80f2 1885 {
Helmut64 0:a3ea811f80f2 1886 /* wait */
Helmut64 0:a3ea811f80f2 1887 }
Helmut64 0:a3ea811f80f2 1888 }
Helmut64 0:a3ea811f80f2 1889 break;
Helmut64 0:a3ea811f80f2 1890
Helmut64 0:a3ea811f80f2 1891 case USB_FUNCTION_D0DMA:
Helmut64 0:a3ea811f80f2 1892 case USB_FUNCTION_D0USE:
Helmut64 0:a3ea811f80f2 1893 buffer = USB200.D0FIFOSEL;
Helmut64 0:a3ea811f80f2 1894 #ifdef __USB_FUNCTION_DF_ACC_ENABLE__
Helmut64 0:a3ea811f80f2 1895 buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
Helmut64 0:a3ea811f80f2 1896
Helmut64 0:a3ea811f80f2 1897 if (dfacc != 0)
Helmut64 0:a3ea811f80f2 1898 {
Helmut64 0:a3ea811f80f2 1899 buffer |= (uint16_t)(USB_FUNCTION_BITMBW_32);
Helmut64 0:a3ea811f80f2 1900 }
Helmut64 0:a3ea811f80f2 1901 #else
Helmut64 0:a3ea811f80f2 1902 buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
Helmut64 0:a3ea811f80f2 1903 #endif
Helmut64 0:a3ea811f80f2 1904 USB200.D0FIFOSEL = buffer;
Helmut64 0:a3ea811f80f2 1905
Helmut64 0:a3ea811f80f2 1906 for (loop = 0; loop < 4; loop++)
Helmut64 0:a3ea811f80f2 1907 {
Helmut64 0:a3ea811f80f2 1908 if ((USB200.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
Helmut64 0:a3ea811f80f2 1909 {
Helmut64 0:a3ea811f80f2 1910 break;
Helmut64 0:a3ea811f80f2 1911 }
Helmut64 0:a3ea811f80f2 1912
Helmut64 0:a3ea811f80f2 1913 loop2 = 100;
Helmut64 0:a3ea811f80f2 1914
Helmut64 0:a3ea811f80f2 1915 while (loop2-- > 0)
Helmut64 0:a3ea811f80f2 1916 {
Helmut64 0:a3ea811f80f2 1917 /* wait */
Helmut64 0:a3ea811f80f2 1918 }
Helmut64 0:a3ea811f80f2 1919 }
Helmut64 0:a3ea811f80f2 1920
Helmut64 0:a3ea811f80f2 1921 #ifdef __USB_FUNCTION_DF_ACC_ENABLE__
Helmut64 0:a3ea811f80f2 1922 if (dfacc != 0)
Helmut64 0:a3ea811f80f2 1923 {
Helmut64 0:a3ea811f80f2 1924 dummy = USB200.D0FIFO.UINT32;
Helmut64 0:a3ea811f80f2 1925 }
Helmut64 0:a3ea811f80f2 1926 #endif
Helmut64 0:a3ea811f80f2 1927 buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
Helmut64 0:a3ea811f80f2 1928 buffer |= (uint16_t)(pipe | mbw);
Helmut64 0:a3ea811f80f2 1929 USB200.D0FIFOSEL = buffer;
Helmut64 0:a3ea811f80f2 1930
Helmut64 0:a3ea811f80f2 1931 for (loop = 0; loop < 4; loop++)
Helmut64 0:a3ea811f80f2 1932 {
Helmut64 0:a3ea811f80f2 1933 if ((USB200.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
Helmut64 0:a3ea811f80f2 1934 {
Helmut64 0:a3ea811f80f2 1935 break;
Helmut64 0:a3ea811f80f2 1936 }
Helmut64 0:a3ea811f80f2 1937
Helmut64 0:a3ea811f80f2 1938 loop2 = 100;
Helmut64 0:a3ea811f80f2 1939
Helmut64 0:a3ea811f80f2 1940 while (loop2-- > 0)
Helmut64 0:a3ea811f80f2 1941 {
Helmut64 0:a3ea811f80f2 1942 /* wait */
Helmut64 0:a3ea811f80f2 1943 }
Helmut64 0:a3ea811f80f2 1944 }
Helmut64 0:a3ea811f80f2 1945 break;
Helmut64 0:a3ea811f80f2 1946
Helmut64 0:a3ea811f80f2 1947 case USB_FUNCTION_D1DMA:
Helmut64 0:a3ea811f80f2 1948 case USB_FUNCTION_D1USE:
Helmut64 0:a3ea811f80f2 1949 buffer = USB200.D1FIFOSEL;
Helmut64 0:a3ea811f80f2 1950 #ifdef __USB_FUNCTION_DF_ACC_ENABLE__
Helmut64 0:a3ea811f80f2 1951 buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
Helmut64 0:a3ea811f80f2 1952
Helmut64 0:a3ea811f80f2 1953 if (dfacc != 0)
Helmut64 0:a3ea811f80f2 1954 {
Helmut64 0:a3ea811f80f2 1955 buffer |= (uint16_t)(USB_FUNCTION_BITMBW_32);
Helmut64 0:a3ea811f80f2 1956 }
Helmut64 0:a3ea811f80f2 1957 #else
Helmut64 0:a3ea811f80f2 1958 buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
Helmut64 0:a3ea811f80f2 1959 #endif
Helmut64 0:a3ea811f80f2 1960 USB200.D1FIFOSEL = buffer;
Helmut64 0:a3ea811f80f2 1961
Helmut64 0:a3ea811f80f2 1962 for (loop = 0; loop < 4; loop++)
Helmut64 0:a3ea811f80f2 1963 {
Helmut64 0:a3ea811f80f2 1964 if ((USB200.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
Helmut64 0:a3ea811f80f2 1965 {
Helmut64 0:a3ea811f80f2 1966 break;
Helmut64 0:a3ea811f80f2 1967 }
Helmut64 0:a3ea811f80f2 1968
Helmut64 0:a3ea811f80f2 1969 loop2 = 100;
Helmut64 0:a3ea811f80f2 1970
Helmut64 0:a3ea811f80f2 1971 while (loop2-- > 0)
Helmut64 0:a3ea811f80f2 1972 {
Helmut64 0:a3ea811f80f2 1973 /* wait */
Helmut64 0:a3ea811f80f2 1974 }
Helmut64 0:a3ea811f80f2 1975 }
Helmut64 0:a3ea811f80f2 1976 #ifdef __USB_FUNCTION_DF_ACC_ENABLE__
Helmut64 0:a3ea811f80f2 1977 if (dfacc != 0)
Helmut64 0:a3ea811f80f2 1978 {
Helmut64 0:a3ea811f80f2 1979 dummy = USB200.D1FIFO.UINT32;
Helmut64 0:a3ea811f80f2 1980 loop = dummy; // avoid warning.
Helmut64 0:a3ea811f80f2 1981 }
Helmut64 0:a3ea811f80f2 1982 #endif
Helmut64 0:a3ea811f80f2 1983 buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
Helmut64 0:a3ea811f80f2 1984 buffer |= (uint16_t)(pipe | mbw);
Helmut64 0:a3ea811f80f2 1985 USB200.D1FIFOSEL = buffer;
Helmut64 0:a3ea811f80f2 1986
Helmut64 0:a3ea811f80f2 1987 for (loop = 0; loop < 4; loop++)
Helmut64 0:a3ea811f80f2 1988 {
Helmut64 0:a3ea811f80f2 1989 if ((USB200.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
Helmut64 0:a3ea811f80f2 1990 {
Helmut64 0:a3ea811f80f2 1991 break;
Helmut64 0:a3ea811f80f2 1992 }
Helmut64 0:a3ea811f80f2 1993
Helmut64 0:a3ea811f80f2 1994 loop2 = 100;
Helmut64 0:a3ea811f80f2 1995
Helmut64 0:a3ea811f80f2 1996 while (loop2-- > 0)
Helmut64 0:a3ea811f80f2 1997 {
Helmut64 0:a3ea811f80f2 1998 /* wait */
Helmut64 0:a3ea811f80f2 1999 }
Helmut64 0:a3ea811f80f2 2000 }
Helmut64 0:a3ea811f80f2 2001 break;
Helmut64 0:a3ea811f80f2 2002
Helmut64 0:a3ea811f80f2 2003 default:
Helmut64 0:a3ea811f80f2 2004 break;
Helmut64 0:a3ea811f80f2 2005 }
Helmut64 0:a3ea811f80f2 2006
Helmut64 0:a3ea811f80f2 2007 /* Cautions !!!
Helmut64 0:a3ea811f80f2 2008 * Depending on the external bus speed of CPU, you may need to wait for 450ns here.
Helmut64 0:a3ea811f80f2 2009 * For details, please look at the data sheet. */
Helmut64 0:a3ea811f80f2 2010 loop2 = 100;
Helmut64 0:a3ea811f80f2 2011
Helmut64 0:a3ea811f80f2 2012 while (loop2-- > 0)
Helmut64 0:a3ea811f80f2 2013 {
Helmut64 0:a3ea811f80f2 2014 /* wait */
Helmut64 0:a3ea811f80f2 2015 }
Helmut64 0:a3ea811f80f2 2016 }
Helmut64 0:a3ea811f80f2 2017
Helmut64 0:a3ea811f80f2 2018 /*******************************************************************************
Helmut64 0:a3ea811f80f2 2019 * Function Name: usb0_function_write_c_fifo
Helmut64 0:a3ea811f80f2 2020 * Description : Writes data in CFIFO.
Helmut64 0:a3ea811f80f2 2021 * : Writes data by BYTE/WORD/LONG according to access size
Helmut64 0:a3ea811f80f2 2022 * : to the pipe specified by the arguments.
Helmut64 0:a3ea811f80f2 2023 * : Before executing this function, allocating CFIF0 in the specified pipe
Helmut64 0:a3ea811f80f2 2024 * : should be completed.
Helmut64 0:a3ea811f80f2 2025 * : Before executing this function, access size to the specified pipe
Helmut64 0:a3ea811f80f2 2026 * : should be fixed and set in g_usb0_function_mbw[].
Helmut64 0:a3ea811f80f2 2027 * Arguments : uint16_t pipe ; Pipe Number
Helmut64 0:a3ea811f80f2 2028 * : uint16_t count ; Data Size(Byte)
Helmut64 0:a3ea811f80f2 2029 * Return Value : none
Helmut64 0:a3ea811f80f2 2030 *******************************************************************************/
Helmut64 0:a3ea811f80f2 2031 static void usb0_function_write_c_fifo (uint16_t pipe, uint16_t count)
Helmut64 0:a3ea811f80f2 2032 {
Helmut64 0:a3ea811f80f2 2033 uint16_t even;
Helmut64 0:a3ea811f80f2 2034
Helmut64 0:a3ea811f80f2 2035 if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
Helmut64 0:a3ea811f80f2 2036 {
Helmut64 0:a3ea811f80f2 2037 for (even = count; even; --even)
Helmut64 0:a3ea811f80f2 2038 {
Helmut64 0:a3ea811f80f2 2039 USB200.CFIFO.UINT8[HH] = *g_usb0_function_data_pointer[pipe];
Helmut64 0:a3ea811f80f2 2040 g_usb0_function_data_pointer[pipe] += 1;
Helmut64 0:a3ea811f80f2 2041 }
Helmut64 0:a3ea811f80f2 2042 }
Helmut64 0:a3ea811f80f2 2043 else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
Helmut64 0:a3ea811f80f2 2044 {
Helmut64 0:a3ea811f80f2 2045 for (even = (uint16_t)(count / 2); even; --even)
Helmut64 0:a3ea811f80f2 2046 {
Helmut64 0:a3ea811f80f2 2047 USB200.CFIFO.UINT16[H] = *((uint16_t *)g_usb0_function_data_pointer[pipe]);
Helmut64 0:a3ea811f80f2 2048 g_usb0_function_data_pointer[pipe] += 2;
Helmut64 0:a3ea811f80f2 2049 }
Helmut64 0:a3ea811f80f2 2050 }
Helmut64 0:a3ea811f80f2 2051 else
Helmut64 0:a3ea811f80f2 2052 {
Helmut64 0:a3ea811f80f2 2053 for (even = (uint16_t)(count / 4); even; --even)
Helmut64 0:a3ea811f80f2 2054 {
Helmut64 0:a3ea811f80f2 2055 USB200.CFIFO.UINT32 = *((uint32_t *)g_usb0_function_data_pointer[pipe]);
Helmut64 0:a3ea811f80f2 2056 g_usb0_function_data_pointer[pipe] += 4;
Helmut64 0:a3ea811f80f2 2057 }
Helmut64 0:a3ea811f80f2 2058 }
Helmut64 0:a3ea811f80f2 2059 }
Helmut64 0:a3ea811f80f2 2060
Helmut64 0:a3ea811f80f2 2061 /*******************************************************************************
Helmut64 0:a3ea811f80f2 2062 * Function Name: usb0_function_read_c_fifo
Helmut64 0:a3ea811f80f2 2063 * Description : Reads data from CFIFO.
Helmut64 0:a3ea811f80f2 2064 * : Reads data by BYTE/WORD/LONG according to access size
Helmut64 0:a3ea811f80f2 2065 * : to the pipe specified by the arguments.
Helmut64 0:a3ea811f80f2 2066 * : Before executing this function, allocating CFIF0 in the specified pipe
Helmut64 0:a3ea811f80f2 2067 * : should be completed.
Helmut64 0:a3ea811f80f2 2068 * : Before executing this function, access size to the specified pipe
Helmut64 0:a3ea811f80f2 2069 * : should be fixed and set in g_usb0_function_mbw[].
Helmut64 0:a3ea811f80f2 2070 * Arguments : uint16_t pipe ; Pipe Number
Helmut64 0:a3ea811f80f2 2071 * : uint16_t count ; Data Size(Byte)
Helmut64 0:a3ea811f80f2 2072 * Return Value : none
Helmut64 0:a3ea811f80f2 2073 *******************************************************************************/
Helmut64 0:a3ea811f80f2 2074 static void usb0_function_read_c_fifo (uint16_t pipe, uint16_t count)
Helmut64 0:a3ea811f80f2 2075 {
Helmut64 0:a3ea811f80f2 2076 uint16_t even;
Helmut64 0:a3ea811f80f2 2077
Helmut64 0:a3ea811f80f2 2078 if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
Helmut64 0:a3ea811f80f2 2079 {
Helmut64 0:a3ea811f80f2 2080 for (even = count; even; --even)
Helmut64 0:a3ea811f80f2 2081 {
Helmut64 0:a3ea811f80f2 2082 *g_usb0_function_data_pointer[pipe] = USB200.CFIFO.UINT8[HH];
Helmut64 0:a3ea811f80f2 2083 g_usb0_function_data_pointer[pipe] += 1;
Helmut64 0:a3ea811f80f2 2084 }
Helmut64 0:a3ea811f80f2 2085 }
Helmut64 0:a3ea811f80f2 2086 else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
Helmut64 0:a3ea811f80f2 2087 {
Helmut64 0:a3ea811f80f2 2088 for (even = (uint16_t)((count + 1) / 2); even; --even)
Helmut64 0:a3ea811f80f2 2089 {
Helmut64 0:a3ea811f80f2 2090 *((uint16_t *)g_usb0_function_data_pointer[pipe]) = USB200.CFIFO.UINT16[H];
Helmut64 0:a3ea811f80f2 2091 g_usb0_function_data_pointer[pipe] += 2;
Helmut64 0:a3ea811f80f2 2092 }
Helmut64 0:a3ea811f80f2 2093 }
Helmut64 0:a3ea811f80f2 2094 else
Helmut64 0:a3ea811f80f2 2095 {
Helmut64 0:a3ea811f80f2 2096 for (even = (uint16_t)((count + 3) / 4); even; --even)
Helmut64 0:a3ea811f80f2 2097 {
Helmut64 0:a3ea811f80f2 2098 *((uint32_t *)g_usb0_function_data_pointer[pipe]) = USB200.CFIFO.UINT32;
Helmut64 0:a3ea811f80f2 2099 g_usb0_function_data_pointer[pipe] += 4;
Helmut64 0:a3ea811f80f2 2100 }
Helmut64 0:a3ea811f80f2 2101 }
Helmut64 0:a3ea811f80f2 2102 }
Helmut64 0:a3ea811f80f2 2103
Helmut64 0:a3ea811f80f2 2104 /*******************************************************************************
Helmut64 0:a3ea811f80f2 2105 * Function Name: usb0_function_write_d0_fifo
Helmut64 0:a3ea811f80f2 2106 * Description : Writes data in D0FIFO.
Helmut64 0:a3ea811f80f2 2107 * : Writes data by BYTE/WORD/LONG according to access size
Helmut64 0:a3ea811f80f2 2108 * : to the pipe specified by the arguments.
Helmut64 0:a3ea811f80f2 2109 * : Before executing this function, allocating CFIF0 in the specified pipe
Helmut64 0:a3ea811f80f2 2110 * : should be completed.
Helmut64 0:a3ea811f80f2 2111 * : Before executing this function, access size to the specified pipe
Helmut64 0:a3ea811f80f2 2112 * : should be fixed and set in g_usb0_function_mbw[].
Helmut64 0:a3ea811f80f2 2113 * Arguments : uint16_t pipe ; Pipe Number
Helmut64 0:a3ea811f80f2 2114 * : uint16_t count ; Data Size(Byte)
Helmut64 0:a3ea811f80f2 2115 * Return Value : none
Helmut64 0:a3ea811f80f2 2116 *******************************************************************************/
Helmut64 0:a3ea811f80f2 2117 static void usb0_function_write_d0_fifo (uint16_t pipe, uint16_t count)
Helmut64 0:a3ea811f80f2 2118 {
Helmut64 0:a3ea811f80f2 2119 uint16_t even;
Helmut64 0:a3ea811f80f2 2120
Helmut64 0:a3ea811f80f2 2121 if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
Helmut64 0:a3ea811f80f2 2122 {
Helmut64 0:a3ea811f80f2 2123 for (even = count; even; --even)
Helmut64 0:a3ea811f80f2 2124 {
Helmut64 0:a3ea811f80f2 2125 USB200.D0FIFO.UINT8[HH] = *g_usb0_function_data_pointer[pipe];
Helmut64 0:a3ea811f80f2 2126 g_usb0_function_data_pointer[pipe] += 1;
Helmut64 0:a3ea811f80f2 2127 }
Helmut64 0:a3ea811f80f2 2128 }
Helmut64 0:a3ea811f80f2 2129 else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
Helmut64 0:a3ea811f80f2 2130 {
Helmut64 0:a3ea811f80f2 2131 for (even = (uint16_t)(count / 2); even; --even)
Helmut64 0:a3ea811f80f2 2132 {
Helmut64 0:a3ea811f80f2 2133 USB200.D0FIFO.UINT16[H] = *((uint16_t *)g_usb0_function_data_pointer[pipe]);
Helmut64 0:a3ea811f80f2 2134 g_usb0_function_data_pointer[pipe] += 2;
Helmut64 0:a3ea811f80f2 2135 }
Helmut64 0:a3ea811f80f2 2136 }
Helmut64 0:a3ea811f80f2 2137 else
Helmut64 0:a3ea811f80f2 2138 {
Helmut64 0:a3ea811f80f2 2139 for (even = (uint16_t)(count / 4); even; --even)
Helmut64 0:a3ea811f80f2 2140 {
Helmut64 0:a3ea811f80f2 2141 USB200.D0FIFO.UINT32 = *((uint32_t *)g_usb0_function_data_pointer[pipe]);
Helmut64 0:a3ea811f80f2 2142 g_usb0_function_data_pointer[pipe] += 4;
Helmut64 0:a3ea811f80f2 2143 }
Helmut64 0:a3ea811f80f2 2144 }
Helmut64 0:a3ea811f80f2 2145 }
Helmut64 0:a3ea811f80f2 2146
Helmut64 0:a3ea811f80f2 2147 /*******************************************************************************
Helmut64 0:a3ea811f80f2 2148 * Function Name: usb0_function_read_d0_fifo
Helmut64 0:a3ea811f80f2 2149 * Description : Reads data from D0FIFO.
Helmut64 0:a3ea811f80f2 2150 * : Reads data by BYTE/WORD/LONG according to access size
Helmut64 0:a3ea811f80f2 2151 * : to the pipe specified by the arguments.
Helmut64 0:a3ea811f80f2 2152 * : Before executing this function, allocating DOFIF0 in the specified pipe
Helmut64 0:a3ea811f80f2 2153 * : should be completed.
Helmut64 0:a3ea811f80f2 2154 * : Before executing this function, access size to the specified pipe
Helmut64 0:a3ea811f80f2 2155 * : should be fixed and set in g_usb0_function_mbw[].
Helmut64 0:a3ea811f80f2 2156 * Arguments : uint16_t pipe ; Pipe Number
Helmut64 0:a3ea811f80f2 2157 * : uint16_t count ; Data Size(Byte)
Helmut64 0:a3ea811f80f2 2158 * Return Value : none
Helmut64 0:a3ea811f80f2 2159 *******************************************************************************/
Helmut64 0:a3ea811f80f2 2160 static void usb0_function_read_d0_fifo (uint16_t pipe, uint16_t count)
Helmut64 0:a3ea811f80f2 2161 {
Helmut64 0:a3ea811f80f2 2162 uint16_t even;
Helmut64 0:a3ea811f80f2 2163
Helmut64 0:a3ea811f80f2 2164 if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
Helmut64 0:a3ea811f80f2 2165 {
Helmut64 0:a3ea811f80f2 2166 for (even = count; even; --even)
Helmut64 0:a3ea811f80f2 2167 {
Helmut64 0:a3ea811f80f2 2168 *g_usb0_function_data_pointer[pipe] = USB200.D0FIFO.UINT8[HH];
Helmut64 0:a3ea811f80f2 2169 g_usb0_function_data_pointer[pipe] += 1;
Helmut64 0:a3ea811f80f2 2170 }
Helmut64 0:a3ea811f80f2 2171 }
Helmut64 0:a3ea811f80f2 2172 else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
Helmut64 0:a3ea811f80f2 2173 {
Helmut64 0:a3ea811f80f2 2174 for (even = (uint16_t)((count + 1) / 2); even; --even)
Helmut64 0:a3ea811f80f2 2175 {
Helmut64 0:a3ea811f80f2 2176 *((uint16_t *)g_usb0_function_data_pointer[pipe]) = USB200.D0FIFO.UINT16[H];
Helmut64 0:a3ea811f80f2 2177 g_usb0_function_data_pointer[pipe] += 2;
Helmut64 0:a3ea811f80f2 2178 }
Helmut64 0:a3ea811f80f2 2179 }
Helmut64 0:a3ea811f80f2 2180 else
Helmut64 0:a3ea811f80f2 2181 {
Helmut64 0:a3ea811f80f2 2182 for (even = (uint16_t)((count + 3) / 4); even; --even)
Helmut64 0:a3ea811f80f2 2183 {
Helmut64 0:a3ea811f80f2 2184 *((uint32_t *)g_usb0_function_data_pointer[pipe]) = USB200.D0FIFO.UINT32;
Helmut64 0:a3ea811f80f2 2185 g_usb0_function_data_pointer[pipe] += 4;
Helmut64 0:a3ea811f80f2 2186 }
Helmut64 0:a3ea811f80f2 2187 }
Helmut64 0:a3ea811f80f2 2188 }
Helmut64 0:a3ea811f80f2 2189
Helmut64 0:a3ea811f80f2 2190 /*******************************************************************************
Helmut64 0:a3ea811f80f2 2191 * Function Name: usb0_function_write_d1_fifo
Helmut64 0:a3ea811f80f2 2192 * Description : Writes data in D1FIFO.
Helmut64 0:a3ea811f80f2 2193 * : Writes data by BYTE/WORD/LONG according to access size
Helmut64 0:a3ea811f80f2 2194 * : to the pipe specified by the arguments.
Helmut64 0:a3ea811f80f2 2195 * : Before executing this function, allocating D1FIF0 in the specified pipe
Helmut64 0:a3ea811f80f2 2196 * : should be completed.
Helmut64 0:a3ea811f80f2 2197 * : Before executing this function, access size to the specified pipe
Helmut64 0:a3ea811f80f2 2198 * : should be fixed and set in g_usb0_function_mbw[].
Helmut64 0:a3ea811f80f2 2199 * Arguments : uint16_t pipe ; Pipe Number
Helmut64 0:a3ea811f80f2 2200 * : uint16_t count ; Data Size(Byte)
Helmut64 0:a3ea811f80f2 2201 * Return Value : none
Helmut64 0:a3ea811f80f2 2202 *******************************************************************************/
Helmut64 0:a3ea811f80f2 2203 static void usb0_function_write_d1_fifo (uint16_t pipe, uint16_t count)
Helmut64 0:a3ea811f80f2 2204 {
Helmut64 0:a3ea811f80f2 2205 uint16_t even;
Helmut64 0:a3ea811f80f2 2206
Helmut64 0:a3ea811f80f2 2207 if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
Helmut64 0:a3ea811f80f2 2208 {
Helmut64 0:a3ea811f80f2 2209 for (even = count; even; --even)
Helmut64 0:a3ea811f80f2 2210 {
Helmut64 0:a3ea811f80f2 2211 USB200.D1FIFO.UINT8[HH] = *g_usb0_function_data_pointer[pipe];
Helmut64 0:a3ea811f80f2 2212 g_usb0_function_data_pointer[pipe] += 1;
Helmut64 0:a3ea811f80f2 2213 }
Helmut64 0:a3ea811f80f2 2214 }
Helmut64 0:a3ea811f80f2 2215 else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
Helmut64 0:a3ea811f80f2 2216 {
Helmut64 0:a3ea811f80f2 2217 for (even = (uint16_t)(count / 2); even; --even)
Helmut64 0:a3ea811f80f2 2218 {
Helmut64 0:a3ea811f80f2 2219 USB200.D1FIFO.UINT16[H] = *((uint16_t *)g_usb0_function_data_pointer[pipe]);
Helmut64 0:a3ea811f80f2 2220 g_usb0_function_data_pointer[pipe] += 2;
Helmut64 0:a3ea811f80f2 2221 }
Helmut64 0:a3ea811f80f2 2222 }
Helmut64 0:a3ea811f80f2 2223 else
Helmut64 0:a3ea811f80f2 2224 {
Helmut64 0:a3ea811f80f2 2225 for (even = (uint16_t)(count / 4); even; --even)
Helmut64 0:a3ea811f80f2 2226 {
Helmut64 0:a3ea811f80f2 2227 USB200.D1FIFO.UINT32 = *((uint32_t *)g_usb0_function_data_pointer[pipe]);
Helmut64 0:a3ea811f80f2 2228 g_usb0_function_data_pointer[pipe] += 4;
Helmut64 0:a3ea811f80f2 2229 }
Helmut64 0:a3ea811f80f2 2230 }
Helmut64 0:a3ea811f80f2 2231 }
Helmut64 0:a3ea811f80f2 2232
Helmut64 0:a3ea811f80f2 2233 /*******************************************************************************
Helmut64 0:a3ea811f80f2 2234 * Function Name: usb0_function_read_d1_fifo
Helmut64 0:a3ea811f80f2 2235 * Description : Reads data from D1FIFO.
Helmut64 0:a3ea811f80f2 2236 * : Reads data by BYTE/WORD/LONG according to access size
Helmut64 0:a3ea811f80f2 2237 * : to the pipe specified by the arguments.
Helmut64 0:a3ea811f80f2 2238 * : Before executing this function, allocating D1FIF0 in the specified pipe
Helmut64 0:a3ea811f80f2 2239 * : should be completed.
Helmut64 0:a3ea811f80f2 2240 * : Before executing this function, access size to the specified pipe
Helmut64 0:a3ea811f80f2 2241 * : should be fixed and set in g_usb0_function_mbw[].
Helmut64 0:a3ea811f80f2 2242 * Arguments : uint16_t pipe ; Pipe Number
Helmut64 0:a3ea811f80f2 2243 * : uint16_t count ; Data Size(Byte)
Helmut64 0:a3ea811f80f2 2244 * Return Value : none
Helmut64 0:a3ea811f80f2 2245 *******************************************************************************/
Helmut64 0:a3ea811f80f2 2246 static void usb0_function_read_d1_fifo (uint16_t pipe, uint16_t count)
Helmut64 0:a3ea811f80f2 2247 {
Helmut64 0:a3ea811f80f2 2248 uint16_t even;
Helmut64 0:a3ea811f80f2 2249
Helmut64 0:a3ea811f80f2 2250 if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
Helmut64 0:a3ea811f80f2 2251 {
Helmut64 0:a3ea811f80f2 2252 for (even = count; even; --even)
Helmut64 0:a3ea811f80f2 2253 {
Helmut64 0:a3ea811f80f2 2254 *g_usb0_function_data_pointer[pipe] = USB200.D1FIFO.UINT8[HH];
Helmut64 0:a3ea811f80f2 2255 g_usb0_function_data_pointer[pipe] += 1;
Helmut64 0:a3ea811f80f2 2256 }
Helmut64 0:a3ea811f80f2 2257 }
Helmut64 0:a3ea811f80f2 2258 else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
Helmut64 0:a3ea811f80f2 2259 {
Helmut64 0:a3ea811f80f2 2260 for (even = (uint16_t)((count + 1) / 2); even; --even)
Helmut64 0:a3ea811f80f2 2261 {
Helmut64 0:a3ea811f80f2 2262 *((uint16_t *)g_usb0_function_data_pointer[pipe]) = USB200.D1FIFO.UINT16[H];
Helmut64 0:a3ea811f80f2 2263 g_usb0_function_data_pointer[pipe] += 2;
Helmut64 0:a3ea811f80f2 2264 }
Helmut64 0:a3ea811f80f2 2265 }
Helmut64 0:a3ea811f80f2 2266 else
Helmut64 0:a3ea811f80f2 2267 {
Helmut64 0:a3ea811f80f2 2268 for (even = (uint16_t)((count + 3) / 4); even; --even)
Helmut64 0:a3ea811f80f2 2269 {
Helmut64 0:a3ea811f80f2 2270 *((uint32_t *)g_usb0_function_data_pointer[pipe]) = USB200.D1FIFO.UINT32;
Helmut64 0:a3ea811f80f2 2271 g_usb0_function_data_pointer[pipe] += 4;
Helmut64 0:a3ea811f80f2 2272 }
Helmut64 0:a3ea811f80f2 2273 }
Helmut64 0:a3ea811f80f2 2274 }
Helmut64 0:a3ea811f80f2 2275
Helmut64 0:a3ea811f80f2 2276 /*******************************************************************************
Helmut64 0:a3ea811f80f2 2277 * Function Name: usb0_function_com_get_dmasize
Helmut64 0:a3ea811f80f2 2278 * Description : Calculates access width of DMA transfer by the argument to
Helmut64 0:a3ea811f80f2 2279 * : return as the Return Value.
Helmut64 0:a3ea811f80f2 2280 * Arguments : uint32_t trncount : transfer byte
Helmut64 0:a3ea811f80f2 2281 * : uint32_t dtptr : transfer data pointer
Helmut64 0:a3ea811f80f2 2282 * Return Value : DMA transfer size : 0 8bit
Helmut64 0:a3ea811f80f2 2283 * : : 1 16bit
Helmut64 0:a3ea811f80f2 2284 * : : 2 32bit
Helmut64 0:a3ea811f80f2 2285 *******************************************************************************/
Helmut64 0:a3ea811f80f2 2286 static uint32_t usb0_function_com_get_dmasize (uint32_t trncount, uint32_t dtptr)
Helmut64 0:a3ea811f80f2 2287 {
Helmut64 0:a3ea811f80f2 2288 uint32_t size;
Helmut64 0:a3ea811f80f2 2289
Helmut64 0:a3ea811f80f2 2290 if (((trncount & 0x0001) != 0) || ((dtptr & 0x00000001) != 0))
Helmut64 0:a3ea811f80f2 2291 {
Helmut64 0:a3ea811f80f2 2292 /* When transfer byte count is odd */
Helmut64 0:a3ea811f80f2 2293 /* or transfer data area is 8-bit alignment */
Helmut64 0:a3ea811f80f2 2294 size = 0; /* 8bit */
Helmut64 0:a3ea811f80f2 2295 }
Helmut64 0:a3ea811f80f2 2296 else if (((trncount & 0x0003) != 0) || ((dtptr & 0x00000003) != 0))
Helmut64 0:a3ea811f80f2 2297 {
Helmut64 0:a3ea811f80f2 2298 /* When the transfer byte count is multiples of 2 */
Helmut64 0:a3ea811f80f2 2299 /* or the transfer data area is 16-bit alignment */
Helmut64 0:a3ea811f80f2 2300 size = 1; /* 16bit */
Helmut64 0:a3ea811f80f2 2301 }
Helmut64 0:a3ea811f80f2 2302 else
Helmut64 0:a3ea811f80f2 2303 {
Helmut64 0:a3ea811f80f2 2304 /* When the transfer byte count is multiples of 4 */
Helmut64 0:a3ea811f80f2 2305 /* or the transfer data area is 32-bit alignment */
Helmut64 0:a3ea811f80f2 2306 size = 2; /* 32bit */
Helmut64 0:a3ea811f80f2 2307 }
Helmut64 0:a3ea811f80f2 2308
Helmut64 0:a3ea811f80f2 2309 return size;
Helmut64 0:a3ea811f80f2 2310 }
Helmut64 0:a3ea811f80f2 2311
Helmut64 0:a3ea811f80f2 2312 /*******************************************************************************
Helmut64 0:a3ea811f80f2 2313 * Function Name: usb0_function_get_mbw
Helmut64 0:a3ea811f80f2 2314 * Description : Calculates access width of DMA to return the value set in MBW.
Helmut64 0:a3ea811f80f2 2315 * Arguments : uint32_t trncount : transfer byte
Helmut64 0:a3ea811f80f2 2316 * : uint32_t dtptr : transfer data pointer
Helmut64 0:a3ea811f80f2 2317 * Return Value : FIFO transfer size : USB_FUNCTION_BITMBW_8 8bit
Helmut64 0:a3ea811f80f2 2318 * : : USB_FUNCTION_BITMBW_16 16bit
Helmut64 0:a3ea811f80f2 2319 * : : USB_FUNCTION_BITMBW_32 32bit
Helmut64 0:a3ea811f80f2 2320 *******************************************************************************/
Helmut64 0:a3ea811f80f2 2321 uint16_t usb0_function_get_mbw (uint32_t trncount, uint32_t dtptr)
Helmut64 0:a3ea811f80f2 2322 {
Helmut64 0:a3ea811f80f2 2323 uint32_t size;
Helmut64 0:a3ea811f80f2 2324 uint16_t mbw;
Helmut64 0:a3ea811f80f2 2325
Helmut64 0:a3ea811f80f2 2326 size = usb0_function_com_get_dmasize(trncount, dtptr);
Helmut64 0:a3ea811f80f2 2327
Helmut64 0:a3ea811f80f2 2328 if (size == 0)
Helmut64 0:a3ea811f80f2 2329 {
Helmut64 0:a3ea811f80f2 2330 /* 8bit */
Helmut64 0:a3ea811f80f2 2331 mbw = USB_FUNCTION_BITMBW_8;
Helmut64 0:a3ea811f80f2 2332 }
Helmut64 0:a3ea811f80f2 2333 else if (size == 1)
Helmut64 0:a3ea811f80f2 2334 {
Helmut64 0:a3ea811f80f2 2335 /* 16bit */
Helmut64 0:a3ea811f80f2 2336 mbw = USB_FUNCTION_BITMBW_16;
Helmut64 0:a3ea811f80f2 2337 }
Helmut64 0:a3ea811f80f2 2338 else
Helmut64 0:a3ea811f80f2 2339 {
Helmut64 0:a3ea811f80f2 2340 /* 32bit */
Helmut64 0:a3ea811f80f2 2341 mbw = USB_FUNCTION_BITMBW_32;
Helmut64 0:a3ea811f80f2 2342 }
Helmut64 0:a3ea811f80f2 2343
Helmut64 0:a3ea811f80f2 2344 return mbw;
Helmut64 0:a3ea811f80f2 2345 }
Helmut64 0:a3ea811f80f2 2346
Helmut64 0:a3ea811f80f2 2347 /*******************************************************************************
Helmut64 0:a3ea811f80f2 2348 * Function Name: usb0_function_set_transaction_counter
Helmut64 0:a3ea811f80f2 2349 * Description : Sets transaction counter by the argument(PIPEnTRN).
Helmut64 0:a3ea811f80f2 2350 * : Clears transaction before setting to enable transaction counter setting.
Helmut64 0:a3ea811f80f2 2351 * Arguments : uint16_t pipe ; Pipe number
Helmut64 0:a3ea811f80f2 2352 * : uint32_t bsize : Data transfer size
Helmut64 0:a3ea811f80f2 2353 * Return Value : none
Helmut64 0:a3ea811f80f2 2354 *******************************************************************************/
Helmut64 0:a3ea811f80f2 2355 static void usb0_function_set_transaction_counter (uint16_t pipe, uint32_t bsize)
Helmut64 0:a3ea811f80f2 2356 {
Helmut64 0:a3ea811f80f2 2357 uint16_t mxps;
Helmut64 0:a3ea811f80f2 2358 uint16_t cnt;
Helmut64 0:a3ea811f80f2 2359
Helmut64 0:a3ea811f80f2 2360 if (bsize == 0)
Helmut64 0:a3ea811f80f2 2361 {
Helmut64 0:a3ea811f80f2 2362 return;
Helmut64 0:a3ea811f80f2 2363 }
Helmut64 0:a3ea811f80f2 2364
Helmut64 0:a3ea811f80f2 2365 mxps = usb0_function_get_mxps(pipe); /* Max Packet Size */
Helmut64 0:a3ea811f80f2 2366
Helmut64 0:a3ea811f80f2 2367 if ((bsize % mxps) == 0)
Helmut64 0:a3ea811f80f2 2368 {
Helmut64 0:a3ea811f80f2 2369 cnt = (uint16_t)(bsize / mxps);
Helmut64 0:a3ea811f80f2 2370 }
Helmut64 0:a3ea811f80f2 2371 else
Helmut64 0:a3ea811f80f2 2372 {
Helmut64 0:a3ea811f80f2 2373 cnt = (uint16_t)((bsize / mxps) + 1);
Helmut64 0:a3ea811f80f2 2374 }
Helmut64 0:a3ea811f80f2 2375
Helmut64 0:a3ea811f80f2 2376 switch (pipe)
Helmut64 0:a3ea811f80f2 2377 {
Helmut64 0:a3ea811f80f2 2378 case USB_FUNCTION_PIPE1:
Helmut64 0:a3ea811f80f2 2379 RZA_IO_RegWrite_16(&USB200.PIPE1TRE,
Helmut64 0:a3ea811f80f2 2380 1,
Helmut64 0:a3ea811f80f2 2381 USB_PIPEnTRE_TRCLR_SHIFT,
Helmut64 0:a3ea811f80f2 2382 USB_PIPEnTRE_TRCLR);
Helmut64 0:a3ea811f80f2 2383 USB200.PIPE1TRN = cnt;
Helmut64 0:a3ea811f80f2 2384 RZA_IO_RegWrite_16(&USB200.PIPE1TRE,
Helmut64 0:a3ea811f80f2 2385 1,
Helmut64 0:a3ea811f80f2 2386 USB_PIPEnTRE_TRENB_SHIFT,
Helmut64 0:a3ea811f80f2 2387 USB_PIPEnTRE_TRENB);
Helmut64 0:a3ea811f80f2 2388 break;
Helmut64 0:a3ea811f80f2 2389
Helmut64 0:a3ea811f80f2 2390 case USB_FUNCTION_PIPE2:
Helmut64 0:a3ea811f80f2 2391 RZA_IO_RegWrite_16(&USB200.PIPE2TRE,
Helmut64 0:a3ea811f80f2 2392 1,
Helmut64 0:a3ea811f80f2 2393 USB_PIPEnTRE_TRCLR_SHIFT,
Helmut64 0:a3ea811f80f2 2394 USB_PIPEnTRE_TRCLR);
Helmut64 0:a3ea811f80f2 2395 USB200.PIPE2TRN = cnt;
Helmut64 0:a3ea811f80f2 2396 RZA_IO_RegWrite_16(&USB200.PIPE2TRE,
Helmut64 0:a3ea811f80f2 2397 1,
Helmut64 0:a3ea811f80f2 2398 USB_PIPEnTRE_TRENB_SHIFT,
Helmut64 0:a3ea811f80f2 2399 USB_PIPEnTRE_TRENB);
Helmut64 0:a3ea811f80f2 2400 break;
Helmut64 0:a3ea811f80f2 2401
Helmut64 0:a3ea811f80f2 2402 case USB_FUNCTION_PIPE3:
Helmut64 0:a3ea811f80f2 2403 RZA_IO_RegWrite_16(&USB200.PIPE3TRE,
Helmut64 0:a3ea811f80f2 2404 1,
Helmut64 0:a3ea811f80f2 2405 USB_PIPEnTRE_TRCLR_SHIFT,
Helmut64 0:a3ea811f80f2 2406 USB_PIPEnTRE_TRCLR);
Helmut64 0:a3ea811f80f2 2407 USB200.PIPE3TRN = cnt;
Helmut64 0:a3ea811f80f2 2408 RZA_IO_RegWrite_16(&USB200.PIPE3TRE,
Helmut64 0:a3ea811f80f2 2409 1,
Helmut64 0:a3ea811f80f2 2410 USB_PIPEnTRE_TRENB_SHIFT,
Helmut64 0:a3ea811f80f2 2411 USB_PIPEnTRE_TRENB);
Helmut64 0:a3ea811f80f2 2412 break;
Helmut64 0:a3ea811f80f2 2413
Helmut64 0:a3ea811f80f2 2414 case USB_FUNCTION_PIPE4:
Helmut64 0:a3ea811f80f2 2415 RZA_IO_RegWrite_16(&USB200.PIPE4TRE,
Helmut64 0:a3ea811f80f2 2416 1,
Helmut64 0:a3ea811f80f2 2417 USB_PIPEnTRE_TRCLR_SHIFT,
Helmut64 0:a3ea811f80f2 2418 USB_PIPEnTRE_TRCLR);
Helmut64 0:a3ea811f80f2 2419 USB200.PIPE4TRN = cnt;
Helmut64 0:a3ea811f80f2 2420 RZA_IO_RegWrite_16(&USB200.PIPE4TRE,
Helmut64 0:a3ea811f80f2 2421 1,
Helmut64 0:a3ea811f80f2 2422 USB_PIPEnTRE_TRENB_SHIFT,
Helmut64 0:a3ea811f80f2 2423 USB_PIPEnTRE_TRENB);
Helmut64 0:a3ea811f80f2 2424 break;
Helmut64 0:a3ea811f80f2 2425
Helmut64 0:a3ea811f80f2 2426 case USB_FUNCTION_PIPE5:
Helmut64 0:a3ea811f80f2 2427 RZA_IO_RegWrite_16(&USB200.PIPE5TRE,
Helmut64 0:a3ea811f80f2 2428 1,
Helmut64 0:a3ea811f80f2 2429 USB_PIPEnTRE_TRCLR_SHIFT,
Helmut64 0:a3ea811f80f2 2430 USB_PIPEnTRE_TRCLR);
Helmut64 0:a3ea811f80f2 2431 USB200.PIPE5TRN = cnt;
Helmut64 0:a3ea811f80f2 2432 RZA_IO_RegWrite_16(&USB200.PIPE5TRE,
Helmut64 0:a3ea811f80f2 2433 1,
Helmut64 0:a3ea811f80f2 2434 USB_PIPEnTRE_TRENB_SHIFT,
Helmut64 0:a3ea811f80f2 2435 USB_PIPEnTRE_TRENB);
Helmut64 0:a3ea811f80f2 2436 break;
Helmut64 0:a3ea811f80f2 2437
Helmut64 0:a3ea811f80f2 2438 case USB_FUNCTION_PIPE9:
Helmut64 0:a3ea811f80f2 2439 RZA_IO_RegWrite_16(&USB200.PIPE9TRE,
Helmut64 0:a3ea811f80f2 2440 1,
Helmut64 0:a3ea811f80f2 2441 USB_PIPEnTRE_TRCLR_SHIFT,
Helmut64 0:a3ea811f80f2 2442 USB_PIPEnTRE_TRCLR);
Helmut64 0:a3ea811f80f2 2443 USB200.PIPE9TRN = cnt;
Helmut64 0:a3ea811f80f2 2444 RZA_IO_RegWrite_16(&USB200.PIPE9TRE,
Helmut64 0:a3ea811f80f2 2445 1,
Helmut64 0:a3ea811f80f2 2446 USB_PIPEnTRE_TRENB_SHIFT,
Helmut64 0:a3ea811f80f2 2447 USB_PIPEnTRE_TRENB);
Helmut64 0:a3ea811f80f2 2448 break;
Helmut64 0:a3ea811f80f2 2449
Helmut64 0:a3ea811f80f2 2450 case USB_FUNCTION_PIPEA:
Helmut64 0:a3ea811f80f2 2451 RZA_IO_RegWrite_16(&USB200.PIPEATRE,
Helmut64 0:a3ea811f80f2 2452 1,
Helmut64 0:a3ea811f80f2 2453 USB_PIPEnTRE_TRCLR_SHIFT,
Helmut64 0:a3ea811f80f2 2454 USB_PIPEnTRE_TRCLR);
Helmut64 0:a3ea811f80f2 2455 USB200.PIPEATRN = cnt;
Helmut64 0:a3ea811f80f2 2456 RZA_IO_RegWrite_16(&USB200.PIPEATRE,
Helmut64 0:a3ea811f80f2 2457 1,
Helmut64 0:a3ea811f80f2 2458 USB_PIPEnTRE_TRENB_SHIFT,
Helmut64 0:a3ea811f80f2 2459 USB_PIPEnTRE_TRENB);
Helmut64 0:a3ea811f80f2 2460 break;
Helmut64 0:a3ea811f80f2 2461
Helmut64 0:a3ea811f80f2 2462 case USB_FUNCTION_PIPEB:
Helmut64 0:a3ea811f80f2 2463 RZA_IO_RegWrite_16(&USB200.PIPEBTRE,
Helmut64 0:a3ea811f80f2 2464 1,
Helmut64 0:a3ea811f80f2 2465 USB_PIPEnTRE_TRCLR_SHIFT,
Helmut64 0:a3ea811f80f2 2466 USB_PIPEnTRE_TRCLR);
Helmut64 0:a3ea811f80f2 2467 USB200.PIPEBTRN = cnt;
Helmut64 0:a3ea811f80f2 2468 RZA_IO_RegWrite_16(&USB200.PIPEBTRE,
Helmut64 0:a3ea811f80f2 2469 1,
Helmut64 0:a3ea811f80f2 2470 USB_PIPEnTRE_TRENB_SHIFT,
Helmut64 0:a3ea811f80f2 2471 USB_PIPEnTRE_TRENB);
Helmut64 0:a3ea811f80f2 2472 break;
Helmut64 0:a3ea811f80f2 2473
Helmut64 0:a3ea811f80f2 2474 case USB_FUNCTION_PIPEC:
Helmut64 0:a3ea811f80f2 2475 RZA_IO_RegWrite_16(&USB200.PIPECTRE,
Helmut64 0:a3ea811f80f2 2476 1,
Helmut64 0:a3ea811f80f2 2477 USB_PIPEnTRE_TRCLR_SHIFT,
Helmut64 0:a3ea811f80f2 2478 USB_PIPEnTRE_TRCLR);
Helmut64 0:a3ea811f80f2 2479 USB200.PIPECTRN = cnt;
Helmut64 0:a3ea811f80f2 2480 RZA_IO_RegWrite_16(&USB200.PIPECTRE,
Helmut64 0:a3ea811f80f2 2481 1,
Helmut64 0:a3ea811f80f2 2482 USB_PIPEnTRE_TRENB_SHIFT,
Helmut64 0:a3ea811f80f2 2483 USB_PIPEnTRE_TRENB);
Helmut64 0:a3ea811f80f2 2484 break;
Helmut64 0:a3ea811f80f2 2485
Helmut64 0:a3ea811f80f2 2486 case USB_FUNCTION_PIPED:
Helmut64 0:a3ea811f80f2 2487 RZA_IO_RegWrite_16(&USB200.PIPEDTRE,
Helmut64 0:a3ea811f80f2 2488 1,
Helmut64 0:a3ea811f80f2 2489 USB_PIPEnTRE_TRCLR_SHIFT,
Helmut64 0:a3ea811f80f2 2490 USB_PIPEnTRE_TRCLR);
Helmut64 0:a3ea811f80f2 2491 USB200.PIPEDTRN = cnt;
Helmut64 0:a3ea811f80f2 2492 RZA_IO_RegWrite_16(&USB200.PIPEDTRE,
Helmut64 0:a3ea811f80f2 2493 1,
Helmut64 0:a3ea811f80f2 2494 USB_PIPEnTRE_TRENB_SHIFT,
Helmut64 0:a3ea811f80f2 2495 USB_PIPEnTRE_TRENB);
Helmut64 0:a3ea811f80f2 2496 break;
Helmut64 0:a3ea811f80f2 2497
Helmut64 0:a3ea811f80f2 2498 case USB_FUNCTION_PIPEE:
Helmut64 0:a3ea811f80f2 2499 RZA_IO_RegWrite_16(&USB200.PIPEETRE,
Helmut64 0:a3ea811f80f2 2500 1,
Helmut64 0:a3ea811f80f2 2501 USB_PIPEnTRE_TRCLR_SHIFT,
Helmut64 0:a3ea811f80f2 2502 USB_PIPEnTRE_TRCLR);
Helmut64 0:a3ea811f80f2 2503 USB200.PIPEETRN = cnt;
Helmut64 0:a3ea811f80f2 2504 RZA_IO_RegWrite_16(&USB200.PIPEETRE,
Helmut64 0:a3ea811f80f2 2505 1,
Helmut64 0:a3ea811f80f2 2506 USB_PIPEnTRE_TRENB_SHIFT,
Helmut64 0:a3ea811f80f2 2507 USB_PIPEnTRE_TRENB);
Helmut64 0:a3ea811f80f2 2508 break;
Helmut64 0:a3ea811f80f2 2509
Helmut64 0:a3ea811f80f2 2510 case USB_FUNCTION_PIPEF:
Helmut64 0:a3ea811f80f2 2511 RZA_IO_RegWrite_16(&USB200.PIPEFTRE,
Helmut64 0:a3ea811f80f2 2512 1,
Helmut64 0:a3ea811f80f2 2513 USB_PIPEnTRE_TRCLR_SHIFT,
Helmut64 0:a3ea811f80f2 2514 USB_PIPEnTRE_TRCLR);
Helmut64 0:a3ea811f80f2 2515 USB200.PIPEFTRN = cnt;
Helmut64 0:a3ea811f80f2 2516 RZA_IO_RegWrite_16(&USB200.PIPEFTRE,
Helmut64 0:a3ea811f80f2 2517 1,
Helmut64 0:a3ea811f80f2 2518 USB_PIPEnTRE_TRENB_SHIFT,
Helmut64 0:a3ea811f80f2 2519 USB_PIPEnTRE_TRENB);
Helmut64 0:a3ea811f80f2 2520 break;
Helmut64 0:a3ea811f80f2 2521
Helmut64 0:a3ea811f80f2 2522 default:
Helmut64 0:a3ea811f80f2 2523 break;
Helmut64 0:a3ea811f80f2 2524 }
Helmut64 0:a3ea811f80f2 2525 }
Helmut64 0:a3ea811f80f2 2526
Helmut64 0:a3ea811f80f2 2527 /*******************************************************************************
Helmut64 0:a3ea811f80f2 2528 * Function Name: usb0_function_clear_transaction_counter
Helmut64 0:a3ea811f80f2 2529 * Description : Clears the transaction counter by the argument.
Helmut64 0:a3ea811f80f2 2530 * : After executing this function, the transaction counter is invalid.
Helmut64 0:a3ea811f80f2 2531 * Arguments : uint16_t pipe ; Pipe number
Helmut64 0:a3ea811f80f2 2532 * Return Value : none
Helmut64 0:a3ea811f80f2 2533 *******************************************************************************/
Helmut64 0:a3ea811f80f2 2534 void usb0_function_clear_transaction_counter (uint16_t pipe)
Helmut64 0:a3ea811f80f2 2535 {
Helmut64 0:a3ea811f80f2 2536 switch (pipe)
Helmut64 0:a3ea811f80f2 2537 {
Helmut64 0:a3ea811f80f2 2538 case USB_FUNCTION_PIPE1:
Helmut64 0:a3ea811f80f2 2539 RZA_IO_RegWrite_16(&USB200.PIPE1TRE,
Helmut64 0:a3ea811f80f2 2540 0,
Helmut64 0:a3ea811f80f2 2541 USB_PIPEnTRE_TRENB_SHIFT,
Helmut64 0:a3ea811f80f2 2542 USB_PIPEnTRE_TRENB);
Helmut64 0:a3ea811f80f2 2543 RZA_IO_RegWrite_16(&USB200.PIPE1TRE,
Helmut64 0:a3ea811f80f2 2544 1,
Helmut64 0:a3ea811f80f2 2545 USB_PIPEnTRE_TRCLR_SHIFT,
Helmut64 0:a3ea811f80f2 2546 USB_PIPEnTRE_TRCLR);
Helmut64 0:a3ea811f80f2 2547 break;
Helmut64 0:a3ea811f80f2 2548
Helmut64 0:a3ea811f80f2 2549 case USB_FUNCTION_PIPE2:
Helmut64 0:a3ea811f80f2 2550 RZA_IO_RegWrite_16(&USB200.PIPE2TRE,
Helmut64 0:a3ea811f80f2 2551 0,
Helmut64 0:a3ea811f80f2 2552 USB_PIPEnTRE_TRENB_SHIFT,
Helmut64 0:a3ea811f80f2 2553 USB_PIPEnTRE_TRENB);
Helmut64 0:a3ea811f80f2 2554 RZA_IO_RegWrite_16(&USB200.PIPE2TRE,
Helmut64 0:a3ea811f80f2 2555 1,
Helmut64 0:a3ea811f80f2 2556 USB_PIPEnTRE_TRCLR_SHIFT,
Helmut64 0:a3ea811f80f2 2557 USB_PIPEnTRE_TRCLR);
Helmut64 0:a3ea811f80f2 2558 break;
Helmut64 0:a3ea811f80f2 2559
Helmut64 0:a3ea811f80f2 2560 case USB_FUNCTION_PIPE3:
Helmut64 0:a3ea811f80f2 2561 RZA_IO_RegWrite_16(&USB200.PIPE3TRE,
Helmut64 0:a3ea811f80f2 2562 0,
Helmut64 0:a3ea811f80f2 2563 USB_PIPEnTRE_TRENB_SHIFT,
Helmut64 0:a3ea811f80f2 2564 USB_PIPEnTRE_TRENB);
Helmut64 0:a3ea811f80f2 2565 RZA_IO_RegWrite_16(&USB200.PIPE3TRE,
Helmut64 0:a3ea811f80f2 2566 1,
Helmut64 0:a3ea811f80f2 2567 USB_PIPEnTRE_TRCLR_SHIFT,
Helmut64 0:a3ea811f80f2 2568 USB_PIPEnTRE_TRCLR);
Helmut64 0:a3ea811f80f2 2569 break;
Helmut64 0:a3ea811f80f2 2570
Helmut64 0:a3ea811f80f2 2571 case USB_FUNCTION_PIPE4:
Helmut64 0:a3ea811f80f2 2572 RZA_IO_RegWrite_16(&USB200.PIPE4TRE,
Helmut64 0:a3ea811f80f2 2573 0,
Helmut64 0:a3ea811f80f2 2574 USB_PIPEnTRE_TRENB_SHIFT,
Helmut64 0:a3ea811f80f2 2575 USB_PIPEnTRE_TRENB);
Helmut64 0:a3ea811f80f2 2576 RZA_IO_RegWrite_16(&USB200.PIPE4TRE,
Helmut64 0:a3ea811f80f2 2577 1,
Helmut64 0:a3ea811f80f2 2578 USB_PIPEnTRE_TRCLR_SHIFT,
Helmut64 0:a3ea811f80f2 2579 USB_PIPEnTRE_TRCLR);
Helmut64 0:a3ea811f80f2 2580 break;
Helmut64 0:a3ea811f80f2 2581
Helmut64 0:a3ea811f80f2 2582 case USB_FUNCTION_PIPE5:
Helmut64 0:a3ea811f80f2 2583 RZA_IO_RegWrite_16(&USB200.PIPE5TRE,
Helmut64 0:a3ea811f80f2 2584 0,
Helmut64 0:a3ea811f80f2 2585 USB_PIPEnTRE_TRENB_SHIFT,
Helmut64 0:a3ea811f80f2 2586 USB_PIPEnTRE_TRENB);
Helmut64 0:a3ea811f80f2 2587 RZA_IO_RegWrite_16(&USB200.PIPE5TRE,
Helmut64 0:a3ea811f80f2 2588 1,
Helmut64 0:a3ea811f80f2 2589 USB_PIPEnTRE_TRCLR_SHIFT,
Helmut64 0:a3ea811f80f2 2590 USB_PIPEnTRE_TRCLR);
Helmut64 0:a3ea811f80f2 2591 break;
Helmut64 0:a3ea811f80f2 2592
Helmut64 0:a3ea811f80f2 2593 case USB_FUNCTION_PIPE9:
Helmut64 0:a3ea811f80f2 2594 RZA_IO_RegWrite_16(&USB200.PIPE9TRE,
Helmut64 0:a3ea811f80f2 2595 0,
Helmut64 0:a3ea811f80f2 2596 USB_PIPEnTRE_TRENB_SHIFT,
Helmut64 0:a3ea811f80f2 2597 USB_PIPEnTRE_TRENB);
Helmut64 0:a3ea811f80f2 2598 RZA_IO_RegWrite_16(&USB200.PIPE9TRE,
Helmut64 0:a3ea811f80f2 2599 1,
Helmut64 0:a3ea811f80f2 2600 USB_PIPEnTRE_TRCLR_SHIFT,
Helmut64 0:a3ea811f80f2 2601 USB_PIPEnTRE_TRCLR);
Helmut64 0:a3ea811f80f2 2602 break;
Helmut64 0:a3ea811f80f2 2603
Helmut64 0:a3ea811f80f2 2604 case USB_FUNCTION_PIPEA:
Helmut64 0:a3ea811f80f2 2605 RZA_IO_RegWrite_16(&USB200.PIPEATRE,
Helmut64 0:a3ea811f80f2 2606 0,
Helmut64 0:a3ea811f80f2 2607 USB_PIPEnTRE_TRENB_SHIFT,
Helmut64 0:a3ea811f80f2 2608 USB_PIPEnTRE_TRENB);
Helmut64 0:a3ea811f80f2 2609 RZA_IO_RegWrite_16(&USB200.PIPEATRE,
Helmut64 0:a3ea811f80f2 2610 1,
Helmut64 0:a3ea811f80f2 2611 USB_PIPEnTRE_TRCLR_SHIFT,
Helmut64 0:a3ea811f80f2 2612 USB_PIPEnTRE_TRCLR);
Helmut64 0:a3ea811f80f2 2613 break;
Helmut64 0:a3ea811f80f2 2614
Helmut64 0:a3ea811f80f2 2615 case USB_FUNCTION_PIPEB:
Helmut64 0:a3ea811f80f2 2616 RZA_IO_RegWrite_16(&USB200.PIPEBTRE,
Helmut64 0:a3ea811f80f2 2617 0,
Helmut64 0:a3ea811f80f2 2618 USB_PIPEnTRE_TRENB_SHIFT,
Helmut64 0:a3ea811f80f2 2619 USB_PIPEnTRE_TRENB);
Helmut64 0:a3ea811f80f2 2620 RZA_IO_RegWrite_16(&USB200.PIPEBTRE,
Helmut64 0:a3ea811f80f2 2621 1,
Helmut64 0:a3ea811f80f2 2622 USB_PIPEnTRE_TRCLR_SHIFT,
Helmut64 0:a3ea811f80f2 2623 USB_PIPEnTRE_TRCLR);
Helmut64 0:a3ea811f80f2 2624 break;
Helmut64 0:a3ea811f80f2 2625
Helmut64 0:a3ea811f80f2 2626 case USB_FUNCTION_PIPEC:
Helmut64 0:a3ea811f80f2 2627 RZA_IO_RegWrite_16(&USB200.PIPECTRE,
Helmut64 0:a3ea811f80f2 2628 0,
Helmut64 0:a3ea811f80f2 2629 USB_PIPEnTRE_TRENB_SHIFT,
Helmut64 0:a3ea811f80f2 2630 USB_PIPEnTRE_TRENB);
Helmut64 0:a3ea811f80f2 2631 RZA_IO_RegWrite_16(&USB200.PIPECTRE,
Helmut64 0:a3ea811f80f2 2632 1,
Helmut64 0:a3ea811f80f2 2633 USB_PIPEnTRE_TRCLR_SHIFT,
Helmut64 0:a3ea811f80f2 2634 USB_PIPEnTRE_TRCLR);
Helmut64 0:a3ea811f80f2 2635 break;
Helmut64 0:a3ea811f80f2 2636
Helmut64 0:a3ea811f80f2 2637 case USB_FUNCTION_PIPED:
Helmut64 0:a3ea811f80f2 2638 RZA_IO_RegWrite_16(&USB200.PIPEDTRE,
Helmut64 0:a3ea811f80f2 2639 0,
Helmut64 0:a3ea811f80f2 2640 USB_PIPEnTRE_TRENB_SHIFT,
Helmut64 0:a3ea811f80f2 2641 USB_PIPEnTRE_TRENB);
Helmut64 0:a3ea811f80f2 2642 RZA_IO_RegWrite_16(&USB200.PIPEDTRE,
Helmut64 0:a3ea811f80f2 2643 1,
Helmut64 0:a3ea811f80f2 2644 USB_PIPEnTRE_TRCLR_SHIFT,
Helmut64 0:a3ea811f80f2 2645 USB_PIPEnTRE_TRCLR);
Helmut64 0:a3ea811f80f2 2646 break;
Helmut64 0:a3ea811f80f2 2647
Helmut64 0:a3ea811f80f2 2648 case USB_FUNCTION_PIPEE:
Helmut64 0:a3ea811f80f2 2649 RZA_IO_RegWrite_16(&USB200.PIPEETRE,
Helmut64 0:a3ea811f80f2 2650 0,
Helmut64 0:a3ea811f80f2 2651 USB_PIPEnTRE_TRENB_SHIFT,
Helmut64 0:a3ea811f80f2 2652 USB_PIPEnTRE_TRENB);
Helmut64 0:a3ea811f80f2 2653 RZA_IO_RegWrite_16(&USB200.PIPEETRE,
Helmut64 0:a3ea811f80f2 2654 1,
Helmut64 0:a3ea811f80f2 2655 USB_PIPEnTRE_TRCLR_SHIFT,
Helmut64 0:a3ea811f80f2 2656 USB_PIPEnTRE_TRCLR);
Helmut64 0:a3ea811f80f2 2657 break;
Helmut64 0:a3ea811f80f2 2658
Helmut64 0:a3ea811f80f2 2659 case USB_FUNCTION_PIPEF:
Helmut64 0:a3ea811f80f2 2660 RZA_IO_RegWrite_16(&USB200.PIPEFTRE,
Helmut64 0:a3ea811f80f2 2661 0,
Helmut64 0:a3ea811f80f2 2662 USB_PIPEnTRE_TRENB_SHIFT,
Helmut64 0:a3ea811f80f2 2663 USB_PIPEnTRE_TRENB);
Helmut64 0:a3ea811f80f2 2664 RZA_IO_RegWrite_16(&USB200.PIPEFTRE,
Helmut64 0:a3ea811f80f2 2665 1,
Helmut64 0:a3ea811f80f2 2666 USB_PIPEnTRE_TRCLR_SHIFT,
Helmut64 0:a3ea811f80f2 2667 USB_PIPEnTRE_TRCLR);
Helmut64 0:a3ea811f80f2 2668 break;
Helmut64 0:a3ea811f80f2 2669
Helmut64 0:a3ea811f80f2 2670 default:
Helmut64 0:a3ea811f80f2 2671 break;
Helmut64 0:a3ea811f80f2 2672 }
Helmut64 0:a3ea811f80f2 2673 }
Helmut64 0:a3ea811f80f2 2674
Helmut64 0:a3ea811f80f2 2675 /*******************************************************************************
Helmut64 0:a3ea811f80f2 2676 * Function Name: usb0_function_stop_transfer
Helmut64 0:a3ea811f80f2 2677 * Description : Stops the USB transfer in the pipe specified by the argument.
Helmut64 0:a3ea811f80f2 2678 * : After stopping the USB transfer, clears the buffer allocated in
Helmut64 0:a3ea811f80f2 2679 * : the pipe.
Helmut64 0:a3ea811f80f2 2680 * : After executing this function, allocation in FIF0 becomes USB_FUNCTION_PIPE0;
Helmut64 0:a3ea811f80f2 2681 * : invalid. After executing this function, BRDY/NRDY/BEMP interrupt
Helmut64 0:a3ea811f80f2 2682 * : in the corresponding pipe becomes invalid. Sequence bit is also
Helmut64 0:a3ea811f80f2 2683 * : cleared.
Helmut64 0:a3ea811f80f2 2684 * Arguments : uint16_t pipe ; Pipe Number
Helmut64 0:a3ea811f80f2 2685 * Return Value : none
Helmut64 0:a3ea811f80f2 2686 *******************************************************************************/
Helmut64 0:a3ea811f80f2 2687 void usb0_function_stop_transfer (uint16_t pipe)
Helmut64 0:a3ea811f80f2 2688 {
Helmut64 0:a3ea811f80f2 2689 uint16_t usefifo;
Helmut64 0:a3ea811f80f2 2690 uint32_t remain;
Helmut64 0:a3ea811f80f2 2691 uint16_t fifo;
Helmut64 0:a3ea811f80f2 2692
Helmut64 0:a3ea811f80f2 2693 usb0_function_set_pid_nak(pipe);
Helmut64 0:a3ea811f80f2 2694
Helmut64 0:a3ea811f80f2 2695 usefifo = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
Helmut64 0:a3ea811f80f2 2696 switch (usefifo)
Helmut64 0:a3ea811f80f2 2697 {
Helmut64 0:a3ea811f80f2 2698 case USB_FUNCTION_D0FIFO_USE:
Helmut64 0:a3ea811f80f2 2699 usb0_function_clear_transaction_counter(pipe);
Helmut64 0:a3ea811f80f2 2700 USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR; /* Buffer Clear */
Helmut64 0:a3ea811f80f2 2701 fifo = USB_FUNCTION_D0USE;
Helmut64 0:a3ea811f80f2 2702 break;
Helmut64 0:a3ea811f80f2 2703
Helmut64 0:a3ea811f80f2 2704 case USB_FUNCTION_D1FIFO_USE:
Helmut64 0:a3ea811f80f2 2705 usb0_function_clear_transaction_counter(pipe);
Helmut64 0:a3ea811f80f2 2706 USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR; /* Buffer Clear */
Helmut64 0:a3ea811f80f2 2707 fifo = USB_FUNCTION_D1USE;
Helmut64 0:a3ea811f80f2 2708 break;
Helmut64 0:a3ea811f80f2 2709
Helmut64 0:a3ea811f80f2 2710 case USB_FUNCTION_D0FIFO_DMA:
Helmut64 0:a3ea811f80f2 2711 remain = Userdef_USB_usb0_function_stop_dma0();
Helmut64 0:a3ea811f80f2 2712 usb0_function_dma_stop_d0(pipe, remain);
Helmut64 0:a3ea811f80f2 2713 usb0_function_clear_transaction_counter(pipe);
Helmut64 0:a3ea811f80f2 2714 USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR; /* Buffer Clear */
Helmut64 0:a3ea811f80f2 2715 fifo = USB_FUNCTION_D0DMA;
Helmut64 0:a3ea811f80f2 2716 break;
Helmut64 0:a3ea811f80f2 2717
Helmut64 0:a3ea811f80f2 2718 case USB_FUNCTION_D1FIFO_DMA:
Helmut64 0:a3ea811f80f2 2719 remain = Userdef_USB_usb0_function_stop_dma1();
Helmut64 0:a3ea811f80f2 2720 usb0_function_dma_stop_d1(pipe, remain);
Helmut64 0:a3ea811f80f2 2721 usb0_function_clear_transaction_counter(pipe);
Helmut64 0:a3ea811f80f2 2722 USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR; /* Buffer Clear */
Helmut64 0:a3ea811f80f2 2723 fifo = USB_FUNCTION_D1DMA;
Helmut64 0:a3ea811f80f2 2724 break;
Helmut64 0:a3ea811f80f2 2725
Helmut64 0:a3ea811f80f2 2726 default:
Helmut64 0:a3ea811f80f2 2727 usb0_function_clear_transaction_counter(pipe);
Helmut64 0:a3ea811f80f2 2728 USB200.CFIFOCTR = USB_FUNCTION_BITBCLR; /* Buffer Clear */
Helmut64 0:a3ea811f80f2 2729 fifo = USB_FUNCTION_CUSE;
Helmut64 0:a3ea811f80f2 2730 break;
Helmut64 0:a3ea811f80f2 2731 }
Helmut64 0:a3ea811f80f2 2732
Helmut64 0:a3ea811f80f2 2733 usb0_function_set_curpipe(USB_FUNCTION_PIPE0, fifo, DEVDRV_USBF_NO, USB_FUNCTION_BITMBW_16);
Helmut64 0:a3ea811f80f2 2734
Helmut64 0:a3ea811f80f2 2735 /* Interrupt of pipe set is disabled */
Helmut64 0:a3ea811f80f2 2736 usb0_function_disable_brdy_int(pipe);
Helmut64 0:a3ea811f80f2 2737 usb0_function_disable_nrdy_int(pipe);
Helmut64 0:a3ea811f80f2 2738 usb0_function_disable_bemp_int(pipe);
Helmut64 0:a3ea811f80f2 2739
Helmut64 0:a3ea811f80f2 2740 usb0_function_aclrm(pipe);
Helmut64 0:a3ea811f80f2 2741 usb0_function_set_csclr(pipe);
Helmut64 0:a3ea811f80f2 2742
Helmut64 0:a3ea811f80f2 2743 if ( g_usb0_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_WAIT )
Helmut64 0:a3ea811f80f2 2744 {
Helmut64 0:a3ea811f80f2 2745 g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_NORES;
Helmut64 0:a3ea811f80f2 2746 }
Helmut64 0:a3ea811f80f2 2747
Helmut64 0:a3ea811f80f2 2748 }
Helmut64 0:a3ea811f80f2 2749
Helmut64 0:a3ea811f80f2 2750 /*******************************************************************************
Helmut64 0:a3ea811f80f2 2751 * Function Name: usb0_function_set_dfacc_d0
Helmut64 0:a3ea811f80f2 2752 * Description : Sets the DFACC setting value in D0FIFO using the transfer size.
Helmut64 0:a3ea811f80f2 2753 * Arguments : uint16_t mbw ; MBW
Helmut64 0:a3ea811f80f2 2754 * : uint16_t count ; data count
Helmut64 0:a3ea811f80f2 2755 * Return Value : DFACC Access mode
Helmut64 0:a3ea811f80f2 2756 *******************************************************************************/
Helmut64 0:a3ea811f80f2 2757 static uint16_t usb0_function_set_dfacc_d0 (uint16_t mbw, uint32_t count)
Helmut64 0:a3ea811f80f2 2758 {
Helmut64 0:a3ea811f80f2 2759 uint16_t dfacc = 0;
Helmut64 0:a3ea811f80f2 2760
Helmut64 0:a3ea811f80f2 2761 #ifndef __USB_FUNCTION_DF_ACC_ENABLE__
Helmut64 0:a3ea811f80f2 2762 RZA_IO_RegWrite_16(&USB200.D0FBCFG,
Helmut64 0:a3ea811f80f2 2763 0,
Helmut64 0:a3ea811f80f2 2764 USB_DnFBCFG_DFACC_SHIFT,
Helmut64 0:a3ea811f80f2 2765 USB_DnFBCFG_DFACC);
Helmut64 0:a3ea811f80f2 2766 RZA_IO_RegWrite_16(&USB200.D0FBCFG,
Helmut64 0:a3ea811f80f2 2767 0,
Helmut64 0:a3ea811f80f2 2768 USB_DnFBCFG_TENDE_SHIFT,
Helmut64 0:a3ea811f80f2 2769 USB_DnFBCFG_TENDE);
Helmut64 0:a3ea811f80f2 2770 dfacc = 0;
Helmut64 0:a3ea811f80f2 2771 #else
Helmut64 0:a3ea811f80f2 2772 if (mbw == USB_FUNCTION_BITMBW_32)
Helmut64 0:a3ea811f80f2 2773 {
Helmut64 0:a3ea811f80f2 2774 if ((count % 32) == 0)
Helmut64 0:a3ea811f80f2 2775 {
Helmut64 0:a3ea811f80f2 2776 /* 32byte transfer */
Helmut64 0:a3ea811f80f2 2777 RZA_IO_RegWrite_16(&USB200.D0FBCFG,
Helmut64 0:a3ea811f80f2 2778 2,
Helmut64 0:a3ea811f80f2 2779 USB_DnFBCFG_DFACC_SHIFT,
Helmut64 0:a3ea811f80f2 2780 USB_DnFBCFG_DFACC);
Helmut64 0:a3ea811f80f2 2781 RZA_IO_RegWrite_16(&USB200.D0FBCFG,
Helmut64 0:a3ea811f80f2 2782 0,
Helmut64 0:a3ea811f80f2 2783 USB_DnFBCFG_TENDE_SHIFT,
Helmut64 0:a3ea811f80f2 2784 USB_DnFBCFG_TENDE);
Helmut64 0:a3ea811f80f2 2785 dfacc = 2;
Helmut64 0:a3ea811f80f2 2786 }
Helmut64 0:a3ea811f80f2 2787 else if ((count % 16) == 0)
Helmut64 0:a3ea811f80f2 2788 {
Helmut64 0:a3ea811f80f2 2789 /* 16byte transfer */
Helmut64 0:a3ea811f80f2 2790 RZA_IO_RegWrite_16(&USB200.D0FBCFG,
Helmut64 0:a3ea811f80f2 2791 1,
Helmut64 0:a3ea811f80f2 2792 USB_DnFBCFG_DFACC_SHIFT,
Helmut64 0:a3ea811f80f2 2793 USB_DnFBCFG_DFACC);
Helmut64 0:a3ea811f80f2 2794 RZA_IO_RegWrite_16(&USB200.D0FBCFG,
Helmut64 0:a3ea811f80f2 2795 0,
Helmut64 0:a3ea811f80f2 2796 USB_DnFBCFG_TENDE_SHIFT,
Helmut64 0:a3ea811f80f2 2797 USB_DnFBCFG_TENDE);
Helmut64 0:a3ea811f80f2 2798 dfacc = 1;
Helmut64 0:a3ea811f80f2 2799 }
Helmut64 0:a3ea811f80f2 2800 else
Helmut64 0:a3ea811f80f2 2801 {
Helmut64 0:a3ea811f80f2 2802 RZA_IO_RegWrite_16(&USB200.D0FBCFG,
Helmut64 0:a3ea811f80f2 2803 0,
Helmut64 0:a3ea811f80f2 2804 USB_DnFBCFG_DFACC_SHIFT,
Helmut64 0:a3ea811f80f2 2805 USB_DnFBCFG_DFACC);
Helmut64 0:a3ea811f80f2 2806 RZA_IO_RegWrite_16(&USB200.D0FBCFG,
Helmut64 0:a3ea811f80f2 2807 0,
Helmut64 0:a3ea811f80f2 2808 USB_DnFBCFG_TENDE_SHIFT,
Helmut64 0:a3ea811f80f2 2809 USB_DnFBCFG_TENDE);
Helmut64 0:a3ea811f80f2 2810 dfacc = 0;
Helmut64 0:a3ea811f80f2 2811 }
Helmut64 0:a3ea811f80f2 2812 }
Helmut64 0:a3ea811f80f2 2813 else if (mbw == USB_FUNCTION_BITMBW_16)
Helmut64 0:a3ea811f80f2 2814 {
Helmut64 0:a3ea811f80f2 2815 RZA_IO_RegWrite_16(&USB200.D0FBCFG,
Helmut64 0:a3ea811f80f2 2816 0,
Helmut64 0:a3ea811f80f2 2817 USB_DnFBCFG_DFACC_SHIFT,
Helmut64 0:a3ea811f80f2 2818 USB_DnFBCFG_DFACC);
Helmut64 0:a3ea811f80f2 2819 RZA_IO_RegWrite_16(&USB200.D0FBCFG,
Helmut64 0:a3ea811f80f2 2820 0,
Helmut64 0:a3ea811f80f2 2821 USB_DnFBCFG_TENDE_SHIFT,
Helmut64 0:a3ea811f80f2 2822 USB_DnFBCFG_TENDE);
Helmut64 0:a3ea811f80f2 2823 dfacc = 0;
Helmut64 0:a3ea811f80f2 2824 }
Helmut64 0:a3ea811f80f2 2825 else
Helmut64 0:a3ea811f80f2 2826 {
Helmut64 0:a3ea811f80f2 2827 RZA_IO_RegWrite_16(&USB200.D0FBCFG,
Helmut64 0:a3ea811f80f2 2828 0,
Helmut64 0:a3ea811f80f2 2829 USB_DnFBCFG_DFACC_SHIFT,
Helmut64 0:a3ea811f80f2 2830 USB_DnFBCFG_DFACC);
Helmut64 0:a3ea811f80f2 2831 RZA_IO_RegWrite_16(&USB200.D0FBCFG,
Helmut64 0:a3ea811f80f2 2832 0,
Helmut64 0:a3ea811f80f2 2833 USB_DnFBCFG_TENDE_SHIFT,
Helmut64 0:a3ea811f80f2 2834 USB_DnFBCFG_TENDE);
Helmut64 0:a3ea811f80f2 2835 dfacc = 0;
Helmut64 0:a3ea811f80f2 2836 }
Helmut64 0:a3ea811f80f2 2837 #endif
Helmut64 0:a3ea811f80f2 2838 return dfacc;
Helmut64 0:a3ea811f80f2 2839 }
Helmut64 0:a3ea811f80f2 2840
Helmut64 0:a3ea811f80f2 2841 /*******************************************************************************
Helmut64 0:a3ea811f80f2 2842 * Function Name: usb0_function_set_dfacc_d1
Helmut64 0:a3ea811f80f2 2843 * Description : Set the DFACC setting value in D1FIFO using the transfer size.
Helmut64 0:a3ea811f80f2 2844 * Arguments : uint16_t mbw ; MBW
Helmut64 0:a3ea811f80f2 2845 * : uint16_t count ; data count
Helmut64 0:a3ea811f80f2 2846 * Return Value : DFACC Access mode
Helmut64 0:a3ea811f80f2 2847 *******************************************************************************/
Helmut64 0:a3ea811f80f2 2848 static uint16_t usb0_function_set_dfacc_d1 (uint16_t mbw, uint32_t count)
Helmut64 0:a3ea811f80f2 2849 {
Helmut64 0:a3ea811f80f2 2850 uint16_t dfacc = 0;
Helmut64 0:a3ea811f80f2 2851
Helmut64 0:a3ea811f80f2 2852 #ifndef __USB_FUNCTION_DF_ACC_ENABLE__
Helmut64 0:a3ea811f80f2 2853 RZA_IO_RegWrite_16(&USB200.D1FBCFG,
Helmut64 0:a3ea811f80f2 2854 0,
Helmut64 0:a3ea811f80f2 2855 USB_DnFBCFG_DFACC_SHIFT,
Helmut64 0:a3ea811f80f2 2856 USB_DnFBCFG_DFACC);
Helmut64 0:a3ea811f80f2 2857 RZA_IO_RegWrite_16(&USB200.D1FBCFG,
Helmut64 0:a3ea811f80f2 2858 0,
Helmut64 0:a3ea811f80f2 2859 USB_DnFBCFG_TENDE_SHIFT,
Helmut64 0:a3ea811f80f2 2860 USB_DnFBCFG_TENDE);
Helmut64 0:a3ea811f80f2 2861 dfacc = 0;
Helmut64 0:a3ea811f80f2 2862 #else
Helmut64 0:a3ea811f80f2 2863 if (mbw == USB_FUNCTION_BITMBW_32)
Helmut64 0:a3ea811f80f2 2864 {
Helmut64 0:a3ea811f80f2 2865 if ((count % 32) == 0)
Helmut64 0:a3ea811f80f2 2866 {
Helmut64 0:a3ea811f80f2 2867 /* 32byte transfer */
Helmut64 0:a3ea811f80f2 2868 RZA_IO_RegWrite_16(&USB200.D1FBCFG,
Helmut64 0:a3ea811f80f2 2869 2,
Helmut64 0:a3ea811f80f2 2870 USB_DnFBCFG_DFACC_SHIFT,
Helmut64 0:a3ea811f80f2 2871 USB_DnFBCFG_DFACC);
Helmut64 0:a3ea811f80f2 2872 RZA_IO_RegWrite_16(&USB200.D1FBCFG,
Helmut64 0:a3ea811f80f2 2873 0,
Helmut64 0:a3ea811f80f2 2874 USB_DnFBCFG_TENDE_SHIFT,
Helmut64 0:a3ea811f80f2 2875 USB_DnFBCFG_TENDE);
Helmut64 0:a3ea811f80f2 2876 dfacc = 2;
Helmut64 0:a3ea811f80f2 2877 }
Helmut64 0:a3ea811f80f2 2878 else if ((count % 16) == 0)
Helmut64 0:a3ea811f80f2 2879 {
Helmut64 0:a3ea811f80f2 2880 /* 16byte transfer */
Helmut64 0:a3ea811f80f2 2881 RZA_IO_RegWrite_16(&USB200.D1FBCFG,
Helmut64 0:a3ea811f80f2 2882 1,
Helmut64 0:a3ea811f80f2 2883 USB_DnFBCFG_DFACC_SHIFT,
Helmut64 0:a3ea811f80f2 2884 USB_DnFBCFG_DFACC);
Helmut64 0:a3ea811f80f2 2885 RZA_IO_RegWrite_16(&USB200.D1FBCFG,
Helmut64 0:a3ea811f80f2 2886 0,
Helmut64 0:a3ea811f80f2 2887 USB_DnFBCFG_TENDE_SHIFT,
Helmut64 0:a3ea811f80f2 2888 USB_DnFBCFG_TENDE);
Helmut64 0:a3ea811f80f2 2889 dfacc = 1;
Helmut64 0:a3ea811f80f2 2890 }
Helmut64 0:a3ea811f80f2 2891 else
Helmut64 0:a3ea811f80f2 2892 {
Helmut64 0:a3ea811f80f2 2893 RZA_IO_RegWrite_16(&USB200.D1FBCFG,
Helmut64 0:a3ea811f80f2 2894 0,
Helmut64 0:a3ea811f80f2 2895 USB_DnFBCFG_DFACC_SHIFT,
Helmut64 0:a3ea811f80f2 2896 USB_DnFBCFG_DFACC);
Helmut64 0:a3ea811f80f2 2897 RZA_IO_RegWrite_16(&USB200.D1FBCFG,
Helmut64 0:a3ea811f80f2 2898 0,
Helmut64 0:a3ea811f80f2 2899 USB_DnFBCFG_TENDE_SHIFT,
Helmut64 0:a3ea811f80f2 2900 USB_DnFBCFG_TENDE);
Helmut64 0:a3ea811f80f2 2901 dfacc = 0;
Helmut64 0:a3ea811f80f2 2902 }
Helmut64 0:a3ea811f80f2 2903 }
Helmut64 0:a3ea811f80f2 2904 else if (mbw == USB_FUNCTION_BITMBW_16)
Helmut64 0:a3ea811f80f2 2905 {
Helmut64 0:a3ea811f80f2 2906 RZA_IO_RegWrite_16(&USB200.D1FBCFG,
Helmut64 0:a3ea811f80f2 2907 0,
Helmut64 0:a3ea811f80f2 2908 USB_DnFBCFG_DFACC_SHIFT,
Helmut64 0:a3ea811f80f2 2909 USB_DnFBCFG_DFACC);
Helmut64 0:a3ea811f80f2 2910 RZA_IO_RegWrite_16(&USB200.D1FBCFG,
Helmut64 0:a3ea811f80f2 2911 0,
Helmut64 0:a3ea811f80f2 2912 USB_DnFBCFG_TENDE_SHIFT,
Helmut64 0:a3ea811f80f2 2913 USB_DnFBCFG_TENDE);
Helmut64 0:a3ea811f80f2 2914 dfacc = 0;
Helmut64 0:a3ea811f80f2 2915 }
Helmut64 0:a3ea811f80f2 2916 else
Helmut64 0:a3ea811f80f2 2917 {
Helmut64 0:a3ea811f80f2 2918 RZA_IO_RegWrite_16(&USB200.D1FBCFG,
Helmut64 0:a3ea811f80f2 2919 0,
Helmut64 0:a3ea811f80f2 2920 USB_DnFBCFG_DFACC_SHIFT,
Helmut64 0:a3ea811f80f2 2921 USB_DnFBCFG_DFACC);
Helmut64 0:a3ea811f80f2 2922 RZA_IO_RegWrite_16(&USB200.D1FBCFG,
Helmut64 0:a3ea811f80f2 2923 0,
Helmut64 0:a3ea811f80f2 2924 USB_DnFBCFG_TENDE_SHIFT,
Helmut64 0:a3ea811f80f2 2925 USB_DnFBCFG_TENDE);
Helmut64 0:a3ea811f80f2 2926 dfacc = 0;
Helmut64 0:a3ea811f80f2 2927 }
Helmut64 0:a3ea811f80f2 2928 #endif
Helmut64 0:a3ea811f80f2 2929
Helmut64 0:a3ea811f80f2 2930 return dfacc;
Helmut64 0:a3ea811f80f2 2931 }
Helmut64 0:a3ea811f80f2 2932
Helmut64 0:a3ea811f80f2 2933 /* End of File */