123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346 |
- /*******************************************************************************
- * DISCLAIMER
- * This software is supplied by Renesas Electronics Corporation and is only
- * intended for use with Renesas products. No other uses are authorized. This
- * software is owned by Renesas Electronics Corporation and is protected under
- * all applicable laws, including copyright laws.
- * THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
- * THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
- * LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
- * AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
- * TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
- * ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
- * FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
- * ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
- * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- * Renesas reserves the right, without notice, to make changes to this software
- * and to discontinue the availability of this software. By using this software,
- * you agree to the additional terms and conditions found by accessing the
- * following link:
- * http://www.renesas.com/disclaimer
- * Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
- *******************************************************************************/
- /*******************************************************************************
- * File Name : usb1_function_dma.c
- * $Rev: 1116 $
- * $Date:: 2014-07-09 16:29:19 +0900#$
- * Device(s) : RZ/A1H
- * Tool-Chain :
- * OS : None
- * H/W Platform :
- * Description : RZ/A1H R7S72100 USB Sample Program
- * Operation :
- * Limitations :
- *******************************************************************************/
-
-
- /*******************************************************************************
- Includes <System Includes> , "Project Includes"
- *******************************************************************************/
- #include "usb1_function.h"
-
-
- /*******************************************************************************
- Typedef definitions
- *******************************************************************************/
-
-
- /*******************************************************************************
- Macro definitions
- *******************************************************************************/
-
-
- /*******************************************************************************
- Imported global variables and functions (from other files)
- *******************************************************************************/
-
-
- /*******************************************************************************
- Exported global variables and functions (to be accessed by other files)
- *******************************************************************************/
-
-
- /*******************************************************************************
- Private global variables and functions
- *******************************************************************************/
- static void usb1_function_dmaint(uint16_t fifo);
- static void usb1_function_dmaint_buf2fifo(uint16_t pipe);
- static void usb1_function_dmaint_fifo2buf(uint16_t pipe);
-
-
- /*******************************************************************************
- * Function Name: usb1_function_dma_stop_d0
- * Description : D0FIFO DMA stop
- * Arguments : uint16_t pipe : pipe number
- * : uint32_t remain : transfer byte
- * Return Value : none
- *******************************************************************************/
- void usb1_function_dma_stop_d0 (uint16_t pipe, uint32_t remain)
- {
- uint16_t dtln;
- uint16_t dfacc;
- uint16_t buffer;
- uint16_t sds_b = 1;
-
- dfacc = RZA_IO_RegRead_16(&USB201.D0FBCFG, USB_DnFBCFG_DFACC_SHIFT, USB_DnFBCFG_DFACC);
-
- if (dfacc == 2)
- {
- sds_b = 32;
- }
- else if (dfacc == 1)
- {
- sds_b = 16;
- }
- else
- {
- if (g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size == 2)
- {
- sds_b = 4;
- }
- else if (g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size == 1)
- {
- sds_b = 2;
- }
- else
- {
- sds_b = 1;
- }
- }
-
- if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
- {
- if (g_usb1_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_DONE)
- {
- buffer = USB201.D0FIFOCTR;
- dtln = (buffer & USB_FUNCTION_BITDTLN);
-
- if ((dtln % sds_b) != 0)
- {
- remain += (sds_b - (dtln % sds_b));
- }
- g_usb1_function_PipeDataSize[pipe] = (g_usb1_function_data_count[pipe] - remain);
- g_usb1_function_data_count[pipe] = remain;
- }
- }
-
- RZA_IO_RegWrite_16(&USB201.D0FIFOSEL, 0, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
- }
-
- /*******************************************************************************
- * Function Name: usb1_function_dma_stop_d1
- * Description : D1FIFO DMA stop
- * Arguments : uint16_t pipe : pipe number
- * : uint32_t remain : transfer byte
- * Return Value : none
- *******************************************************************************/
- void usb1_function_dma_stop_d1 (uint16_t pipe, uint32_t remain)
- {
- uint16_t dtln;
- uint16_t dfacc;
- uint16_t buffer;
- uint16_t sds_b = 1;
-
- dfacc = RZA_IO_RegRead_16(&USB201.D1FBCFG, USB_DnFBCFG_DFACC_SHIFT, USB_DnFBCFG_DFACC);
-
- if (dfacc == 2)
- {
- sds_b = 32;
- }
- else if (dfacc == 1)
- {
- sds_b = 16;
- }
- else
- {
- if (g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size == 2)
- {
- sds_b = 4;
- }
- else if (g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size == 1)
- {
- sds_b = 2;
- }
- else
- {
- sds_b = 1;
- }
- }
-
- if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
- {
- if (g_usb1_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_DONE)
- {
- buffer = USB201.D1FIFOCTR;
- dtln = (buffer & USB_FUNCTION_BITDTLN);
-
- if ((dtln % sds_b) != 0)
- {
- remain += (sds_b - (dtln % sds_b));
- }
- g_usb1_function_PipeDataSize[pipe] = (g_usb1_function_data_count[pipe] - remain);
- g_usb1_function_data_count[pipe] = remain;
- }
- }
-
- RZA_IO_RegWrite_16(&USB201.D1FIFOSEL, 0, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
- }
-
- /*******************************************************************************
- * Function Name: usb1_function_dma_interrupt_d0fifo
- * Description : This function is DMA interrupt handler entry.
- * : Execute usb1_function_dmaint() after disabling DMA interrupt in this function.
- * : Disable DMA interrupt to DMAC executed when USB_FUNCTION_D0FIFO_DMA is
- * : specified by dma->fifo.
- * : Register this function as DMA complete interrupt.
- * Arguments : uint32_t int_sense ; Interrupts detection mode
- * : ; INTC_LEVEL_SENSITIVE : Level sense
- * : ; INTC_EDGE_TRIGGER : Edge trigger
- * Return Value : none
- *******************************************************************************/
- void usb1_function_dma_interrupt_d0fifo (uint32_t int_sense)
- {
- usb1_function_dmaint(USB_FUNCTION_D0FIFO);
- g_usb1_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_READY;
- }
-
- /*******************************************************************************
- * Function Name: usb1_function_dma_interrupt_d1fifo
- * Description : This function is DMA interrupt handler entry.
- * : Execute usb1_function_dmaint() after disabling DMA interrupt in this function.
- * : Disable DMA interrupt to DMAC executed when USB_FUNCTION_D1FIFO_DMA is
- * : specified by dma->fifo.
- * : Register this function as DMA complete interrupt.
- * Arguments : uint32_t int_sense ; Interrupts detection mode
- * : ; INTC_LEVEL_SENSITIVE : Level sense
- * : ; INTC_EDGE_TRIGGER : Edge trigger
- * Return Value : none
- *******************************************************************************/
- void usb1_function_dma_interrupt_d1fifo (uint32_t int_sense)
- {
- usb1_function_dmaint(USB_FUNCTION_D1FIFO);
- g_usb1_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_READY;
- }
-
- /*******************************************************************************
- * Function Name: usb1_function_dmaint
- * Description : This function is DMA transfer end interrupt
- * Arguments : uint16_t fifo ; fifo number
- * : ; USB_FUNCTION_D0FIFO
- * : ; USB_FUNCTION_D1FIFO
- * Return Value : none
- *******************************************************************************/
- static void usb1_function_dmaint (uint16_t fifo)
- {
- uint16_t pipe;
-
- pipe = g_usb1_function_DmaPipe[fifo];
-
- if (g_usb1_function_DmaInfo[fifo].dir == USB_FUNCTION_BUF2FIFO)
- {
- usb1_function_dmaint_buf2fifo(pipe);
- }
- else
- {
- usb1_function_dmaint_fifo2buf(pipe);
- }
- }
-
- /*******************************************************************************
- * Function Name: usb1_function_dmaint_fifo2buf
- * Description : Executes read completion from FIFO by DMAC.
- * Arguments : uint16_t pipe : pipe number
- * Return Value : none
- *******************************************************************************/
- static void usb1_function_dmaint_fifo2buf (uint16_t pipe)
- {
- uint32_t remain;
- uint16_t useport;
-
- if (g_usb1_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_DONE)
- {
- useport = (uint16_t)(g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
-
- if (useport == USB_FUNCTION_D0FIFO_DMA)
- {
- remain = Userdef_USB_usb1_function_stop_dma0();
- usb1_function_dma_stop_d0(pipe, remain);
-
- if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
- {
- if (g_usb1_function_DmaStatus[USB_FUNCTION_D0FIFO] == USB_FUNCTION_DMA_BUSYEND)
- {
- USB201.D0FIFOCTR = USB_FUNCTION_BITBCLR;
- g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
- }
- else
- {
- usb1_function_enable_brdy_int(pipe);
- }
- }
- }
- else
- {
- remain = Userdef_USB_usb1_function_stop_dma1();
- usb1_function_dma_stop_d1(pipe, remain);
-
- if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
- {
- if (g_usb1_function_DmaStatus[USB_FUNCTION_D1FIFO] == USB_FUNCTION_DMA_BUSYEND)
- {
- USB201.D1FIFOCTR = USB_FUNCTION_BITBCLR;
- g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
- }
- else
- {
- usb1_function_enable_brdy_int(pipe);
- }
- }
- }
- }
- }
-
- /*******************************************************************************
- * Function Name: usb1_function_dmaint_buf2fifo
- * Description : Executes write completion in FIFO by DMAC.
- * Arguments : uint16_t pipe : pipe number
- * Return Value : none
- *******************************************************************************/
- static void usb1_function_dmaint_buf2fifo (uint16_t pipe)
- {
- uint32_t remain;
- uint16_t useport;
-
- useport = (uint16_t)(g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
-
- if (useport == USB_FUNCTION_D0FIFO_DMA)
- {
- remain = Userdef_USB_usb1_function_stop_dma0();
- usb1_function_dma_stop_d0(pipe, remain);
-
- if (g_usb1_function_DmaBval[USB_FUNCTION_D0FIFO] != 0)
- {
- RZA_IO_RegWrite_16(&USB201.D0FIFOCTR,
- 1,
- USB_DnFIFOCTR_BVAL_SHIFT,
- USB_DnFIFOCTR_BVAL);
- }
- }
- else
- {
- remain = Userdef_USB_usb1_function_stop_dma1();
- usb1_function_dma_stop_d1(pipe, remain);
-
- if (g_usb1_function_DmaBval[USB_FUNCTION_D1FIFO] != 0)
- {
- RZA_IO_RegWrite_16(&USB201.D1FIFOCTR,
- 1,
- USB_DnFIFOCTR_BVAL_SHIFT,
- USB_DnFIFOCTR_BVAL);
- }
- }
-
- usb1_function_enable_bemp_int(pipe);
- }
-
- /* End of File */
|