/*io access mode set*/ BSP_VOID SLAVE_IO_Mode(BSP_U32 value) { BSP_U32 u32Reg; /*set IO access support register*/ BSP_REG_READ(g_u32SlaveBase,IO_ACCESS_MODE,u32Reg); u32Reg |= value; BSP_REG_WRITE(g_u32SlaveBase,IO_ACCESS_MODE,u32Reg); }
BSP_VOID SLAVE_CSA_Support(BSP_BOOL bSup) { BSP_U32 u32RegValue = 0; BSP_REG_READ(g_u32SlaveBase,ESW_FBR_REG,u32RegValue); if(bSup) { u32RegValue |= 0x10; } else { u32RegValue &= ~0x10; } BSP_REG_WRITE(g_u32SlaveBase,ESW_FBR_REG,u32RegValue); }
/*voltage switch sequence*/ BSP_VOID SLAVE_VolSwt() { BSP_U32 u32reg; /*启动计数器,5MS内完成电压切换过程*/ BSP_REG_READ(g_u32SlaveBase,UHS_SUPPORT,u32reg); u32reg |= 0x4; //set Card accept volt bit BSP_REG_WRITE(g_u32SlaveBase,UHS_SUPPORT,u32reg); u32reg |= 0x8; //set sd_clk_line_switched bit BSP_REG_WRITE(g_u32SlaveBase,UHS_SUPPORT,u32reg); u32reg |= 0x10; //set sd_cmd_line switch bit BSP_REG_WRITE(g_u32SlaveBase,UHS_SUPPORT,u32reg); }
/*高速模式支持*/ BSP_VOID SLAVE_SHS_Support(BSP_BOOL bSpi) { BSP_U32 value = 0; BSP_REG_READ(g_u32SlaveBase,ESW_CCCR_REG,value); if(bSpi) { value |= PROG_ESW_CCCR_SHS; } else { value &= ~PROG_ESW_CCCR_SHS; } BSP_REG_WRITE(g_u32SlaveBase,ESW_CCCR_REG,value); }
/*UHS模式支持*/ BSP_VOID SLAVE_UHS_Support(BSP_BOOL bUhs) { BSP_U32 value = 0; BSP_REG_READ(g_u32SlaveBase,UHS_SUPPORT,value); if(bUhs) { value |= 0x1; } else { value &= ~0x1; } BSP_REG_WRITE(g_u32SlaveBase,UHS_SUPPORT,value); }
u32 bsp_om_timer_start(void) { u32 readValueTmp; u32 u32Times = 100; u32 i = 0; /* Set up in periodic mode */ BSP_REG_WRITE(OM_TIMER_STAMP_BASE,0x8, 0x0); /* Load Timer Reload value into Timer registers */ BSP_REG_WRITE (OM_TIMER_STAMP_BASE,0x0, 0xffffffff); /* 查询计数器使能是否生效 */ do { BSP_REG_READ(OM_TIMER_STAMP_BASE,0x8, readValueTmp); readValueTmp = readValueTmp&0x10; i++; }while((!readValueTmp)&&(i<u32Times)); BSP_REG_WRITE(OM_TIMER_STAMP_BASE,0x8, 0x5); return OK; }