URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [rtos/] [freertos-6.1.1/] [Demo/] [CORTEX_AT91SAM3U256_IAR/] [AT91Lib/] [peripherals/] [mci/] [mci_hs.h] - Rev 580
Compare with Previous | Blame | View Log
/* ---------------------------------------------------------------------------- * ATMEL Microcontroller Software Support * ---------------------------------------------------------------------------- * Copyright (c) 2008, Atmel Corporation * * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the disclaimer below. * * Atmel's name may not be used to endorse or promote products derived from * this software without specific prior written permission. * * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ---------------------------------------------------------------------------- */ //------------------------------------------------------------------------------ /// \page "mci" /// /// !Purpose /// /// mci-interface driver /// /// !Usage /// /// -# MCI_Init: Initializes a MCI driver instance and the underlying peripheral. /// -# MCI_SetSpeed : Configure the MCI CLKDIV in the MCI_MR register. /// -# MCI_SendCommand: Starts a MCI transfer. /// -# MCI_Handler : Interrupt handler which is called by ISR handler. /// -# MCI_SetBusWidth : Configure the MCI SDCBUS in the MCI_SDCR register. //------------------------------------------------------------------------------ #ifndef MCI_HS_H #define MCI_HS_H //------------------------------------------------------------------------------ // Headers //------------------------------------------------------------------------------ #include <board.h> //------------------------------------------------------------------------------ // Constants //------------------------------------------------------------------------------ /// Transfer is pending. #define MCI_STATUS_PENDING 1 /// Transfer has been aborted because an error occured. #define MCI_STATUS_ERROR 2 /// Card did not answer command. #define MCI_STATUS_NORESPONSE 3 /// MCI driver is currently in use. #define MCI_ERROR_LOCK 1 /// MCI configuration with 1-bit data bus on slot A (for MMC cards). #define MCI_MMC_SLOTA (AT91C_MCI_SCDSEL_SLOTA | AT91C_MCI_SCDBUS_1BIT) /// MCI configuration with 4-bit data bus on slot A (for SD cards). #define MCI_SD_SLOTA (AT91C_MCI_SCDSEL_SLOTA | AT91C_MCI_SCDBUS_4BITS) #ifdef AT91C_MCI_SCDBUS_8BITS /// MCI configuration with 1-bit data bus on slot A (for MMC cards). #define MCI_MMC4_SLOTA (AT91C_MCI_SCDSEL_SLOTA | AT91C_MCI_SCDBUS_8BITS) #endif #ifdef AT91C_MCI_SCDSEL_SLOTB /// MCI configuration with 1-bit data bus on slot B (for MMC cards). #define MCI_MMC_SLOTB (AT91C_MCI_SCDSEL_SLOTB | AT91C_MCI_SCDBUS_1BIT) /// MCI configuration with 4-bit data bus on slot B (for SD cards). #define MCI_SD_SLOTB (AT91C_MCI_SCDSEL_SLOTB | AT91C_MCI_SCDBUS_4BITS) #ifdef AT91C_MCI_SCDBUS_8BITS /// MCI configuration with 1-bit data bus on slot A (for MMC cards). #define MCI_MMC4_SLOTB (AT91C_MCI_SCDSEL_SLOTB | AT91C_MCI_SCDBUS_8BITS) #endif #else #define MCI_MMC_SLOTB MCI_MMC_SLOTA #define MCI_SD_SLOTB MCI_SD_SLOTA #endif /// Start new data transfer #define MCI_NEW_TRANSFER 0 /// Continue data transfer #define MCI_CONTINUE_TRANSFER 1 /// Stop data transfer #define MCI_STOP_TRANSFER 2 /// MCI SD Bus Width 1-bit #define MCI_SDCBUS_1BIT (0 << 7) /// MCI SD Bus Width 4-bit #define MCI_SDCBUS_4BIT (1 << 7) /// MCI SD Bus Width 8-bit #define MCI_SDCBUS_8BIT (3 << 6) /// The MCI Clock Speed after initialize (400K) #define MCI_INITIAL_SPEED 400000 /// MCI using DMA? #define MCI_DMA_ENABLE 1 //------------------------------------------------------------------------------ // Types //------------------------------------------------------------------------------ /// MCI end-of-transfer callback function. typedef void (*MciCallback)(unsigned char status, void *pCommand); //------------------------------------------------------------------------------ /// MCI Transfer Request prepared by the application upper layer. This structure /// is sent to the MCI_SendCommand function to start the transfer. At the end of /// the transfer, the callback is invoked by the interrupt handler. //------------------------------------------------------------------------------ typedef struct _MciCmd { /// Command code. unsigned int cmd; /// Command argument. unsigned int arg; /// Data buffer. unsigned char *pData; /// Size of data block in bytes. unsigned short blockSize; /// Number of blocks to be transfered unsigned short nbBlock; /// Response buffer. unsigned int *pResp; /// Optional user-provided callback function. MciCallback callback; /// Optional argument to the callback function. void *pArg; /// SD card response type. unsigned char resType; /// Indicate if there is data transfer unsigned char dataTran; /// Indicate if continue to transfer data unsigned char tranType; /// Indicates if the command is a read operation. unsigned char isRead; /// Command status. volatile int status; } MciCmd; //------------------------------------------------------------------------------ /// MCI driver structure. Holds the internal state of the MCI driver and /// prevents parallel access to a MCI peripheral. //------------------------------------------------------------------------------ typedef struct { /// Pointer to a MCI peripheral. AT91S_MCI *pMciHw; /// Pointer to currently executing command. MciCmd *pCommand; /// MCI peripheral identifier. unsigned char mciId; /// MCI HW mode unsigned char mciMode; /// Mutex. volatile char semaphore; } Mci; //------------------------------------------------------------------------------ // Global functions //------------------------------------------------------------------------------ extern void MCI_Init( Mci *pMci, AT91PS_MCI pMciHw, unsigned char mciId, unsigned int mode); extern unsigned int MCI_GetSpeed(Mci *pMci, unsigned int *mciDiv); extern unsigned int MCI_SetSpeed(Mci *pMci, unsigned int mciSpeed, unsigned int mciLimit); extern unsigned char MCI_SendCommand(Mci *pMci, MciCmd *pMciCmd); extern void MCI_Handler(Mci *pMci); extern unsigned char MCI_IsTxComplete(MciCmd *pMciCmd); extern unsigned char MCI_CheckBusy(Mci *pMci); extern void MCI_Close(Mci *pMci); extern void MCI_EnableHsMode(Mci * pMci, unsigned char hsEnable); extern void MCI_SetBusWidth(Mci *pMci, unsigned char busWidth); extern unsigned int MCI_FifoTransfer(Mci * pMci, MciCmd * pCommand); #endif //#ifndef MCI_HS_H