max4146x_comp

Dependencies:   MAX14690

Committer:
sdivarci
Date:
Sun Oct 25 20:10:02 2020 +0000
Revision:
0:0061165683ee
sdivarci

Who changed what in which revision?

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