X-TOUCH to djay bridge

Dependencies:   mbed mbed-rtos FATFileSystem

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

Who changed what in which revision?

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