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:
Fri Apr 29 01:16:38 2016 +0100
Revision:
35:f72ccc6892ee
Synchronized with git revision fe9720f24b1adc71ab6962506ec51290f6afd270

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

[Renesas RZ/A1H] Enable asynchronous communications

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 35:f72ccc6892ee 1 /*******************************************************************************
mbed_official 35:f72ccc6892ee 2 * DISCLAIMER
mbed_official 35:f72ccc6892ee 3 * This software is supplied by Renesas Electronics Corporation and is only
mbed_official 35:f72ccc6892ee 4 * intended for use with Renesas products. No other uses are authorized. This
mbed_official 35:f72ccc6892ee 5 * software is owned by Renesas Electronics Corporation and is protected under
mbed_official 35:f72ccc6892ee 6 * all applicable laws, including copyright laws.
mbed_official 35:f72ccc6892ee 7 * THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
mbed_official 35:f72ccc6892ee 8 * THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
mbed_official 35:f72ccc6892ee 9 * LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
mbed_official 35:f72ccc6892ee 10 * AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
mbed_official 35:f72ccc6892ee 11 * TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
mbed_official 35:f72ccc6892ee 12 * ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
mbed_official 35:f72ccc6892ee 13 * FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
mbed_official 35:f72ccc6892ee 14 * ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
mbed_official 35:f72ccc6892ee 15 * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
mbed_official 35:f72ccc6892ee 16 * Renesas reserves the right, without notice, to make changes to this software
mbed_official 35:f72ccc6892ee 17 * and to discontinue the availability of this software. By using this software,
mbed_official 35:f72ccc6892ee 18 * you agree to the additional terms and conditions found by accessing the
mbed_official 35:f72ccc6892ee 19 * following link:
mbed_official 35:f72ccc6892ee 20 * http://www.renesas.com/disclaimer
mbed_official 35:f72ccc6892ee 21 * Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
mbed_official 35:f72ccc6892ee 22 *******************************************************************************/
mbed_official 35:f72ccc6892ee 23 /*******************************************************************************
mbed_official 35:f72ccc6892ee 24 * File Name : usb0_host_userdef.c
mbed_official 35:f72ccc6892ee 25 * $Rev: 1116 $
mbed_official 35:f72ccc6892ee 26 * $Date:: 2014-07-09 16:29:19 +0900#$
mbed_official 35:f72ccc6892ee 27 * Device(s) : RZ/A1H
mbed_official 35:f72ccc6892ee 28 * Tool-Chain :
mbed_official 35:f72ccc6892ee 29 * OS : None
mbed_official 35:f72ccc6892ee 30 * H/W Platform :
mbed_official 35:f72ccc6892ee 31 * Description : RZ/A1H R7S72100 USB Sample Program
mbed_official 35:f72ccc6892ee 32 * Operation :
mbed_official 35:f72ccc6892ee 33 * Limitations :
mbed_official 35:f72ccc6892ee 34 *******************************************************************************/
mbed_official 35:f72ccc6892ee 35
mbed_official 35:f72ccc6892ee 36
mbed_official 35:f72ccc6892ee 37 /*******************************************************************************
mbed_official 35:f72ccc6892ee 38 Includes <System Includes> , "Project Includes"
mbed_official 35:f72ccc6892ee 39 *******************************************************************************/
mbed_official 35:f72ccc6892ee 40 #include <stdio.h>
mbed_official 35:f72ccc6892ee 41 #include "cmsis_os.h"
mbed_official 35:f72ccc6892ee 42 #include "r_typedefs.h"
mbed_official 35:f72ccc6892ee 43 #include "iodefine.h"
mbed_official 35:f72ccc6892ee 44 #include "devdrv_usb_host_api.h"
mbed_official 35:f72ccc6892ee 45 #include "usb0_host.h"
mbed_official 35:f72ccc6892ee 46 #include "VKRZA1H.h" /* INTC Driver Header */
mbed_official 35:f72ccc6892ee 47 #include "usb0_host_dmacdrv.h"
mbed_official 35:f72ccc6892ee 48 #include "ohci_wrapp_RZ_A1_local.h"
mbed_official 35:f72ccc6892ee 49
mbed_official 35:f72ccc6892ee 50
mbed_official 35:f72ccc6892ee 51 /*******************************************************************************
mbed_official 35:f72ccc6892ee 52 Typedef definitions
mbed_official 35:f72ccc6892ee 53 *******************************************************************************/
mbed_official 35:f72ccc6892ee 54
mbed_official 35:f72ccc6892ee 55
mbed_official 35:f72ccc6892ee 56 /*******************************************************************************
mbed_official 35:f72ccc6892ee 57 Macro definitions
mbed_official 35:f72ccc6892ee 58 *******************************************************************************/
mbed_official 35:f72ccc6892ee 59 #define DUMMY_ACCESS OSTM0CNT
mbed_official 35:f72ccc6892ee 60
mbed_official 35:f72ccc6892ee 61 /* #define CACHE_WRITEBACK */
mbed_official 35:f72ccc6892ee 62
mbed_official 35:f72ccc6892ee 63
mbed_official 35:f72ccc6892ee 64 /*******************************************************************************
mbed_official 35:f72ccc6892ee 65 Imported global variables and functions (from other files)
mbed_official 35:f72ccc6892ee 66 *******************************************************************************/
mbed_official 35:f72ccc6892ee 67 extern int32_t io_cwb(unsigned long start, unsigned long end);
mbed_official 35:f72ccc6892ee 68
mbed_official 35:f72ccc6892ee 69
mbed_official 35:f72ccc6892ee 70 /*******************************************************************************
mbed_official 35:f72ccc6892ee 71 Exported global variables and functions (to be accessed by other files)
mbed_official 35:f72ccc6892ee 72 *******************************************************************************/
mbed_official 35:f72ccc6892ee 73 static void usb0_host_enable_dmac0(uint32_t src, uint32_t dst, uint32_t count,
mbed_official 35:f72ccc6892ee 74 uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc);
mbed_official 35:f72ccc6892ee 75 static void usb0_host_enable_dmac1(uint32_t src, uint32_t dst, uint32_t count,
mbed_official 35:f72ccc6892ee 76 uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc);
mbed_official 35:f72ccc6892ee 77 static void Userdef_USB_usb0_host_delay_10us_2(void);
mbed_official 35:f72ccc6892ee 78
mbed_official 35:f72ccc6892ee 79
mbed_official 35:f72ccc6892ee 80 /*******************************************************************************
mbed_official 35:f72ccc6892ee 81 Private global variables and functions
mbed_official 35:f72ccc6892ee 82 *******************************************************************************/
mbed_official 35:f72ccc6892ee 83
mbed_official 35:f72ccc6892ee 84
mbed_official 35:f72ccc6892ee 85 /*******************************************************************************
mbed_official 35:f72ccc6892ee 86 * Function Name: Userdef_USB_usb0_host_d0fifo_dmaintid
mbed_official 35:f72ccc6892ee 87 * Description : get D0FIFO DMA Interrupt ID
mbed_official 35:f72ccc6892ee 88 * Arguments : none
mbed_official 35:f72ccc6892ee 89 * Return Value : D0FIFO DMA Interrupt ID
mbed_official 35:f72ccc6892ee 90 *******************************************************************************/
mbed_official 35:f72ccc6892ee 91 uint16_t Userdef_USB_usb0_host_d0fifo_dmaintid (void)
mbed_official 35:f72ccc6892ee 92 {
mbed_official 35:f72ccc6892ee 93 #if(1) /* ohci_wrapp */
mbed_official 35:f72ccc6892ee 94 return 0xFFFF;
mbed_official 35:f72ccc6892ee 95 #else
mbed_official 35:f72ccc6892ee 96 return DMAINT1_IRQn;
mbed_official 35:f72ccc6892ee 97 #endif
mbed_official 35:f72ccc6892ee 98 }
mbed_official 35:f72ccc6892ee 99
mbed_official 35:f72ccc6892ee 100 /*******************************************************************************
mbed_official 35:f72ccc6892ee 101 * Function Name: Userdef_USB_usb0_host_d1fifo_dmaintid
mbed_official 35:f72ccc6892ee 102 * Description : get D1FIFO DMA Interrupt ID
mbed_official 35:f72ccc6892ee 103 * Arguments : none
mbed_official 35:f72ccc6892ee 104 * Return Value : D1FIFO DMA Interrupt ID
mbed_official 35:f72ccc6892ee 105 *******************************************************************************/
mbed_official 35:f72ccc6892ee 106 uint16_t Userdef_USB_usb0_host_d1fifo_dmaintid (void)
mbed_official 35:f72ccc6892ee 107 {
mbed_official 35:f72ccc6892ee 108 #if(1) /* ohci_wrapp */
mbed_official 35:f72ccc6892ee 109 return 0xFFFF;
mbed_official 35:f72ccc6892ee 110 #else
mbed_official 35:f72ccc6892ee 111 return DMAINT2_IRQn;
mbed_official 35:f72ccc6892ee 112 #endif
mbed_official 35:f72ccc6892ee 113 }
mbed_official 35:f72ccc6892ee 114
mbed_official 35:f72ccc6892ee 115 /*******************************************************************************
mbed_official 35:f72ccc6892ee 116 * Function Name: Userdef_USB_usb0_host_attach
mbed_official 35:f72ccc6892ee 117 * Description : Wait for the software of 1ms.
mbed_official 35:f72ccc6892ee 118 * : Alter this function according to the user's system.
mbed_official 35:f72ccc6892ee 119 * Arguments : none
mbed_official 35:f72ccc6892ee 120 * Return Value : none
mbed_official 35:f72ccc6892ee 121 *******************************************************************************/
mbed_official 35:f72ccc6892ee 122 void Userdef_USB_usb0_host_attach (void)
mbed_official 35:f72ccc6892ee 123 {
mbed_official 35:f72ccc6892ee 124 // printf("\n");
mbed_official 35:f72ccc6892ee 125 // printf("channel 0 attach device\n");
mbed_official 35:f72ccc6892ee 126 // printf("\n");
mbed_official 35:f72ccc6892ee 127 ohciwrapp_loc_Connect(1);
mbed_official 35:f72ccc6892ee 128 }
mbed_official 35:f72ccc6892ee 129
mbed_official 35:f72ccc6892ee 130 /*******************************************************************************
mbed_official 35:f72ccc6892ee 131 * Function Name: Userdef_USB_usb0_host_detach
mbed_official 35:f72ccc6892ee 132 * Description : Wait for the software of 1ms.
mbed_official 35:f72ccc6892ee 133 * : Alter this function according to the user's system.
mbed_official 35:f72ccc6892ee 134 * Arguments : none
mbed_official 35:f72ccc6892ee 135 * Return Value : none
mbed_official 35:f72ccc6892ee 136 *******************************************************************************/
mbed_official 35:f72ccc6892ee 137 void Userdef_USB_usb0_host_detach (void)
mbed_official 35:f72ccc6892ee 138 {
mbed_official 35:f72ccc6892ee 139 // printf("\n");
mbed_official 35:f72ccc6892ee 140 // printf("channel 0 detach device\n");
mbed_official 35:f72ccc6892ee 141 // printf("\n");
mbed_official 35:f72ccc6892ee 142 ohciwrapp_loc_Connect(0);
mbed_official 35:f72ccc6892ee 143 }
mbed_official 35:f72ccc6892ee 144
mbed_official 35:f72ccc6892ee 145 /*******************************************************************************
mbed_official 35:f72ccc6892ee 146 * Function Name: Userdef_USB_usb0_host_delay_1ms
mbed_official 35:f72ccc6892ee 147 * Description : Wait for the software of 1ms.
mbed_official 35:f72ccc6892ee 148 * : Alter this function according to the user's system.
mbed_official 35:f72ccc6892ee 149 * Arguments : none
mbed_official 35:f72ccc6892ee 150 * Return Value : none
mbed_official 35:f72ccc6892ee 151 *******************************************************************************/
mbed_official 35:f72ccc6892ee 152 void Userdef_USB_usb0_host_delay_1ms (void)
mbed_official 35:f72ccc6892ee 153 {
mbed_official 35:f72ccc6892ee 154 osDelay(1);
mbed_official 35:f72ccc6892ee 155 }
mbed_official 35:f72ccc6892ee 156
mbed_official 35:f72ccc6892ee 157 /*******************************************************************************
mbed_official 35:f72ccc6892ee 158 * Function Name: Userdef_USB_usb0_host_delay_xms
mbed_official 35:f72ccc6892ee 159 * Description : Wait for the software in the period of time specified by the
mbed_official 35:f72ccc6892ee 160 * : argument.
mbed_official 35:f72ccc6892ee 161 * : Alter this function according to the user's system.
mbed_official 35:f72ccc6892ee 162 * Arguments : uint32_t msec ; Wait Time (msec)
mbed_official 35:f72ccc6892ee 163 * Return Value : none
mbed_official 35:f72ccc6892ee 164 *******************************************************************************/
mbed_official 35:f72ccc6892ee 165 void Userdef_USB_usb0_host_delay_xms (uint32_t msec)
mbed_official 35:f72ccc6892ee 166 {
mbed_official 35:f72ccc6892ee 167 osDelay(msec);
mbed_official 35:f72ccc6892ee 168 }
mbed_official 35:f72ccc6892ee 169
mbed_official 35:f72ccc6892ee 170 /*******************************************************************************
mbed_official 35:f72ccc6892ee 171 * Function Name: Userdef_USB_usb0_host_delay_10us
mbed_official 35:f72ccc6892ee 172 * Description : Waits for software for the period specified by the argument.
mbed_official 35:f72ccc6892ee 173 * : Alter this function according to the user's system.
mbed_official 35:f72ccc6892ee 174 * Arguments : uint32_t usec ; Wait Time(x 10usec)
mbed_official 35:f72ccc6892ee 175 * Return Value : none
mbed_official 35:f72ccc6892ee 176 *******************************************************************************/
mbed_official 35:f72ccc6892ee 177 void Userdef_USB_usb0_host_delay_10us (uint32_t usec)
mbed_official 35:f72ccc6892ee 178 {
mbed_official 35:f72ccc6892ee 179 volatile int i;
mbed_official 35:f72ccc6892ee 180
mbed_official 35:f72ccc6892ee 181 /* Wait 10us (Please change for your MCU) */
mbed_official 35:f72ccc6892ee 182 for (i = 0; i < usec; ++i)
mbed_official 35:f72ccc6892ee 183 {
mbed_official 35:f72ccc6892ee 184 Userdef_USB_usb0_host_delay_10us_2();
mbed_official 35:f72ccc6892ee 185 }
mbed_official 35:f72ccc6892ee 186 }
mbed_official 35:f72ccc6892ee 187
mbed_official 35:f72ccc6892ee 188 /*******************************************************************************
mbed_official 35:f72ccc6892ee 189 * Function Name: Userdef_USB_usb0_host_delay_10us_2
mbed_official 35:f72ccc6892ee 190 * Description : Waits for software for the period specified by the argument.
mbed_official 35:f72ccc6892ee 191 * : Alter this function according to the user's system.
mbed_official 35:f72ccc6892ee 192 * Arguments : none
mbed_official 35:f72ccc6892ee 193 * Return Value : none
mbed_official 35:f72ccc6892ee 194 *******************************************************************************/
mbed_official 35:f72ccc6892ee 195 static void Userdef_USB_usb0_host_delay_10us_2 (void)
mbed_official 35:f72ccc6892ee 196 {
mbed_official 35:f72ccc6892ee 197 volatile int i;
mbed_official 35:f72ccc6892ee 198 volatile unsigned long tmp;
mbed_official 35:f72ccc6892ee 199
mbed_official 35:f72ccc6892ee 200 /* Wait 1us (Please change for your MCU) */
mbed_official 35:f72ccc6892ee 201 for (i = 0; i < 14; ++i)
mbed_official 35:f72ccc6892ee 202 {
mbed_official 35:f72ccc6892ee 203 tmp = DUMMY_ACCESS;
mbed_official 35:f72ccc6892ee 204 }
mbed_official 35:f72ccc6892ee 205 }
mbed_official 35:f72ccc6892ee 206
mbed_official 35:f72ccc6892ee 207 /*******************************************************************************
mbed_official 35:f72ccc6892ee 208 * Function Name: Userdef_USB_usb0_host_delay_500ns
mbed_official 35:f72ccc6892ee 209 * Description : Wait for software for 500ns.
mbed_official 35:f72ccc6892ee 210 * : Alter this function according to the user's system.
mbed_official 35:f72ccc6892ee 211 * Arguments : none
mbed_official 35:f72ccc6892ee 212 * Return Value : none
mbed_official 35:f72ccc6892ee 213 *******************************************************************************/
mbed_official 35:f72ccc6892ee 214 void Userdef_USB_usb0_host_delay_500ns (void)
mbed_official 35:f72ccc6892ee 215 {
mbed_official 35:f72ccc6892ee 216 volatile int i;
mbed_official 35:f72ccc6892ee 217 volatile unsigned long tmp;
mbed_official 35:f72ccc6892ee 218
mbed_official 35:f72ccc6892ee 219 /* Wait 500ns (Please change for your MCU) */
mbed_official 35:f72ccc6892ee 220 /* Wait 500ns I clock 266MHz */
mbed_official 35:f72ccc6892ee 221 tmp = DUMMY_ACCESS;
mbed_official 35:f72ccc6892ee 222 }
mbed_official 35:f72ccc6892ee 223
mbed_official 35:f72ccc6892ee 224 /*******************************************************************************
mbed_official 35:f72ccc6892ee 225 * Function Name: Userdef_USB_usb0_host_start_dma
mbed_official 35:f72ccc6892ee 226 * Description : Enables DMA transfer on the information specified by the argument.
mbed_official 35:f72ccc6892ee 227 * : Set DMAC register by this function to enable DMA transfer.
mbed_official 35:f72ccc6892ee 228 * : After executing this function, USB module is set to start DMA
mbed_official 35:f72ccc6892ee 229 * : transfer. DMA transfer should not wait for DMA transfer complete.
mbed_official 35:f72ccc6892ee 230 * Arguments : USB_HOST_DMA_t *dma : DMA parameter
mbed_official 35:f72ccc6892ee 231 * : typedef struct{
mbed_official 35:f72ccc6892ee 232 * : uint32_t fifo; FIFO for using
mbed_official 35:f72ccc6892ee 233 * : uint32_t buffer; Start address of transfer source/destination
mbed_official 35:f72ccc6892ee 234 * : uint32_t bytes; Transfer size(Byte)
mbed_official 35:f72ccc6892ee 235 * : uint32_t dir; Transfer direction(0:Buffer->FIFO, 1:FIFO->Buffer)
mbed_official 35:f72ccc6892ee 236 * : uint32_t size; DMA transfer size
mbed_official 35:f72ccc6892ee 237 * : } USB_HOST_DMA_t;
mbed_official 35:f72ccc6892ee 238 * : uint16_t dfacc ; 0 : cycle steal mode
mbed_official 35:f72ccc6892ee 239 * : 1 : 16byte continuous mode
mbed_official 35:f72ccc6892ee 240 * : 2 : 32byte continuous mode
mbed_official 35:f72ccc6892ee 241 * Return Value : none
mbed_official 35:f72ccc6892ee 242 *******************************************************************************/
mbed_official 35:f72ccc6892ee 243 void Userdef_USB_usb0_host_start_dma (USB_HOST_DMA_t * dma, uint16_t dfacc)
mbed_official 35:f72ccc6892ee 244 {
mbed_official 35:f72ccc6892ee 245 uint32_t trncount;
mbed_official 35:f72ccc6892ee 246 uint32_t src;
mbed_official 35:f72ccc6892ee 247 uint32_t dst;
mbed_official 35:f72ccc6892ee 248 uint32_t size;
mbed_official 35:f72ccc6892ee 249 uint32_t dir;
mbed_official 35:f72ccc6892ee 250 #ifdef CACHE_WRITEBACK
mbed_official 35:f72ccc6892ee 251 uint32_t ptr;
mbed_official 35:f72ccc6892ee 252 #endif
mbed_official 35:f72ccc6892ee 253
mbed_official 35:f72ccc6892ee 254 trncount = dma->bytes;
mbed_official 35:f72ccc6892ee 255 dir = dma->dir;
mbed_official 35:f72ccc6892ee 256
mbed_official 35:f72ccc6892ee 257 if (dir == USB_HOST_FIFO2BUF)
mbed_official 35:f72ccc6892ee 258 {
mbed_official 35:f72ccc6892ee 259 /* DxFIFO determination */
mbed_official 35:f72ccc6892ee 260 dst = dma->buffer;
mbed_official 35:f72ccc6892ee 261 #ifndef __USB_HOST_DF_ACC_ENABLE__
mbed_official 35:f72ccc6892ee 262 if (dma->fifo == USB_HOST_D0FIFO_DMA)
mbed_official 35:f72ccc6892ee 263 {
mbed_official 35:f72ccc6892ee 264 src = (uint32_t)(&USB200.D0FIFO.UINT32);
mbed_official 35:f72ccc6892ee 265 }
mbed_official 35:f72ccc6892ee 266 else
mbed_official 35:f72ccc6892ee 267 {
mbed_official 35:f72ccc6892ee 268 src = (uint32_t)(&USB200.D1FIFO.UINT32);
mbed_official 35:f72ccc6892ee 269 }
mbed_official 35:f72ccc6892ee 270 size = dma->size;
mbed_official 35:f72ccc6892ee 271
mbed_official 35:f72ccc6892ee 272 if (size == 0)
mbed_official 35:f72ccc6892ee 273 {
mbed_official 35:f72ccc6892ee 274 src += 3; /* byte access */
mbed_official 35:f72ccc6892ee 275 }
mbed_official 35:f72ccc6892ee 276 else if (size == 1)
mbed_official 35:f72ccc6892ee 277 {
mbed_official 35:f72ccc6892ee 278 src += 2; /* short access */
mbed_official 35:f72ccc6892ee 279 }
mbed_official 35:f72ccc6892ee 280 else
mbed_official 35:f72ccc6892ee 281 {
mbed_official 35:f72ccc6892ee 282 /* Do Nothing */
mbed_official 35:f72ccc6892ee 283 }
mbed_official 35:f72ccc6892ee 284 #else
mbed_official 35:f72ccc6892ee 285 size = dma->size;
mbed_official 35:f72ccc6892ee 286
mbed_official 35:f72ccc6892ee 287 if (size == 2)
mbed_official 35:f72ccc6892ee 288 {
mbed_official 35:f72ccc6892ee 289 /* 32bit access */
mbed_official 35:f72ccc6892ee 290 if (dfacc == 2)
mbed_official 35:f72ccc6892ee 291 {
mbed_official 35:f72ccc6892ee 292 /* 32byte access */
mbed_official 35:f72ccc6892ee 293 if (dma->fifo == USB_HOST_D0FIFO_DMA)
mbed_official 35:f72ccc6892ee 294 {
mbed_official 35:f72ccc6892ee 295 src = (uint32_t)(&USB200.D0FIFOB0);
mbed_official 35:f72ccc6892ee 296 }
mbed_official 35:f72ccc6892ee 297 else
mbed_official 35:f72ccc6892ee 298 {
mbed_official 35:f72ccc6892ee 299 src = (uint32_t)(&USB200.D1FIFOB0);
mbed_official 35:f72ccc6892ee 300 }
mbed_official 35:f72ccc6892ee 301 }
mbed_official 35:f72ccc6892ee 302 else if (dfacc == 1)
mbed_official 35:f72ccc6892ee 303 {
mbed_official 35:f72ccc6892ee 304 /* 16byte access */
mbed_official 35:f72ccc6892ee 305 if (dma->fifo == USB_HOST_D0FIFO_DMA)
mbed_official 35:f72ccc6892ee 306 {
mbed_official 35:f72ccc6892ee 307 src = (uint32_t)(&USB200.D0FIFOB0);
mbed_official 35:f72ccc6892ee 308 }
mbed_official 35:f72ccc6892ee 309 else
mbed_official 35:f72ccc6892ee 310 {
mbed_official 35:f72ccc6892ee 311 src = (uint32_t)(&USB200.D1FIFOB0);
mbed_official 35:f72ccc6892ee 312 }
mbed_official 35:f72ccc6892ee 313 }
mbed_official 35:f72ccc6892ee 314 else
mbed_official 35:f72ccc6892ee 315 {
mbed_official 35:f72ccc6892ee 316 /* normal access */
mbed_official 35:f72ccc6892ee 317 if (dma->fifo == USB_HOST_D0FIFO_DMA)
mbed_official 35:f72ccc6892ee 318 {
mbed_official 35:f72ccc6892ee 319 src = (uint32_t)(&USB200.D0FIFO.UINT32);
mbed_official 35:f72ccc6892ee 320 }
mbed_official 35:f72ccc6892ee 321 else
mbed_official 35:f72ccc6892ee 322 {
mbed_official 35:f72ccc6892ee 323 src = (uint32_t)(&USB200.D1FIFO.UINT32);
mbed_official 35:f72ccc6892ee 324 }
mbed_official 35:f72ccc6892ee 325 }
mbed_official 35:f72ccc6892ee 326 }
mbed_official 35:f72ccc6892ee 327 else if (size == 1)
mbed_official 35:f72ccc6892ee 328 {
mbed_official 35:f72ccc6892ee 329 /* 16bit access */
mbed_official 35:f72ccc6892ee 330 dfacc = 0; /* force normal access */
mbed_official 35:f72ccc6892ee 331
mbed_official 35:f72ccc6892ee 332 if (dma->fifo == USB_HOST_D0FIFO_DMA)
mbed_official 35:f72ccc6892ee 333 {
mbed_official 35:f72ccc6892ee 334 src = (uint32_t)(&USB200.D0FIFO.UINT32);
mbed_official 35:f72ccc6892ee 335 }
mbed_official 35:f72ccc6892ee 336 else
mbed_official 35:f72ccc6892ee 337 {
mbed_official 35:f72ccc6892ee 338 src = (uint32_t)(&USB200.D1FIFO.UINT32);
mbed_official 35:f72ccc6892ee 339 }
mbed_official 35:f72ccc6892ee 340 src += 2; /* short access */
mbed_official 35:f72ccc6892ee 341 }
mbed_official 35:f72ccc6892ee 342 else
mbed_official 35:f72ccc6892ee 343 {
mbed_official 35:f72ccc6892ee 344 /* 8bit access */
mbed_official 35:f72ccc6892ee 345 dfacc = 0; /* force normal access */
mbed_official 35:f72ccc6892ee 346 if (dma->fifo == USB_HOST_D0FIFO_DMA)
mbed_official 35:f72ccc6892ee 347 {
mbed_official 35:f72ccc6892ee 348 src = (uint32_t)(&USB200.D0FIFO.UINT32);
mbed_official 35:f72ccc6892ee 349 }
mbed_official 35:f72ccc6892ee 350 else
mbed_official 35:f72ccc6892ee 351 {
mbed_official 35:f72ccc6892ee 352 src = (uint32_t)(&USB200.D1FIFO.UINT32);
mbed_official 35:f72ccc6892ee 353 }
mbed_official 35:f72ccc6892ee 354 src += 3; /* byte access */
mbed_official 35:f72ccc6892ee 355 }
mbed_official 35:f72ccc6892ee 356 #endif
mbed_official 35:f72ccc6892ee 357 }
mbed_official 35:f72ccc6892ee 358 else
mbed_official 35:f72ccc6892ee 359 {
mbed_official 35:f72ccc6892ee 360 /* DxFIFO determination */
mbed_official 35:f72ccc6892ee 361 src = dma->buffer;
mbed_official 35:f72ccc6892ee 362 #ifndef __USB_HOST_DF_ACC_ENABLE__
mbed_official 35:f72ccc6892ee 363 if (dma->fifo == USB_HOST_D0FIFO_DMA)
mbed_official 35:f72ccc6892ee 364 {
mbed_official 35:f72ccc6892ee 365 dst = (uint32_t)(&USB200.D0FIFO.UINT32);
mbed_official 35:f72ccc6892ee 366 }
mbed_official 35:f72ccc6892ee 367 else
mbed_official 35:f72ccc6892ee 368 {
mbed_official 35:f72ccc6892ee 369 dst = (uint32_t)(&USB200.D1FIFO.UINT32);
mbed_official 35:f72ccc6892ee 370 }
mbed_official 35:f72ccc6892ee 371 size = dma->size;
mbed_official 35:f72ccc6892ee 372
mbed_official 35:f72ccc6892ee 373 if (size == 0)
mbed_official 35:f72ccc6892ee 374 {
mbed_official 35:f72ccc6892ee 375 dst += 3; /* byte access */
mbed_official 35:f72ccc6892ee 376 }
mbed_official 35:f72ccc6892ee 377 else if (size == 1)
mbed_official 35:f72ccc6892ee 378 {
mbed_official 35:f72ccc6892ee 379 dst += 2; /* short access */
mbed_official 35:f72ccc6892ee 380 }
mbed_official 35:f72ccc6892ee 381 else
mbed_official 35:f72ccc6892ee 382 {
mbed_official 35:f72ccc6892ee 383 /* Do Nothing */
mbed_official 35:f72ccc6892ee 384 }
mbed_official 35:f72ccc6892ee 385 #else
mbed_official 35:f72ccc6892ee 386 size = dma->size;
mbed_official 35:f72ccc6892ee 387 if (size == 2)
mbed_official 35:f72ccc6892ee 388 {
mbed_official 35:f72ccc6892ee 389 /* 32bit access */
mbed_official 35:f72ccc6892ee 390 if (dfacc == 2)
mbed_official 35:f72ccc6892ee 391 {
mbed_official 35:f72ccc6892ee 392 /* 32byte access */
mbed_official 35:f72ccc6892ee 393 if (dma->fifo == USB_HOST_D0FIFO_DMA)
mbed_official 35:f72ccc6892ee 394 {
mbed_official 35:f72ccc6892ee 395 dst = (uint32_t)(&USB200.D0FIFOB0);
mbed_official 35:f72ccc6892ee 396 }
mbed_official 35:f72ccc6892ee 397 else
mbed_official 35:f72ccc6892ee 398 {
mbed_official 35:f72ccc6892ee 399 dst = (uint32_t)(&USB200.D1FIFOB0);
mbed_official 35:f72ccc6892ee 400 }
mbed_official 35:f72ccc6892ee 401 }
mbed_official 35:f72ccc6892ee 402 else if (dfacc == 1)
mbed_official 35:f72ccc6892ee 403 {
mbed_official 35:f72ccc6892ee 404 /* 16byte access */
mbed_official 35:f72ccc6892ee 405 if (dma->fifo == USB_HOST_D0FIFO_DMA)
mbed_official 35:f72ccc6892ee 406 {
mbed_official 35:f72ccc6892ee 407 dst = (uint32_t)(&USB200.D0FIFOB0);
mbed_official 35:f72ccc6892ee 408 }
mbed_official 35:f72ccc6892ee 409 else
mbed_official 35:f72ccc6892ee 410 {
mbed_official 35:f72ccc6892ee 411 dst = (uint32_t)(&USB200.D1FIFOB0);
mbed_official 35:f72ccc6892ee 412 }
mbed_official 35:f72ccc6892ee 413 }
mbed_official 35:f72ccc6892ee 414 else
mbed_official 35:f72ccc6892ee 415 {
mbed_official 35:f72ccc6892ee 416 /* normal access */
mbed_official 35:f72ccc6892ee 417 if (dma->fifo == USB_HOST_D0FIFO_DMA)
mbed_official 35:f72ccc6892ee 418 {
mbed_official 35:f72ccc6892ee 419 dst = (uint32_t)(&USB200.D0FIFO.UINT32);
mbed_official 35:f72ccc6892ee 420 }
mbed_official 35:f72ccc6892ee 421 else
mbed_official 35:f72ccc6892ee 422 {
mbed_official 35:f72ccc6892ee 423 dst = (uint32_t)(&USB200.D1FIFO.UINT32);
mbed_official 35:f72ccc6892ee 424 }
mbed_official 35:f72ccc6892ee 425 }
mbed_official 35:f72ccc6892ee 426 }
mbed_official 35:f72ccc6892ee 427 else if (size == 1)
mbed_official 35:f72ccc6892ee 428 {
mbed_official 35:f72ccc6892ee 429 /* 16bit access */
mbed_official 35:f72ccc6892ee 430 dfacc = 0; /* force normal access */
mbed_official 35:f72ccc6892ee 431 if (dma->fifo == USB_HOST_D0FIFO_DMA)
mbed_official 35:f72ccc6892ee 432 {
mbed_official 35:f72ccc6892ee 433 dst = (uint32_t)(&USB200.D0FIFO.UINT32);
mbed_official 35:f72ccc6892ee 434 }
mbed_official 35:f72ccc6892ee 435 else
mbed_official 35:f72ccc6892ee 436 {
mbed_official 35:f72ccc6892ee 437 dst = (uint32_t)(&USB200.D1FIFO.UINT32);
mbed_official 35:f72ccc6892ee 438 }
mbed_official 35:f72ccc6892ee 439 dst += 2; /* short access */
mbed_official 35:f72ccc6892ee 440 }
mbed_official 35:f72ccc6892ee 441 else
mbed_official 35:f72ccc6892ee 442 {
mbed_official 35:f72ccc6892ee 443 /* 8bit access */
mbed_official 35:f72ccc6892ee 444 dfacc = 0; /* force normal access */
mbed_official 35:f72ccc6892ee 445 if (dma->fifo == USB_HOST_D0FIFO_DMA)
mbed_official 35:f72ccc6892ee 446 {
mbed_official 35:f72ccc6892ee 447 dst = (uint32_t)(&USB200.D0FIFO.UINT32);
mbed_official 35:f72ccc6892ee 448 }
mbed_official 35:f72ccc6892ee 449 else
mbed_official 35:f72ccc6892ee 450 {
mbed_official 35:f72ccc6892ee 451 dst = (uint32_t)(&USB200.D1FIFO.UINT32);
mbed_official 35:f72ccc6892ee 452 }
mbed_official 35:f72ccc6892ee 453 dst += 3; /* byte access */
mbed_official 35:f72ccc6892ee 454 }
mbed_official 35:f72ccc6892ee 455 #endif
mbed_official 35:f72ccc6892ee 456 }
mbed_official 35:f72ccc6892ee 457
mbed_official 35:f72ccc6892ee 458 #ifdef CACHE_WRITEBACK
mbed_official 35:f72ccc6892ee 459 ptr = (uint32_t)dma->buffer;
mbed_official 35:f72ccc6892ee 460 if ((ptr & 0x20000000ul) == 0)
mbed_official 35:f72ccc6892ee 461 {
mbed_official 35:f72ccc6892ee 462 io_cwb((uint32_t)ptr,(uint32_t)(ptr)+trncount);
mbed_official 35:f72ccc6892ee 463 }
mbed_official 35:f72ccc6892ee 464 #endif
mbed_official 35:f72ccc6892ee 465
mbed_official 35:f72ccc6892ee 466 if (dma->fifo == USB_HOST_D0FIFO_DMA)
mbed_official 35:f72ccc6892ee 467 {
mbed_official 35:f72ccc6892ee 468 usb0_host_enable_dmac0(src, dst, trncount, size, dir, dma->fifo, dfacc);
mbed_official 35:f72ccc6892ee 469 }
mbed_official 35:f72ccc6892ee 470 else
mbed_official 35:f72ccc6892ee 471 {
mbed_official 35:f72ccc6892ee 472 usb0_host_enable_dmac1(src, dst, trncount, size, dir, dma->fifo, dfacc);
mbed_official 35:f72ccc6892ee 473 }
mbed_official 35:f72ccc6892ee 474 }
mbed_official 35:f72ccc6892ee 475
mbed_official 35:f72ccc6892ee 476 /*******************************************************************************
mbed_official 35:f72ccc6892ee 477 * Function Name: usb0_host_enable_dmac0
mbed_official 35:f72ccc6892ee 478 * Description : Enables DMA transfer on the information specified by the argument.
mbed_official 35:f72ccc6892ee 479 * Arguments : uint32_t src : src address
mbed_official 35:f72ccc6892ee 480 * : uint32_t dst : dst address
mbed_official 35:f72ccc6892ee 481 * : uint32_t count : transfer byte
mbed_official 35:f72ccc6892ee 482 * : uint32_t size : transfer size
mbed_official 35:f72ccc6892ee 483 * : uint32_t dir : direction
mbed_official 35:f72ccc6892ee 484 * : uint32_t fifo : FIFO(D0FIFO or D1FIFO)
mbed_official 35:f72ccc6892ee 485 * : uint16_t dfacc : 0 : normal access
mbed_official 35:f72ccc6892ee 486 * : : 1 : 16byte access
mbed_official 35:f72ccc6892ee 487 * : : 2 : 32byte access
mbed_official 35:f72ccc6892ee 488 * Return Value : none
mbed_official 35:f72ccc6892ee 489 *******************************************************************************/
mbed_official 35:f72ccc6892ee 490 static void usb0_host_enable_dmac0 (uint32_t src, uint32_t dst, uint32_t count,
mbed_official 35:f72ccc6892ee 491 uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc)
mbed_official 35:f72ccc6892ee 492 {
mbed_official 35:f72ccc6892ee 493 dmac_transinfo_t trans_info;
mbed_official 35:f72ccc6892ee 494 uint32_t request_factor = 0;
mbed_official 35:f72ccc6892ee 495 int32_t ret;
mbed_official 35:f72ccc6892ee 496
mbed_official 35:f72ccc6892ee 497 /* ==== Variable setting for DMAC initialization ==== */
mbed_official 35:f72ccc6892ee 498 trans_info.src_addr = (uint32_t)src; /* Start address of transfer source */
mbed_official 35:f72ccc6892ee 499 trans_info.dst_addr = (uint32_t)dst; /* Start address of transfer destination */
mbed_official 35:f72ccc6892ee 500 trans_info.count = (uint32_t)count; /* Total byte count to be transferred */
mbed_official 35:f72ccc6892ee 501 #ifndef __USB_HOST_DF_ACC_ENABLE__
mbed_official 35:f72ccc6892ee 502 if (size == 0)
mbed_official 35:f72ccc6892ee 503 {
mbed_official 35:f72ccc6892ee 504 trans_info.src_size = DMAC_TRANS_SIZE_8; /* Transfer source transfer size */
mbed_official 35:f72ccc6892ee 505 trans_info.dst_size = DMAC_TRANS_SIZE_8; /* Transfer destination transfer size */
mbed_official 35:f72ccc6892ee 506 }
mbed_official 35:f72ccc6892ee 507 else if (size == 1)
mbed_official 35:f72ccc6892ee 508 {
mbed_official 35:f72ccc6892ee 509 trans_info.src_size = DMAC_TRANS_SIZE_16; /* Transfer source transfer size */
mbed_official 35:f72ccc6892ee 510 trans_info.dst_size = DMAC_TRANS_SIZE_16; /* Transfer destination transfer size */
mbed_official 35:f72ccc6892ee 511 }
mbed_official 35:f72ccc6892ee 512 else if (size == 2)
mbed_official 35:f72ccc6892ee 513 {
mbed_official 35:f72ccc6892ee 514 trans_info.src_size = DMAC_TRANS_SIZE_32; /* Transfer source transfer size */
mbed_official 35:f72ccc6892ee 515 trans_info.dst_size = DMAC_TRANS_SIZE_32; /* Transfer destination transfer size */
mbed_official 35:f72ccc6892ee 516 }
mbed_official 35:f72ccc6892ee 517 else
mbed_official 35:f72ccc6892ee 518 {
mbed_official 35:f72ccc6892ee 519 // printf("size error!!\n");
mbed_official 35:f72ccc6892ee 520 }
mbed_official 35:f72ccc6892ee 521 #else
mbed_official 35:f72ccc6892ee 522 if (dfacc == 2)
mbed_official 35:f72ccc6892ee 523 {
mbed_official 35:f72ccc6892ee 524 /* 32byte access */
mbed_official 35:f72ccc6892ee 525 trans_info.src_size = DMAC_TRANS_SIZE_256; /* Transfer source transfer size */
mbed_official 35:f72ccc6892ee 526 trans_info.dst_size = DMAC_TRANS_SIZE_256; /* Transfer destination transfer size */
mbed_official 35:f72ccc6892ee 527 }
mbed_official 35:f72ccc6892ee 528 else if (dfacc == 1)
mbed_official 35:f72ccc6892ee 529 {
mbed_official 35:f72ccc6892ee 530 /* 16byte access */
mbed_official 35:f72ccc6892ee 531 trans_info.src_size = DMAC_TRANS_SIZE_128; /* Transfer source transfer size */
mbed_official 35:f72ccc6892ee 532 trans_info.dst_size = DMAC_TRANS_SIZE_128; /* Transfer destination transfer size */
mbed_official 35:f72ccc6892ee 533 }
mbed_official 35:f72ccc6892ee 534 else
mbed_official 35:f72ccc6892ee 535 {
mbed_official 35:f72ccc6892ee 536 /* normal access */
mbed_official 35:f72ccc6892ee 537 if (size == 0)
mbed_official 35:f72ccc6892ee 538 {
mbed_official 35:f72ccc6892ee 539 trans_info.src_size = DMAC_TRANS_SIZE_8; /* Transfer source transfer size */
mbed_official 35:f72ccc6892ee 540 trans_info.dst_size = DMAC_TRANS_SIZE_8; /* Transfer destination transfer size */
mbed_official 35:f72ccc6892ee 541 }
mbed_official 35:f72ccc6892ee 542 else if (size == 1)
mbed_official 35:f72ccc6892ee 543 {
mbed_official 35:f72ccc6892ee 544 trans_info.src_size = DMAC_TRANS_SIZE_16; /* Transfer source transfer size */
mbed_official 35:f72ccc6892ee 545 trans_info.dst_size = DMAC_TRANS_SIZE_16; /* Transfer destination transfer size */
mbed_official 35:f72ccc6892ee 546 }
mbed_official 35:f72ccc6892ee 547 else if (size == 2)
mbed_official 35:f72ccc6892ee 548 {
mbed_official 35:f72ccc6892ee 549 trans_info.src_size = DMAC_TRANS_SIZE_32; /* Transfer source transfer size */
mbed_official 35:f72ccc6892ee 550 trans_info.dst_size = DMAC_TRANS_SIZE_32; /* Transfer destination transfer size */
mbed_official 35:f72ccc6892ee 551 }
mbed_official 35:f72ccc6892ee 552 else
mbed_official 35:f72ccc6892ee 553 {
mbed_official 35:f72ccc6892ee 554 // printf("size error!!\n");
mbed_official 35:f72ccc6892ee 555 }
mbed_official 35:f72ccc6892ee 556 }
mbed_official 35:f72ccc6892ee 557 #endif
mbed_official 35:f72ccc6892ee 558
mbed_official 35:f72ccc6892ee 559 if (dir == USB_HOST_FIFO2BUF)
mbed_official 35:f72ccc6892ee 560 {
mbed_official 35:f72ccc6892ee 561 request_factor = DMAC_REQ_USB0_DMA0_RX; /* USB_0 channel 0 receive FIFO full */
mbed_official 35:f72ccc6892ee 562 trans_info.saddr_dir = DMAC_TRANS_ADR_NO_INC; /* Count direction of transfer source address */
mbed_official 35:f72ccc6892ee 563 trans_info.daddr_dir = DMAC_TRANS_ADR_INC; /* Count direction of transfer destination address */
mbed_official 35:f72ccc6892ee 564 }
mbed_official 35:f72ccc6892ee 565 else if (dir == USB_HOST_BUF2FIFO)
mbed_official 35:f72ccc6892ee 566 {
mbed_official 35:f72ccc6892ee 567 request_factor = DMAC_REQ_USB0_DMA0_TX; /* USB_0 channel 0 receive FIFO empty */
mbed_official 35:f72ccc6892ee 568 trans_info.saddr_dir = DMAC_TRANS_ADR_INC; /* Count direction of transfer source address */
mbed_official 35:f72ccc6892ee 569 trans_info.daddr_dir = DMAC_TRANS_ADR_NO_INC; /* Count direction of transfer destination address */
mbed_official 35:f72ccc6892ee 570 }
mbed_official 35:f72ccc6892ee 571 else
mbed_official 35:f72ccc6892ee 572 {
mbed_official 35:f72ccc6892ee 573 /* Do Nothing */
mbed_official 35:f72ccc6892ee 574 }
mbed_official 35:f72ccc6892ee 575
mbed_official 35:f72ccc6892ee 576 /* ==== DMAC initialization ==== */
mbed_official 35:f72ccc6892ee 577 usb0_host_DMAC1_PeriReqInit((const dmac_transinfo_t *)&trans_info,
mbed_official 35:f72ccc6892ee 578 DMAC_MODE_REGISTER,
mbed_official 35:f72ccc6892ee 579 DMAC_SAMPLE_SINGLE,
mbed_official 35:f72ccc6892ee 580 request_factor,
mbed_official 35:f72ccc6892ee 581 0); /* Don't care DMAC_REQ_REQD is setting in usb0_host_DMAC1_PeriReqInit() */
mbed_official 35:f72ccc6892ee 582
mbed_official 35:f72ccc6892ee 583 /* ==== DMAC startup ==== */
mbed_official 35:f72ccc6892ee 584 ret = usb0_host_DMAC1_Open(DMAC_REQ_MODE_PERI);
mbed_official 35:f72ccc6892ee 585
mbed_official 35:f72ccc6892ee 586 if (ret != 0)
mbed_official 35:f72ccc6892ee 587 {
mbed_official 35:f72ccc6892ee 588 // printf("DMAC1 Open error!!\n");
mbed_official 35:f72ccc6892ee 589 }
mbed_official 35:f72ccc6892ee 590
mbed_official 35:f72ccc6892ee 591 return;
mbed_official 35:f72ccc6892ee 592 }
mbed_official 35:f72ccc6892ee 593
mbed_official 35:f72ccc6892ee 594 /*******************************************************************************
mbed_official 35:f72ccc6892ee 595 * Function Name: usb0_host_enable_dmac1
mbed_official 35:f72ccc6892ee 596 * Description : Enables DMA transfer on the information specified by the argument.
mbed_official 35:f72ccc6892ee 597 * Arguments : uint32_t src : src address
mbed_official 35:f72ccc6892ee 598 * : uint32_t dst : dst address
mbed_official 35:f72ccc6892ee 599 * : uint32_t count : transfer byte
mbed_official 35:f72ccc6892ee 600 * : uint32_t size : transfer size
mbed_official 35:f72ccc6892ee 601 * : uint32_t dir : direction
mbed_official 35:f72ccc6892ee 602 * : uint32_t fifo : FIFO(D0FIFO or D1FIFO)
mbed_official 35:f72ccc6892ee 603 * : uint16_t dfacc : 0 : normal access
mbed_official 35:f72ccc6892ee 604 * : : 1 : 16byte access
mbed_official 35:f72ccc6892ee 605 * : : 2 : 32byte access
mbed_official 35:f72ccc6892ee 606 * Return Value : none
mbed_official 35:f72ccc6892ee 607 *******************************************************************************/
mbed_official 35:f72ccc6892ee 608 static void usb0_host_enable_dmac1 (uint32_t src, uint32_t dst, uint32_t count,
mbed_official 35:f72ccc6892ee 609 uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc)
mbed_official 35:f72ccc6892ee 610 {
mbed_official 35:f72ccc6892ee 611 dmac_transinfo_t trans_info;
mbed_official 35:f72ccc6892ee 612 uint32_t request_factor = 0;
mbed_official 35:f72ccc6892ee 613 int32_t ret;
mbed_official 35:f72ccc6892ee 614
mbed_official 35:f72ccc6892ee 615 /* ==== Variable setting for DMAC initialization ==== */
mbed_official 35:f72ccc6892ee 616 trans_info.src_addr = (uint32_t)src; /* Start address of transfer source */
mbed_official 35:f72ccc6892ee 617 trans_info.dst_addr = (uint32_t)dst; /* Start address of transfer destination */
mbed_official 35:f72ccc6892ee 618 trans_info.count = (uint32_t)count; /* Total byte count to be transferred */
mbed_official 35:f72ccc6892ee 619 #ifndef __USB_HOST_DF_ACC_ENABLE__
mbed_official 35:f72ccc6892ee 620 if (size == 0)
mbed_official 35:f72ccc6892ee 621 {
mbed_official 35:f72ccc6892ee 622 trans_info.src_size = DMAC_TRANS_SIZE_8; /* Transfer source transfer size */
mbed_official 35:f72ccc6892ee 623 trans_info.dst_size = DMAC_TRANS_SIZE_8; /* Transfer destination transfer size */
mbed_official 35:f72ccc6892ee 624 }
mbed_official 35:f72ccc6892ee 625 else if (size == 1)
mbed_official 35:f72ccc6892ee 626 {
mbed_official 35:f72ccc6892ee 627 trans_info.src_size = DMAC_TRANS_SIZE_16; /* Transfer source transfer size */
mbed_official 35:f72ccc6892ee 628 trans_info.dst_size = DMAC_TRANS_SIZE_16; /* Transfer destination transfer size */
mbed_official 35:f72ccc6892ee 629 }
mbed_official 35:f72ccc6892ee 630 else if (size == 2)
mbed_official 35:f72ccc6892ee 631 {
mbed_official 35:f72ccc6892ee 632 trans_info.src_size = DMAC_TRANS_SIZE_32; /* Transfer source transfer size */
mbed_official 35:f72ccc6892ee 633 trans_info.dst_size = DMAC_TRANS_SIZE_32; /* Transfer destination transfer size */
mbed_official 35:f72ccc6892ee 634 }
mbed_official 35:f72ccc6892ee 635 else
mbed_official 35:f72ccc6892ee 636 {
mbed_official 35:f72ccc6892ee 637 // printf("size error!!\n");
mbed_official 35:f72ccc6892ee 638 }
mbed_official 35:f72ccc6892ee 639 #else
mbed_official 35:f72ccc6892ee 640 if (dfacc == 2)
mbed_official 35:f72ccc6892ee 641 {
mbed_official 35:f72ccc6892ee 642 /* 32byte access */
mbed_official 35:f72ccc6892ee 643 trans_info.src_size = DMAC_TRANS_SIZE_256; /* Transfer source transfer size */
mbed_official 35:f72ccc6892ee 644 trans_info.dst_size = DMAC_TRANS_SIZE_256; /* Transfer destination transfer size */
mbed_official 35:f72ccc6892ee 645 }
mbed_official 35:f72ccc6892ee 646 else if (dfacc == 1)
mbed_official 35:f72ccc6892ee 647 {
mbed_official 35:f72ccc6892ee 648 /* 16byte access */
mbed_official 35:f72ccc6892ee 649 trans_info.src_size = DMAC_TRANS_SIZE_128; /* Transfer source transfer size */
mbed_official 35:f72ccc6892ee 650 trans_info.dst_size = DMAC_TRANS_SIZE_128; /* Transfer destination transfer size */
mbed_official 35:f72ccc6892ee 651 }
mbed_official 35:f72ccc6892ee 652 else
mbed_official 35:f72ccc6892ee 653 {
mbed_official 35:f72ccc6892ee 654 /* normal access */
mbed_official 35:f72ccc6892ee 655 if (size == 0)
mbed_official 35:f72ccc6892ee 656 {
mbed_official 35:f72ccc6892ee 657 trans_info.src_size = DMAC_TRANS_SIZE_8; /* Transfer source transfer size */
mbed_official 35:f72ccc6892ee 658 trans_info.dst_size = DMAC_TRANS_SIZE_8; /* Transfer destination transfer size */
mbed_official 35:f72ccc6892ee 659 }
mbed_official 35:f72ccc6892ee 660 else if (size == 1)
mbed_official 35:f72ccc6892ee 661 {
mbed_official 35:f72ccc6892ee 662 trans_info.src_size = DMAC_TRANS_SIZE_16; /* Transfer source transfer size */
mbed_official 35:f72ccc6892ee 663 trans_info.dst_size = DMAC_TRANS_SIZE_16; /* Transfer destination transfer size */
mbed_official 35:f72ccc6892ee 664 }
mbed_official 35:f72ccc6892ee 665 else if (size == 2)
mbed_official 35:f72ccc6892ee 666 {
mbed_official 35:f72ccc6892ee 667 trans_info.src_size = DMAC_TRANS_SIZE_32; /* Transfer source transfer size */
mbed_official 35:f72ccc6892ee 668 trans_info.dst_size = DMAC_TRANS_SIZE_32; /* Transfer destination transfer size */
mbed_official 35:f72ccc6892ee 669 }
mbed_official 35:f72ccc6892ee 670 else
mbed_official 35:f72ccc6892ee 671 {
mbed_official 35:f72ccc6892ee 672 // printf("size error!!\n");
mbed_official 35:f72ccc6892ee 673 }
mbed_official 35:f72ccc6892ee 674 }
mbed_official 35:f72ccc6892ee 675 #endif
mbed_official 35:f72ccc6892ee 676
mbed_official 35:f72ccc6892ee 677 if (dir == USB_HOST_FIFO2BUF)
mbed_official 35:f72ccc6892ee 678 {
mbed_official 35:f72ccc6892ee 679 request_factor =DMAC_REQ_USB0_DMA1_RX; /* USB_0 channel 0 receive FIFO full */
mbed_official 35:f72ccc6892ee 680 trans_info.saddr_dir = DMAC_TRANS_ADR_NO_INC; /* Count direction of transfer source address */
mbed_official 35:f72ccc6892ee 681 trans_info.daddr_dir = DMAC_TRANS_ADR_INC; /* Count direction of transfer destination address */
mbed_official 35:f72ccc6892ee 682 }
mbed_official 35:f72ccc6892ee 683 else if (dir == USB_HOST_BUF2FIFO)
mbed_official 35:f72ccc6892ee 684 {
mbed_official 35:f72ccc6892ee 685 request_factor =DMAC_REQ_USB0_DMA1_TX; /* USB_0 channel 0 receive FIFO empty */
mbed_official 35:f72ccc6892ee 686 trans_info.saddr_dir = DMAC_TRANS_ADR_INC; /* Count direction of transfer source address */
mbed_official 35:f72ccc6892ee 687 trans_info.daddr_dir = DMAC_TRANS_ADR_NO_INC; /* Count direction of transfer destination address */
mbed_official 35:f72ccc6892ee 688 }
mbed_official 35:f72ccc6892ee 689 else
mbed_official 35:f72ccc6892ee 690 {
mbed_official 35:f72ccc6892ee 691 /* Do Nothing */
mbed_official 35:f72ccc6892ee 692 }
mbed_official 35:f72ccc6892ee 693
mbed_official 35:f72ccc6892ee 694 /* ==== DMAC initialization ==== */
mbed_official 35:f72ccc6892ee 695 usb0_host_DMAC2_PeriReqInit((const dmac_transinfo_t *)&trans_info,
mbed_official 35:f72ccc6892ee 696 DMAC_MODE_REGISTER,
mbed_official 35:f72ccc6892ee 697 DMAC_SAMPLE_SINGLE,
mbed_official 35:f72ccc6892ee 698 request_factor,
mbed_official 35:f72ccc6892ee 699 0); /* Don't care DMAC_REQ_REQD is setting in usb0_host_DMAC2_PeriReqInit() */
mbed_official 35:f72ccc6892ee 700
mbed_official 35:f72ccc6892ee 701 /* ==== DMAC startup ==== */
mbed_official 35:f72ccc6892ee 702 ret = usb0_host_DMAC2_Open(DMAC_REQ_MODE_PERI);
mbed_official 35:f72ccc6892ee 703
mbed_official 35:f72ccc6892ee 704 if (ret != 0)
mbed_official 35:f72ccc6892ee 705 {
mbed_official 35:f72ccc6892ee 706 // printf("DMAC2 Open error!!\n");
mbed_official 35:f72ccc6892ee 707 }
mbed_official 35:f72ccc6892ee 708
mbed_official 35:f72ccc6892ee 709 return;
mbed_official 35:f72ccc6892ee 710 }
mbed_official 35:f72ccc6892ee 711
mbed_official 35:f72ccc6892ee 712 /*******************************************************************************
mbed_official 35:f72ccc6892ee 713 * Function Name: Userdef_USB_usb0_host_stop_dma0
mbed_official 35:f72ccc6892ee 714 * Description : Disables DMA transfer.
mbed_official 35:f72ccc6892ee 715 * Arguments : none
mbed_official 35:f72ccc6892ee 716 * Return Value : uint32_t return Transfer Counter register(DMATCRn) value
mbed_official 35:f72ccc6892ee 717 * : regarding to the bus width.
mbed_official 35:f72ccc6892ee 718 * Notice : This function should be executed to DMAC executed at the time
mbed_official 35:f72ccc6892ee 719 * : of specification of D0_FIF0_DMA in dma->fifo.
mbed_official 35:f72ccc6892ee 720 *******************************************************************************/
mbed_official 35:f72ccc6892ee 721 uint32_t Userdef_USB_usb0_host_stop_dma0 (void)
mbed_official 35:f72ccc6892ee 722 {
mbed_official 35:f72ccc6892ee 723 uint32_t remain;
mbed_official 35:f72ccc6892ee 724
mbed_official 35:f72ccc6892ee 725 /* ==== DMAC release ==== */
mbed_official 35:f72ccc6892ee 726 usb0_host_DMAC1_Close(&remain);
mbed_official 35:f72ccc6892ee 727
mbed_official 35:f72ccc6892ee 728 return remain;
mbed_official 35:f72ccc6892ee 729 }
mbed_official 35:f72ccc6892ee 730
mbed_official 35:f72ccc6892ee 731 /*******************************************************************************
mbed_official 35:f72ccc6892ee 732 * Function Name: Userdef_USB_usb0_host_stop_dma1
mbed_official 35:f72ccc6892ee 733 * Description : Disables DMA transfer.
mbed_official 35:f72ccc6892ee 734 * : This function should be executed to DMAC executed at the time
mbed_official 35:f72ccc6892ee 735 * : of specification of D1_FIF0_DMA in dma->fifo.
mbed_official 35:f72ccc6892ee 736 * Arguments : none
mbed_official 35:f72ccc6892ee 737 * Return Value : uint32_t return Transfer Counter register(DMATCRn) value
mbed_official 35:f72ccc6892ee 738 * : regarding to the bus width.
mbed_official 35:f72ccc6892ee 739 *******************************************************************************/
mbed_official 35:f72ccc6892ee 740 uint32_t Userdef_USB_usb0_host_stop_dma1 (void)
mbed_official 35:f72ccc6892ee 741 {
mbed_official 35:f72ccc6892ee 742 uint32_t remain;
mbed_official 35:f72ccc6892ee 743
mbed_official 35:f72ccc6892ee 744 /* ==== DMAC release ==== */
mbed_official 35:f72ccc6892ee 745 usb0_host_DMAC2_Close(&remain);
mbed_official 35:f72ccc6892ee 746
mbed_official 35:f72ccc6892ee 747 return remain;
mbed_official 35:f72ccc6892ee 748 }
mbed_official 35:f72ccc6892ee 749
mbed_official 35:f72ccc6892ee 750 /*******************************************************************************
mbed_official 35:f72ccc6892ee 751 * Function Name: Userdef_USB_usb0_host_notice
mbed_official 35:f72ccc6892ee 752 * Description : Notice of USER
mbed_official 35:f72ccc6892ee 753 * Arguments : const char *format
mbed_official 35:f72ccc6892ee 754 * Return Value : none
mbed_official 35:f72ccc6892ee 755 *******************************************************************************/
mbed_official 35:f72ccc6892ee 756 void Userdef_USB_usb0_host_notice (const char * format)
mbed_official 35:f72ccc6892ee 757 {
mbed_official 35:f72ccc6892ee 758 // printf(format);
mbed_official 35:f72ccc6892ee 759
mbed_official 35:f72ccc6892ee 760 return;
mbed_official 35:f72ccc6892ee 761 }
mbed_official 35:f72ccc6892ee 762
mbed_official 35:f72ccc6892ee 763 /*******************************************************************************
mbed_official 35:f72ccc6892ee 764 * Function Name: Userdef_USB_usb0_host_user_rdy
mbed_official 35:f72ccc6892ee 765 * Description : This function notify a user and wait for trigger
mbed_official 35:f72ccc6892ee 766 * Arguments : const char *format
mbed_official 35:f72ccc6892ee 767 * : uint16_t data
mbed_official 35:f72ccc6892ee 768 * Return Value : none
mbed_official 35:f72ccc6892ee 769 *******************************************************************************/
mbed_official 35:f72ccc6892ee 770 void Userdef_USB_usb0_host_user_rdy (const char * format, uint16_t data)
mbed_official 35:f72ccc6892ee 771 {
mbed_official 35:f72ccc6892ee 772 // printf(format, data);
mbed_official 35:f72ccc6892ee 773 getchar();
mbed_official 35:f72ccc6892ee 774
mbed_official 35:f72ccc6892ee 775 return;
mbed_official 35:f72ccc6892ee 776 }
mbed_official 35:f72ccc6892ee 777
mbed_official 35:f72ccc6892ee 778 /* End of File */