SDHI_driver patch (mbedOS 5.11.5)
Diff: mbed-os-program/mbed-os/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/SDHI_driver/sdhi_low.c
- Revision:
- 2:7c75ab32d7c9
- Parent:
- 1:b07be64e592e
diff -r b07be64e592e -r 7c75ab32d7c9 mbed-os-program/mbed-os/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/SDHI_driver/sdhi_low.c
--- a/mbed-os-program/mbed-os/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/SDHI_driver/sdhi_low.c Mon Mar 18 12:48:38 2019 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1055 +0,0 @@
-/*******************************************************************************
-* 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) 2013 Renesas Electronics Corporation. All rights reserved.
-*******************************************************************************/
-/*******************************************************************************
-* File Name : sd_dev_low.c
-* $Rev: $
-* $Date:: $
-* Device(s) : RZ/A1H
-* Tool-Chain : DS-5 Ver 5.8
-* : ARM Complier
-* OS :
-* H/W Platform : RZ/A1H CPU Board
-* Description : RZ/A1H SD Driver Sample Program
-* Operation :
-* Limitations :
-*******************************************************************************/
-
-
-/******************************************************************************
-Includes <System Includes> , "Project Includes"
-******************************************************************************/
-#include <stdio.h>
-#include <string.h>
-#include "r_typedefs.h"
-#include "iodefine.h"
-#include "rza_io_regrw.h"
-/*#include "devdrv_intc.h"*/
-#include "sdif.h"
-#include "sd_cfg.h"
-/*#include "sd_dev_dmacdrv.h"*/
-#include "us_ticker_api.h"
-#include "cmsis_os2.h"
-#include "mbed_assert.h"
-#include "pinmap.h"
-
-
-/******************************************************************************
-Typedef definitions
-******************************************************************************/
-
-
-/******************************************************************************
-Macro definitions
-******************************************************************************/
-//#define MTU_TIMER_CNT 32 /* P-phy = 32MHz */
-#define INT_LEVEL_SDHI 10 /* SDHI interrupt level */
-#define SDHI_PINS_COMMON 2
-#define SDHI_PINS_SERIAL 3
-#define SDHI_PINS_PARALLEL 6
-
-#if defined(SDCFG_SDMODE_1BIT)
-# define SDHI_PORT_MODE SD_PORT_SERIAL
-#else
-# define SDHI_PORT_MODE SD_PORT_PARALLEL
-#endif
-
-/******************************************************************************
-Imported global variables and functions (from other files)
-******************************************************************************/
-
-
-/******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-******************************************************************************/
-
-
-/******************************************************************************
-Private global variables and functions
-******************************************************************************/
-#if 0
-static uint8_t g_sdhi_priority_backup;
-#endif
-
-
-
-static const PinName SDHIpin_Common[SDHI_COUNT][SDHI_PINS_COMMON] = { /* WP & CD */
- {P4_8, P4_9},
- {P3_8, P3_9}
-};
-
-static const PinName SDHIpin_serial[SDHI_COUNT][SDHI_PINS_SERIAL] = { /* CLK CMD D0 */
- {P4_11, P4_12, P4_13},
- {P3_11, P3_12, P3_13}
-};
-
-static const PinName SDHIpin_parallel[SDHI_COUNT][SDHI_PINS_PARALLEL] = { /* CLK CMD D0-D3 */
- {P4_10, P4_11, P4_12, P4_13, P4_14, P4_15},
- {P3_10, P3_11, P3_12, P3_13, P3_14, P3_15}
-};
-
-
-static const PinMap PinMap_SDHI_PIN[] = {
- /* pin | periph| func */
- {P4_8 , SDHI_0, 3}, /* SD_CD_0 */
- {P4_9 , SDHI_0, 3}, /* SD_WP_0 */
- {P4_10 , SDHI_0, 3}, /* SD_D1_0 */
- {P4_11 , SDHI_0, 3}, /* SD_D0_0 */
- {P4_12 , SDHI_0, 3}, /* SD_CLK_0 */
- {P4_13 , SDHI_0, 3}, /* SD_CMD_0 */
- {P4_14 , SDHI_0, 3}, /* SD_D3_0 */
- {P4_15 , SDHI_0, 3}, /* SD_D2_0 */
- /*----------------*/
- {P3_8 , SDHI_1, 7}, /* SD_CD_1 */
- {P3_9 , SDHI_1, 7}, /* SD_WP_1 */
- {P3_10 , SDHI_1, 7}, /* SD_D1_1 */
- {P3_11 , SDHI_1, 7}, /* SD_D0_1 */
- {P3_12 , SDHI_1, 7}, /* SD_CLK_1 */
- {P3_13 , SDHI_1, 7}, /* SD_CMD_1 */
- {P3_14 , SDHI_1, 7}, /* SD_D3_1 */
- {P3_15 , SDHI_1, 7}, /* SD_D2_1 */
- {NC , NC , 0}
-};
-
-
-
-static unsigned long _ulStart = 0;
-static unsigned long _ulDelta = 0;
-static const ticker_data_t *_ticker;
-
-//static int sddev_init_0(void);
-//static int sddev_init_1(void);
-//static int sddev_set_port_0(int mode);
-//static int sddev_set_port_1(int mode);
-
-static int sddev_init_dma_0(unsigned long buff,unsigned long reg,long cnt,int dir);
-static int sddev_init_dma_1(unsigned long buff,unsigned long reg,long cnt,int dir);
-
-static int sddev_wait_dma_end_0(long cnt);
-static int sddev_wait_dma_end_1(long cnt);
-
-static int sddev_disable_dma_0(void);
-static int sddev_disable_dma_1(void);
-
-static void sddev_sd_int_handler_0(uint32_t int_sense);
-static void sddev_sd_int_handler_1(uint32_t int_sense);
-static void sddev_sdio_int_handler_0(uint32_t int_sense);
-static void sddev_sdio_int_handler_1(uint32_t int_sense);
-static void sddev_start_timer(int msec);
-static void sddev_end_timer(void);
-static int sddev_check_timer(void);
-
-/******************************************************************************
-* Function Name: int sddev_cmd0_sdio_mount(int sd_port);
-* Description : Select to issue CMD0 before SDIO Mount
-* Arguments : none
-* Return Value : SD_OK : issue CMD0
-* : SD_ERR : not issue CMD0
-******************************************************************************/
-int sddev_cmd0_sdio_mount(int sd_port)
-{
-#ifdef SDCFG_IO
- return SD_ERR;
-#else
- return SD_ERR;
-#endif
-}
-
-/******************************************************************************
-* Function Name: int sddev_cmd8_sdio_mount(int sd_port);
-* Description : Select to issue CMD8 before SDIO Mount
-* Arguments : none
-* Return Value : SD_OK : issue CMD8
-* : SD_ERR : not issue CMD8
-******************************************************************************/
-int sddev_cmd8_sdio_mount(int sd_port)
-{
-#ifdef SDCFG_IO
- return SD_OK;
-#else
- return SD_ERR;
-#endif
-}
-
-
-
-/******************************************************************************
-* Function Name: int sddev_init(void);
-* Description : Initialize H/W to use SDHI
-* Arguments : none
-* Return Value : success : SD_OK
-* : fail : SD_ERR
-******************************************************************************/
-int sddev_init(int sd_port)
-{
- if ( sd_port >= SDHI_COUNT )
- return SD_ERR;
-
-
- volatile uint8_t dummy_buf;
-
- CPG.STBCR12 = 0xF0u; /* [1], [1], [1], [1], SDHI00, SDHI01, SDHI10, SDHI11 */
- dummy_buf = CPG.STBCR12; /* (Dummy read) */
-
-
- for( uint32_t no=0; no < SDHI_PINS_COMMON; no++ )
- {
- if ( pinmap_peripheral(SDHIpin_Common[sd_port][no], PinMap_SDHI_PIN ) != sd_port)
- {
- return SD_ERR;
- }
- pinmap_pinout(SDHIpin_Common[sd_port][no], PinMap_SDHI_PIN);
- }
-
- sddev_set_port(sd_port, SDHI_PORT_MODE);
-
-#ifdef SDCFG_HWINT
- if ( sd_port == (uint32_t)SDHI_0 )
- {
- InterruptHandlerRegister(SDHI0_0_IRQn, sddev_sd_int_handler_0);
- GIC_SetPriority(SDHI0_0_IRQn, INT_LEVEL_SDHI);
- GIC_EnableIRQ(SDHI0_0_IRQn);
-
- InterruptHandlerRegister(SDHI0_3_IRQn, sddev_sd_int_handler_0);
- GIC_SetPriority(SDHI0_3_IRQn, INT_LEVEL_SDHI);
- GIC_EnableIRQ(SDHI0_3_IRQn);
-
- InterruptHandlerRegister(SDHI0_1_IRQn, sddev_sdio_int_handler_0);
- GIC_SetPriority(SDHI0_1_IRQn, INT_LEVEL_SDHI);
- GIC_EnableIRQ(SDHI0_1_IRQn);
- }
- else if ( sd_port == (uint32_t)SDHI_1 )
- {
- InterruptHandlerRegister(SDHI1_0_IRQn, sddev_sd_int_handler_1);
- GIC_SetPriority(SDHI1_0_IRQn, INT_LEVEL_SDHI);
- GIC_EnableIRQ(SDHI1_0_IRQn);
-
- InterruptHandlerRegister(SDHI1_3_IRQn, sddev_sd_int_handler_1);
- GIC_SetPriority(SDHI1_3_IRQn, INT_LEVEL_SDHI);
- GIC_EnableIRQ(SDHI1_3_IRQn);
-
- InterruptHandlerRegister(SDHI1_1_IRQn, sddev_sdio_int_handler_1);
- GIC_SetPriority(SDHI1_1_IRQn, INT_LEVEL_SDHI);
- GIC_EnableIRQ(SDHI1_1_IRQn);
- }
-#endif
-
- /* ---- wait card detect ---- */
- osDelay(1000); /* wait 1s */
-
- return SD_OK;
-}
-
-
-/******************************************************************************
-* Function Name: int sddev_power_on(int sd_port);
-* Description : Power-on H/W to use SDHI
-* Arguments : none
-* Return Value : success : SD_OK
-* : fail : SD_ERR
-******************************************************************************/
-int sddev_power_on(int sd_port)
-{
- /* ---Power On SD ---- */
-
- /* ---- Wait for SD Wake up ---- */
- osDelay(100); /* wait 100ms */
-
- return SD_OK;
-}
-
-/******************************************************************************
-* Function Name: int sddev_power_off(int sd_port);
-* Description : Power-off H/W to use SDHI
-* Arguments : none
-* Return Value : success : SD_OK
-* : fail : SD_ERR
-******************************************************************************/
-int sddev_power_off(int sd_port)
-{
- return SD_OK;
-}
-
-/******************************************************************************
-* Function Name: int sddev_read_data(int sd_port, unsigned char *buff,unsigned long reg_addr,long num);
-* Description : read from SDHI buffer FIFO
-* Arguments : unsigned char *buff : buffer addrees to store reading datas
-* : unsigned long reg_addr : SDIP FIFO address
-* : long num : counts to read(unit:byte)
-* Return Value : success : SD_OK
-* : fail : SD_ERR
-******************************************************************************/
-int sddev_read_data(int sd_port, unsigned char *buff,unsigned long reg_addr,long num)
-{
- long i;
- long cnt;
- unsigned long *reg;
- unsigned long *ptr_l;
- unsigned char *ptr_c;
- unsigned long tmp;
-
- reg = (unsigned long *)(reg_addr);
-
- cnt = (num / 4);
- if(((unsigned long)buff & 0x3) != 0)
- {
- ptr_c = (unsigned char *)buff;
- for(i = cnt; i > 0 ; i--)
- {
- tmp = *reg;
- *ptr_c++ = (unsigned char)(tmp);
- *ptr_c++ = (unsigned char)(tmp >> 8);
- *ptr_c++ = (unsigned char)(tmp >> 16);
- *ptr_c++ = (unsigned char)(tmp >> 24);
- }
-
- cnt = (num % 4);
- if( cnt != 0 )
- {
- tmp = *reg;
- for(i = cnt; i > 0 ; i--)
- {
- *ptr_c++ = (unsigned char)(tmp);
- tmp >>= 8;
- }
- }
- }
- else
- {
- ptr_l = (unsigned long *)buff;
- for(i = cnt; i > 0 ; i--)
- {
- *ptr_l++ = *reg;
- }
-
- cnt = (num % 4);
- if( cnt != 0 )
- {
- ptr_c = (unsigned char *)ptr_l;
- tmp = *reg;
- for(i = cnt; i > 0 ; i--)
- {
- *ptr_c++ = (unsigned char)(tmp);
- tmp >>= 8;
- }
- }
- }
-
- return SD_OK;
-}
-
-/******************************************************************************
-* Function Name: int sddev_write_data(int sd_port, unsigned char *buff,unsigned long reg_addr,long num);
-* Description : write to SDHI buffer FIFO
-* Arguments : unsigned char *buff : buffer addrees to store writting datas
-* : unsigned long reg_addr : SDIP FIFO address
-* : long num : counts to write(unit:byte)
-* Return Value : success : SD_OK
-* : fail : SD_ERR
-******************************************************************************/
-int sddev_write_data(int sd_port, unsigned char *buff,unsigned long reg_addr,long num)
-{
- long i;
- unsigned long *reg = (unsigned long *)(reg_addr);
- unsigned long *ptr = (unsigned long *)buff;
- unsigned long tmp;
-
- /* dont care non 4byte allignment data */
- num += 3;
- num /= 4;
- if(((unsigned long)buff & 0x3) != 0)
- {
- for(i = num; i > 0 ; i--)
- {
- tmp = *buff++ ;
- tmp |= *buff++ << 8;
- tmp |= *buff++ << 16;
- tmp |= *buff++ << 24;
- *reg = tmp;
- }
- }
- else
- {
- for(i = num; i > 0 ; i--)
- {
- *reg = *ptr++;
- }
- }
-
- return SD_OK;
-}
-
-/******************************************************************************
-* Function Name: unsigned int sddev_get_clockdiv(int sd_port, int clock);
-* Description : write to SDHI buffer FIFO
-* Arguments : int clock : request clock frequency
-* : SD_CLK_50MHz
-* : SD_CLK_25MHz
-* : SD_CLK_20MHz
-* : SD_CLK_10MHz
-* : SD_CLK_5MHz
-* : SD_CLK_1MHz
-* : SD_CLK_400kHz
-* Return Value : clock div value
-* : SD_DIV_2 : 1/2 clock
-* : SD_DIV_2 : 1/4 clock
-* : SD_DIV_2 : 1/8 clock
-* : SD_DIV_2 : 1/16 clock
-* : SD_DIV_2 : 1/128 clock
-* : SD_DIV_2 : 1/256 clock
-******************************************************************************/
-unsigned int sddev_get_clockdiv(int sd_port, int clock)
-{
- unsigned int div;
-
- switch(clock)
- {
- case SD_CLK_50MHz:
- div = SD_DIV_2; /* 64MHz/2 = 32MHz */
- break;
- case SD_CLK_25MHz:
- div = SD_DIV_4; /* 64MHz/4 = 16MHz */
- break;
- case SD_CLK_20MHz:
- div = SD_DIV_4; /* 64MHz/4 = 16MHz */
- break;
- case SD_CLK_10MHz:
- div = SD_DIV_8; /* 64MHz/8 = 8MHz */
- break;
- case SD_CLK_5MHz:
- div = SD_DIV_16; /* 64MHz/16 = 4MHz */
- break;
- case SD_CLK_1MHz:
- div = SD_DIV_128; /* 64MHz/128 = 512kHz */
- break;
- case SD_CLK_400kHz:
- div = SD_DIV_256; /* 64MHz/256 = 256kHz */
- break;
- default:
- div = SD_DIV_256;
- break;
- }
-
- return div;
-}
-
-/******************************************************************************
-* Function Name: int sddev_set_port(int sd_port, int mode);
-* Description : setting ports to use MMCHI
-* Arguments : int mode : SD_PORT_PARALLEL : 4bit mode
-* : SD_PORT_SERIAL : 1bit mode
-* Return Value : success : SD_OK
-* : fail : SD_ERR
-******************************************************************************/
-int sddev_set_port(int sd_port, int mode)
-{
- if ( sd_port >= SDHI_COUNT)
- return SD_ERR;
-
- if(mode == SD_PORT_SERIAL)
- {
- for( uint32_t no=0; no < SDHI_PINS_SERIAL; no++ )
- {
- if ( pinmap_peripheral(SDHIpin_serial[sd_port][no], PinMap_SDHI_PIN ) != sd_port)
- {
- return SD_ERR;
- }
- pinmap_pinout(SDHIpin_serial[sd_port][no], PinMap_SDHI_PIN);
- }
- }
- else if( mode == SD_PORT_PARALLEL )
- {
- for( uint32_t no=0; no < SDHI_PINS_PARALLEL; no++ )
- {
- if ( pinmap_peripheral(SDHIpin_parallel[sd_port][no], PinMap_SDHI_PIN ) != sd_port)
- {
- return SD_ERR;
- }
- pinmap_pinout(SDHIpin_parallel[sd_port][no], PinMap_SDHI_PIN);
- }
- }
- else
- {
- return SD_ERR;
- }
-
- return SD_OK;
-}
-
-
-/******************************************************************************
-* Function Name: int sddev_int_wait(int sd_port, int time);
-* Description : Waitting for SDHI Interrupt
-* Arguments : int time : time out value to wait interrupt
-* Return Value : get interrupt : SD_OK
-* : time out : SD_ERR
-******************************************************************************/
-int sddev_int_wait(int sd_port, int time)
-{
- sddev_start_timer(time);
- while( sddev_check_timer() == SD_OK )
- {
- /* interrupt generated? */
- if(sd_check_int(sd_port) == SD_OK)
- {
- sddev_end_timer();
- return SD_OK;
- }
- }
-
- sddev_end_timer();
-
- return SD_ERR;
-}
-
-/******************************************************************************
-* Function Name: int sddev_init_dma(unsigned long buff,unsigned long reg,long cnt,int dir);
-* Description : Initialize DMAC to transfer data from SDHI FIFO
-* Arguments : unsigned long buff : buffer addrees to transfer datas
-* : unsigned long reg : SDIP FIFO address
-* : long cnt : counts to transfer(unit:byte)
-* : int dir : direction to transfer
-* : : 0 : FIFO -> buffer
-* : : 1 : buffer -> FIFO
-* Return Value : success : SD_OK
-* : fail : SD_ERR
-******************************************************************************/
-int sddev_init_dma(int sd_port, unsigned long buff,unsigned long reg,long cnt,int dir)
-{
- int ret;
-
- if( sd_port == 0 )
- {
- ret = sddev_init_dma_0(buff, reg, cnt, dir);
- }
- else if( sd_port == 1 )
- {
- ret = sddev_init_dma_1(buff, reg, cnt, dir);
- }
-
- return ret;
-}
-
-/******************************************************************************
-* Function Name: static int sddev_init_dma_0(unsigned long buff,unsigned long reg,long cnt,int dir);
-* Description : Initialize DMAC to transfer data from SDHI FIFO
-* Arguments : unsigned long buff : buffer addrees to transfer datas
-* : unsigned long reg : SDIP FIFO address
-* : long cnt : counts to transfer(unit:byte)
-* : int dir : direction to transfer
-* : : 0 : FIFO -> buffer
-* : : 1 : buffer -> FIFO
-* Return Value : success : SD_OK
-* : fail : SD_ERR
-******************************************************************************/
-static int sddev_init_dma_0(unsigned long buff,unsigned long reg,long cnt,int dir)
-{
-#ifdef SDCFG_TRNS_DMA
- dmac_transinfo_t trans_info;
- uint32_t request_factor;
- int32_t ret;
-
- trans_info.count = (uint32_t)cnt;
- #ifdef SDCFG_TRANS_DMA_64
- if( (cnt % 64) != 0 )
- {
- trans_info.src_size = DMAC_TRANS_SIZE_32;
- trans_info.dst_size = DMAC_TRANS_SIZE_32;
- if( reg & 0x0000003f )
- {
- trans_info.src_size = DMAC_TRANS_SIZE_32;
- trans_info.dst_size = DMAC_TRANS_SIZE_32;
- }
- }
- else
- {
- trans_info.src_size = DMAC_TRANS_SIZE_512;
- trans_info.dst_size = DMAC_TRANS_SIZE_512;
- }
- #else
- trans_info.src_size = DMAC_TRANS_SIZE_32;
- trans_info.dst_size = DMAC_TRANS_SIZE_32;
- #endif
-
- if( dir == 0 )
- {
- request_factor = DMAC_REQ_SDHI_0_RX;
- trans_info.src_addr = (uint32_t)reg;
- trans_info.dst_addr = (uint32_t)buff;
- trans_info.saddr_dir = DMAC_TRANS_ADR_NO_INC;
- trans_info.daddr_dir = DMAC_TRANS_ADR_INC;
- }
- else if( dir == 1 )
- {
- request_factor = DMAC_REQ_SDHI_0_TX;
- trans_info.src_addr = (uint32_t)buff;
- trans_info.dst_addr = (uint32_t)reg;
- trans_info.saddr_dir = DMAC_TRANS_ADR_INC;
- trans_info.daddr_dir = DMAC_TRANS_ADR_NO_INC;
- }
-
- sd_DMAC1_PeriReqInit( (const dmac_transinfo_t *)&trans_info,
- DMAC_MODE_REGISTER,
- DMAC_SAMPLE_SINGLE,
- request_factor,
- 0 ); /* Dont care DMAC_REQ_REQD is setting in usb0_host_DMAC1_PeriReqInit() */
-
- ret = sd_DMAC1_Open(DMAC_REQ_MODE_PERI);
- if( ret != 0 )
- {
- printf("DMAC1 Open error!!\n");
- return SD_ERR;
- }
-#endif
-
- return SD_OK;
-}
-
-/******************************************************************************
-* Function Name: static int sddev_init_dma_1(unsigned long buff,unsigned long reg,long cnt,int dir);
-* Description : Initialize DMAC to transfer data from SDHI FIFO
-* Arguments : unsigned long buff : buffer address to transfer datas
-* : unsigned long reg : SDIP FIFO address
-* : long cnt : counts to transfer(unit:byte)
-* : int dir : direction to transfer
-* : : 0 : FIFO -> buffer
-* : : 1 : buffer -> FIFO
-* Return Value : success : SD_OK
-* : fail : SD_ERR
-******************************************************************************/
-static int sddev_init_dma_1(unsigned long buff,unsigned long reg,long cnt,int dir)
-{
-#ifdef SDCFG_TRNS_DMA
- dmac_transinfo_t trans_info;
- uint32_t request_factor;
- int32_t ret;
-
- trans_info.count = (uint32_t)cnt;
- #ifdef SDCFG_TRANS_DMA_64
- if( (cnt % 64) != 0 )
- {
- trans_info.src_size = DMAC_TRANS_SIZE_32;
- trans_info.dst_size = DMAC_TRANS_SIZE_32;
- if( reg & 0x0000003f )
- {
- trans_info.src_size = DMAC_TRANS_SIZE_32;
- trans_info.dst_size = DMAC_TRANS_SIZE_32;
- }
- }
- else
- {
- trans_info.src_size = DMAC_TRANS_SIZE_512;
- trans_info.dst_size = DMAC_TRANS_SIZE_512;
- }
- #else
- trans_info.src_size = DMAC_TRANS_SIZE_32;
- trans_info.dst_size = DMAC_TRANS_SIZE_32;
- #endif
-
- if( dir == 0 )
- {
- request_factor = DMAC_REQ_SDHI_1_RX;
- trans_info.src_addr = (uint32_t)reg;
- trans_info.dst_addr = (uint32_t)buff;
- trans_info.saddr_dir = DMAC_TRANS_ADR_NO_INC;
- trans_info.daddr_dir = DMAC_TRANS_ADR_INC;
- }
- else if( dir == 1 )
- {
- request_factor = DMAC_REQ_SDHI_1_TX;
- trans_info.src_addr = (uint32_t)buff;
- trans_info.dst_addr = (uint32_t)reg;
- trans_info.saddr_dir = DMAC_TRANS_ADR_INC;
- trans_info.daddr_dir = DMAC_TRANS_ADR_NO_INC;
- }
-
- sd_DMAC2_PeriReqInit( (const dmac_transinfo_t *)&trans_info,
- DMAC_MODE_REGISTER,
- DMAC_SAMPLE_SINGLE,
- request_factor,
- 0 ); /* Dont care DMAC_REQ_REQD is setting in usb0_host_DMAC1_PeriReqInit() */
-
- ret = sd_DMAC2_Open(DMAC_REQ_MODE_PERI);
- if( ret != 0 )
- {
- printf("DMAC1 Open error!!\n");
- return SD_ERR;
- }
-#endif
-
- return SD_OK;
-}
-
-/******************************************************************************
-* Function Name: int sddev_wait_dma_end(int sd_port, long cnt);
-* Description : Wait to complete DMAC transfer
-* Arguments : long cnt : counts to transfer(unit:byte)
-* Return Value : success : SD_OK
-* : fail : SD_ERR
-******************************************************************************/
-int sddev_wait_dma_end(int sd_port, long cnt)
-{
- int ret;
-
- if( sd_port == 0 )
- {
- ret = sddev_wait_dma_end_0(cnt);
- }
- else if( sd_port == 1 )
- {
- ret = sddev_wait_dma_end_1(cnt);
- }
-
- return ret;
-}
-
-/******************************************************************************
-* Function Name: static int sddev_wait_dma_end_0(long cnt);
-* Description : Wait to complete DMAC transfer
-* Arguments : long cnt : counts to transfer(unit:byte)
-* Return Value : success : SD_OK
-* : fail : SD_ERR
-******************************************************************************/
-static int sddev_wait_dma_end_0(long cnt)
-{
-#ifdef SDCFG_TRNS_DMA
- int loop;
- int time;
-
- time = (cnt / 512);
- time = ((time * 1000) / 1024);
- if(time < 1000)
- {
- time = 1000;
- }
-
- if(time > (0x0000ffff / MTU_TIMER_CNT))
- {
- /* @1000ms */
- loop = (time / 1000);
- if( (time % 1000) != 0 )
- {
- loop++;
- }
- time = 1000;
- }
- else
- {
- loop = 1;
- }
-
- do{
- sddev_start_timer(time);
-
- while(1)
- {
- /* get end flag? */
- if( sd_DMAC1_Get_Endflag() == 1 )
- {
- sddev_end_timer();
- return SD_OK;
- }
- /* detect timeout? */
- if(sddev_check_timer() == SD_ERR)
- {
- break;
- }
- }
-
- loop--;
- if( loop <= 0 )
- {
- break;
- }
-
- } while(1);
-
- sddev_end_timer();
-
- return SD_ERR;
-#else
- return SD_OK;
-
-#endif
-}
-
-/******************************************************************************
-* Function Name: static int sddev_wait_dma_end_1(long cnt);
-* Description : Wait to complete DMAC transfer
-* Arguments : long cnt : counts to transfer(unit:byte)
-* Return Value : success : SD_OK
-* : fail : SD_ERR
-******************************************************************************/
-static int sddev_wait_dma_end_1(long cnt)
-{
-#ifdef SDCFG_TRNS_DMA
- int loop;
- int time;
-
- time = (cnt / 512);
- time = ((time * 1000) / 1024);
- if(time < 1000)
- {
- time = 1000;
- }
-
- if(time > (0x0000ffff / MTU_TIMER_CNT))
- {
- /* @1000ms */
- loop = (time / 1000);
- if( (time % 1000) != 0 )
- {
- loop++;
- }
- time = 1000;
- }
- else
- {
- loop = 1;
- }
-
- do{
- sddev_start_timer(time);
-
- while(1)
- {
- /* get end flag? */
- if( sd_DMAC2_Get_Endflag() == 1 )
- {
- sddev_end_timer();
- return SD_OK;
- }
- /* detect timeout? */
- if(sddev_check_timer() == SD_ERR)
- {
- break;
- }
- }
-
- loop--;
- if( loop <= 0 )
- {
- break;
- }
-
- } while(1);
-
- sddev_end_timer();
-
- return SD_ERR;
-#else
- return SD_OK;
-
-#endif
-}
-
-/******************************************************************************
-* Function Name: int sddev_disable_dma(int sd_port);
-* Description : Disable DMAC transfer
-* Arguments : none
-* Return Value : success : SD_OK
-* : fail : SD_ERR
-******************************************************************************/
-int sddev_disable_dma(int sd_port)
-{
- int ret;
-
- if( sd_port == 0 )
- {
- ret = sddev_disable_dma_0();
- }
- else
- {
- ret = sddev_disable_dma_1();
- }
- return ret;
-}
-
-/******************************************************************************
-* Function Name: static int sddev_disable_dma_0(void);
-* Description : Disable DMAC transfer
-* Arguments : none
-* Return Value : success : SD_OK
-* : fail : SD_ERR
-******************************************************************************/
-static int sddev_disable_dma_0(void)
-{
-#ifdef SDCFG_TRNS_DMA
- uint32_t remain;
-
- sd_DMAC1_Close(&remain);
-#endif
- return SD_OK;
-}
-
-/******************************************************************************
-* Function Name: staticint sddev_disable_dma_1(void);
-* Description : Disable DMAC transfer
-* Arguments : none
-* Return Value : success : SD_OK
-* : fail : SD_ERR
-******************************************************************************/
-static int sddev_disable_dma_1(void)
-{
-#ifdef SDCFG_TRNS_DMA
- uint32_t remain;
-
- sd_DMAC2_Close(&remain);
-#endif
- return SD_OK;
-}
-
-/******************************************************************************
-* Function Name: int sddev_loc_cpu(int sd_port);
-* Description : lock cpu to disable interrupt
-* Arguments : none
-* Return Value : success : SD_OK
-* : fail : SD_ERR
-******************************************************************************/
-int sddev_loc_cpu(int sd_port)
-{
-#if 0
- R_INTC_GetMaskLevel(&g_sdhi_priority_backup);
- R_INTC_SetMaskLevel(0);
- core_util_critical_section_enter();
-#endif
-
- return SD_OK;
-}
-
-/******************************************************************************
-* Function Name: int sddev_unl_cpu(int sd_port);
-* Description : unlock cpu to enable interrupt
-* Arguments : none
-* Return Value : success : SD_OK
-* : fail : SD_ERR
-******************************************************************************/
-int sddev_unl_cpu(int sd_port)
-{
-#if 0
- R_INTC_SetMaskLevel(g_sdhi_priority_backup);
- core_util_critical_section_exit();
-#endif
- return SD_OK;
-}
-
-/******************************************************************************
-* Function Name: int sddev_finalize(int sd_port);
-* Description : finalize SDHI
-* Arguments : none
-* Return Value : none
-******************************************************************************/
-int sddev_finalize(int sd_port)
-{
- return SD_OK;
-}
-
-/******************************************************************************
-* Function Name: static void sddev_sd_int_handler_0(uint32_t int_sense);
-* Description : Setting Interrupt function for SDHI(INTC_ID_SDHI0_0,INTC_ID_SDHI0_3)
-* Arguments : Interrupt mode
-* Return Value : none
-******************************************************************************/
-static void sddev_sd_int_handler_0(uint32_t int_sense)
-{
- sd_int_handler(0);
-}
-
-/******************************************************************************
-* Function Name: static void sddev_sd_int_handler_1(uint32_t int_sense);
-* Description : Setting Interrupt function for SDHI(INTC_ID_SDHI0_0,INTC_ID_SDHI0_3)
-* Arguments : Interrupt mode
-* Return Value : none
-******************************************************************************/
-static void sddev_sd_int_handler_1(uint32_t int_sense)
-{
- sd_int_handler(1);
-}
-
-/******************************************************************************
-* Function Name: static void sddev_sdio_int_handler_0(uint32_t int_sense);
-* Description : Setting Interrupt function for SDHI(INTC_ID_SDHI0_1)
-* Arguments : Interrupt mode
-* Return Value : none
-******************************************************************************/
-static void sddev_sdio_int_handler_0(uint32_t int_sense)
-{
- sdio_int_handler(0);
-}
-
-/******************************************************************************
-* Function Name: static void sddev_sdio_int_handler_1(uint32_t int_sense);
-* Description : Setting Interrupt function for SDHI(INTC_ID_SDHI1_1)
-* Arguments : Interrupt mode
-* Return Value : none
-******************************************************************************/
-static void sddev_sdio_int_handler_1(uint32_t int_sense)
-{
- sdio_int_handler(1);
-}
-
-/******************************************************************************
-* Function Name: static void sddev_start_timer(int msec);
-* Description : start timer
-* Arguments :
-* Return Value : none
-******************************************************************************/
-static void sddev_start_timer(int msec)
-{
- _ticker = get_us_ticker_data();
- _ulStart = ticker_read(_ticker);
- _ulDelta = msec*1000ul;
-}
-
-/******************************************************************************
-* Function Name: static void sddev_end_timer(void);
-* Description : end timer
-* Arguments :
-* Return Value : none
-******************************************************************************/
-static void sddev_end_timer(void)
-{
- _ulStart = 0ul;
- _ulDelta = 0ul;
-}
-
-/******************************************************************************
-* Function Name: static int sddev_check_timer(void);
-* Description : check
-* Arguments :
-* Return Value : t
-******************************************************************************/
-static int sddev_check_timer(void)
-{
- if ( _ulStart && _ulDelta )
- {
- return ((ticker_read(_ticker)-_ulStart) < _ulDelta) ? SD_OK : SD_ERR;
- }
- else
- {
- return SD_ERR;
- }
-}
-
-/* End of File */
-