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

📄 mmc_sd_sdio.c

📁 OMAP1030 处理器的ARM 侧硬件测试代码 OMAP1030 是TI的双核处理器
💻 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 + -