| /* ---------------------------------------------------------------------------- | |
| * SAM Software Package License | |
| * ---------------------------------------------------------------------------- | |
| * Copyright (c) 2015, 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. | |
| * ---------------------------------------------------------------------------- | |
| */ | |
| #ifndef _SDMMC_PERIPH_H_ | |
| #define _SDMMC_PERIPH_H_ | |
| /*---------------------------------------------------------------------------- | |
| * Headers | |
| *----------------------------------------------------------------------------*/ | |
| #include "chip.h" | |
| #ifdef __cplusplus | |
| extern "C" { | |
| #endif | |
| struct _SdmmcCommand; | |
| /*---------------------------------------------------------------------------- | |
| * Definitions | |
| *----------------------------------------------------------------------------*/ | |
| /* This structure is private to the SDMMC Driver. | |
| * Allocate it but ignore its members. */ | |
| struct sdmmc_set | |
| { | |
| uint32_t id; /* SDMMC peripheral ID (ID_SDMMCx) */ | |
| Sdmmc *regs; /* set of SDMMC hardware registers */ | |
| uint32_t tc_id; /* Timer/Counter peripheral ID (ID_TCx) */ | |
| TcChannel *timer; /* set of TC channel hardware registers */ | |
| uint32_t *table; /* ADMA descriptor table, or NULL when DMA | |
| * is not used */ | |
| uint32_t table_size; /* Max size of the ADMA descriptor table, | |
| * in lines */ | |
| bool use_polling; /* polling mode */ | |
| bool use_set_blk_cnt; /* implicit SET_BLOCK_COUNT command */ | |
| uint16_t blk_size; /* max data block size, in bytes */ | |
| uint32_t dev_freq; /* frequency of clock provided to memory | |
| * device, in Hz */ | |
| volatile uint8_t state; | |
| struct _SdmmcCommand *cmd; /* pointer to the command being processed */ | |
| uint16_t blk_index; /* count of data blocks tranferred already, | |
| * in the context of the command and data | |
| * transfer being executed */ | |
| uint8_t resp_len; /* size of the response, once retrieved, | |
| * in the context of the command being | |
| * executed, expressed in 32-bit words */ | |
| bool expect_auto_end; /* waiting for completion of Auto CMD12 */ | |
| }; | |
| /*---------------------------------------------------------------------------- | |
| * Exported functions | |
| *----------------------------------------------------------------------------*/ | |
| /** | |
| * \brief Initialize the specified driver instance and the associated SDMMC | |
| * peripheral. | |
| * \param set Pointer to uninitialized driver instance data. | |
| * \param regs Base address of registers of the SDMMC peripheral. | |
| * \param sdmmc_id SDMMC peripheral ID (ID_SDMMCx). | |
| * \param tc_id TC peripheral ID (ID_TCx). | |
| * \note The application shall have enabled the clock assigned to this | |
| * Timer/Counter peripheral. | |
| * \param tc_ch TC channel number, within the Timer/Counter module designated | |
| * by tc_id. Every instance of the SDMMC Driver requires a Timer/Counter channel | |
| * for its exclusive usage. | |
| * \param dma_buf Buffer allocated by the application, required when DMA is | |
| * used. This is where the DMA descriptor table will be set up. The larger | |
| * the buffer is, the greater throughput we achieve. Up to 4 KiB. Shall be | |
| * word-aligned. NULL to have the CPU read/write data, word by word. | |
| * \param dma_buf_size Size of the dma_buf buffer, in words. | |
| * \return true if successful, false if a parameter is assigned an unsupported | |
| * value. | |
| */ | |
| bool sdmmc_initialize(struct sdmmc_set *set, Sdmmc *regs, uint32_t sdmmc_id, | |
| uint32_t tc_id, uint32_t tc_ch, uint32_t *dma_buf, uint32_t dma_buf_size); | |
| #ifdef __cplusplus | |
| } | |
| #endif | |
| #endif /* #ifndef _SDMMC_PERIPH_H_ */ |