📄 mmc_sd_sdio.c
字号:
//=====================================================================//
// company: COMMIT Incorporated //
// department: HW //
// author: LiYuan //
// version: 1.0 //
// create date: 11/01/2005 //
// release date: //
// final revise date: //
// reviser: //
// file descript: //
//=====================================================================//
#include "MMC_SD_SDIO.h"
#include "CRPM.h"
#include "config.h"
//=====================================================================//
//MMC initialize //
//=====================================================================//
void MMC_Initialize(int dev_num)
{
MMC_IOMultiplex(dev_num);
MMC_Open(dev_num);
MMC_Configure(dev_num);
}
//=====================================================================//
//IO multiplex //
//=====================================================================//
void MMC_IOMultiplex(int dev_num)
{
switch(dev_num)
{
case MMC1:
Pin_Configure(CONF_MMC1_CLK_REG_Addr, PIN_PULLNO, PIN_MODE0);
Pin_Configure(CONF_MMC1_CMD_REG_Addr, PIN_PULLNO, PIN_MODE0);
Pin_Configure(CONF_MMC1_DAT0_REG_Addr, PIN_PULLNO, PIN_MODE0);
Pin_Configure(CONF_MMC1_DAT1_REG_Addr, PIN_PULLNO, PIN_MODE0);
Pin_Configure(CONF_MMC1_DAT2_REG_Addr, PIN_PULLNO, PIN_MODE0);
Pin_Configure(CONF_MMC1_DAT3_REG_Addr, PIN_PULLNO, PIN_MODE0);
break;
case MMC2:
break;
default:
break;
}
}
//=====================================================================//
//MMC open //
//=====================================================================//
void MMC_Open(int dev_num)
{
unsigned char reg_temp;
reg_temp = CLKM13_ARM_IDLECT2_REG;
if((reg_temp & 0x0004) == 0) //ARM_PERCK not enable
CLKM13_ARM_IDLECT2_REG |= 0x0004; //enable ARM_PERCK
reg_temp = CLKM13_ARM_RSTCT2_REG;
if((reg_temp & 0x0001) == 0) //MPU peripherals not enable
CLKM13_ARM_RSTCT2_REG |= 0x0001; //enables MPU peripherals
//enable the MMC hardware clock request
switch(dev_num)
{
case MMC1:
ULPDR_SOFT_REQ_REG |= 0x0100;
break;
case MMC2:
ULPDR_SOFT_REQ_REG |= 0x0200;
break;
default:
break;
}
}
//=====================================================================//
//MMC close //
//=====================================================================//
void MMC_Close(int dev_num)
{
//disable the MMC hardware clock request
switch(dev_num)
{
case MMC1:
ULPDR_SOFT_REQ_REG &= ~0x0100;
break;
case MMC2:
ULPDR_SOFT_REQ_REG &= ~0x0200;
break;
default:
break;
}
}
//=====================================================================//
//MMC configure //
//=====================================================================//
void MMC_Configure(int dev_num)
{
CONF_VOLTAGE_CTRL_REG &= ~0x00000080; //disable IOS power down mode
//set PBAIS I/O power control to fast 2.8V mode
CONF_VOLTAGE_CTRL_REG &= ~0x00000008;
CONF_VOLTAGE_CTRL_REG |= 0x00000030;
MMC_CON_REG(dev_num) = 0x881f;
MMC_IE_REG(dev_num) = 0x0000;
MMC_CTO_REG(dev_num) = 0x00ff;
MMC_DTO_REG(dev_num) = 0x00ff;
}
//=====================================================================//
//MMC command transfer //
//=====================================================================//
void MMC_CMD_Transfer(int dev_num, long data)
{
MMC_ARGL_REG(dev_num) = (short)(data & 0x0000ffff);
MMC_ARGH_REG(dev_num) = (short)(data >> 16);
MMC_CMD_REG(dev_num) = 0x0000;
}
//=====================================================================//
//MMC test //
//=====================================================================//
void MMC_Test()
{
MMC_Initialize(MMC1);
while(1)
MMC_CMD_Transfer(MMC1, 0x12340055);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -