⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ffsport_spi.c

📁 The Fat Fs module is a middleware that written in ANSI C. There is no platform dependence, so long a
💻 C
字号:
/***********************************************************
*         MMC/SD-interface to SPI-slot of ATMega128        *
*                                                          *
*          by  Frank Goetze  -  www.embedded-os.de         *
************************************************************
*                      FFSPort_MMC.c                       *
*                   MMC/SD TO SPI PORT                     *
************************************************************
*      - code generation            Frank Goetze   09/2007 *
***********************************************************/

#include "../../../inc/MMC/ATMega128/FFSPort_SPI.h"

/****************** constant variables ********************/
#define  CPU_CRISTAL_CLK  14745600UL                       // processor cristal-clock in Hz
OS_CONST U08 OS_ROMDATA SPI_c[] = {0x80,0x00,0x81,0x01,0x82,0x02,0x03};

/*
************************************************************
*          set max possible baudrate and return this
************************************************************
*/
U32 FFSPort_MMC_SetBR(U32 maxclk)
{
    U08 i;
	
    i = 0;
    while(((CPU_CRISTAL_CLK / (2 << i)) > maxclk) && (i < 6)) i++;
    SPCR = (SPCR & 0xFC) | (SPI_c[i] & 0x03);
    SPSR = SPI_c[i] >> 7;
    return(CPU_CRISTAL_CLK / (2 << i));
}

/*
************************************************************
*            write a char and read one back
************************************************************
*/
U08 FFSPort_MMC_Send(U08 w)
{
    SPDR = w;
    while(!(SPSR & (1 << SPIF)));
    return(SPDR);
}

/*
************************************************************
*              reinitialise the SPI-port
************************************************************
*/
U08 FFSPort_MMC_ReInit(void)
{
    U08 i;
    
    SPCR   = 0x5F;                                         // 0101 1111: set enable,MSB,master,lowest-speed
    i      = SPSR;                                         // clear flags
    SPSR   = 0x00;                                         // normal-clk
    FFSPort_MMC_SetBR(400000);                             // set SPI-clk to max 400kHz as startup (should never be > 400kHz, says MMC)
    return(0);                                             // return actual alltimes ok.
}
/*
************************************************************
*               initialise the SPI-port
************************************************************
*/
U08 FFSPort_MMC_Init(void)
{
    PORTB |= 0x3F;                                         // 0011 1111: set WE,CD,MISO,MOSI,SCK,SS high (MISO with pull-up)
    DDRB  |= 0x07;                                         // 0000 0111: set MOSI,SCK,SS as output
    DDRB  &= 0xC7;                                         // 1100 0111: set WE,CD,MISO as input
    return(FFSPort_MMC_ReInit());
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -