USBHost library. NOTE: This library is only officially supported on the LPC1768 platform. For more information, please see the handbook page.

Dependencies:   FATFileSystem mbed-rtos

Dependents:   BTstack WallbotWii SD to Flash Data Transfer USBHost-MSD_HelloWorld ... more

Legacy Warning

This is an mbed 2 library. To learn more about mbed OS 5, visit the docs.

Pull requests against this repository are no longer supported. Please raise against mbed OS 5 as documented above.

Committer:
mbed_official
Date:
Tue Mar 31 16:15:42 2015 +0100
Revision:
29:d3b77affed28
Synchronized with git revision 251f3f8b55a4dc98b831c80e032464ed45cce309

Full URL: https://github.com/mbedmicro/mbed/commit/251f3f8b55a4dc98b831c80e032464ed45cce309/

[RZ/A1H]Add some function(USB 2port, NVIC wrapper) and modify some settings(OS, Terminal).

Who changed what in which revision?

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