USBDevice with MAX32620HSP platform support

Fork of USBDevice by mbed official

Committer:
mbed_official
Date:
Fri Apr 29 01:16:25 2016 +0100
Revision:
62:c1549af978d6
Synchronized with git revision fe9720f24b1adc71ab6962506ec51290f6afd270

Full URL: https://github.com/mbedmicro/mbed/commit/fe9720f24b1adc71ab6962506ec51290f6afd270/

[Renesas RZ/A1H] Enable asynchronous communications

Who changed what in which revision?

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