예제 #1
0
/* IO设备上电枚举过程 初始化过程*/
BSP_S32 SLAVE_IOEnumCfg(BSP_VOID)
{
    BSP_U32 i = 0;

	/* Check if the core is ready for programming */
	
	//sdio_set_init_ios(1);
#ifndef SLAVE_DEBUG
	for(i=0;i < CARD_RDY_TIMEOUT;i++)
#else
	while(1)
#endif
	{
	    if(SLAVE_GetReady() & PROG_REG_CARD_RDY)
	    {
			break;
		}
            msleep(10);
	}
	
	if(i >= CARD_RDY_TIMEOUT)
	{
	    //BSP_TRACE(BSP_LOG_LEVEL_ERROR, BSP_MODU_SLAVE, "card not ready!\n");
	    printk("card not ready!\n");
	    return SLAVE_ERR_RETRY_TIMEOUT;
	}

    /* config ESW_CCCR register */
    SLAVE_Version_Set(FALSE); /*默认设置成2.0模式*/
    //SLAVE_Version_Set(TRUE); /*默认设置成3.0模式*/
#ifdef SLAVE_CFG_SHS_SUPPORT
    SLAVE_SHS_Support(BSP_TRUE);
#else
    SLAVE_SHS_Support(BSP_FALSE);
#endif
#ifdef SLAVE_CFG_UHS_SUPPORT
    SLAVE_UHS_Support(BSP_TRUE);
#else
    SLAVE_UHS_Support(BSP_FALSE);
#endif
    /* config FUN1 IO OCR register */
    BSP_REG_WRITE(g_u32SlaveBase,ESW_OCR_REG,OCR_REG_VOLTAGE_RANGE);

    /* config ESW FBR1 Register */
    BSP_REG_WRITE(g_u32SlaveBase,ESW_FBR_REG,PROG_REG_ESW_FBR);

    /* program FUN1 IOR1 register,set function 1 as ready status */ 
    SLAVE_Fun1_Ready();

    /* 设置超时值,cmd11电压切换等待时间 */
    BSP_REG_WRITE(g_u32SlaveBase,CLK_DELAY_TIMER,TIME_OUT_VALUE);//timeout 
        
    /*set IO access support register*/
    SLAVE_IO_Mode(IO_SPEED_MODE);
    
    //BSP_TRACE(g_u32SlaveBase, BSP_MODU_SLAVE, "device enum succuss!\n");
    printk("device enum succuss!\n");
    return SLAVE_OK;
}
예제 #2
0
BSP_S32 hal_sdio_S2MRdySend(BSP_U32 Length)
{  
    /* set AHB_TRANS_CNT */
    BSP_REG_WRITE(g_u32SlaveBase,AHB_TRANS_CNT,Length);
    /*set FUN1_RD_DATA_RDY bit to 1*/
    BSP_REG_WRITE(g_u32SlaveBase,FUN1_RD_DATA_RDY,1);
    return BSP_OK;
}  
예제 #3
0
/*SD2.0 or SD3.0模式设置*/
BSP_VOID SLAVE_Version_Set(BSP_BOOL bflag)
{
    /*set SD2.0 or SD3.0模式 1:SD3.0, 0:SD2.0*/
    if(bflag)
    {
        BSP_REG_WRITE(g_u32SlaveBase,ESW_CCCR_REG,PROG_REG_ESW_CCCR_30);
    }
    else
    {
        BSP_REG_WRITE(g_u32SlaveBase,ESW_CCCR_REG,PROG_REG_ESW_CCCR_20);
    }

}
예제 #4
0
/*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);
   
}
예제 #5
0
/* set function enable or disable */
BSP_VOID SLAVE_fun1_switch(BSP_BOOL bMode)
{ 
    /* Enable the function, enable and clear interrupts */
	if (bMode)	
	{
        /* 设置FUN1 IOR RDY bit */
        BSP_REG_WRITE(g_u32SlaveBase,ESW_IOR_REG,0x01);       
        BSP_REG_WRITE(g_u32SlaveBase,AHB_FUN1_INT_ENABLE,FUN1_INT_BITS_ALL);
        BSP_REG_WRITE(g_u32SlaveBase,AHB_FUN1_INT_STATUS,GLOBAL_INT_BITS_ALL);
	}
	else
	{   /* 清除 FUN1 IOR RDY bit */
		BSP_REG_WRITE(g_u32SlaveBase,ESW_IOR_REG,0x0);  
        BSP_REG_WRITE(g_u32SlaveBase,AHB_FUN1_INT_ENABLE,0x0);
	}
}
예제 #6
0
/*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);

}
예제 #7
0
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);
}
예제 #8
0
void slave_reinit()
{
	SLAVE_Version_Set(FALSE); /*默认设置成2.0模式*/
	//SLAVE_Version_Set(TRUE); /*默认设置成3.0模式*/
#ifdef SLAVE_CFG_SHS_SUPPORT
	SLAVE_SHS_Support(BSP_TRUE);
#else
	SLAVE_SHS_Support(BSP_FALSE);
#endif
#ifdef SLAVE_CFG_UHS_SUPPORT
	SLAVE_UHS_Support(BSP_TRUE);
#else
	SLAVE_UHS_Support(BSP_FALSE);
#endif


	/* config FUN1 IO OCR register */
	BSP_REG_WRITE(g_u32SlaveBase,ESW_OCR_REG,OCR_REG_VOLTAGE_RANGE);

	/* config ESW FBR1 Register */
	BSP_REG_WRITE(g_u32SlaveBase,ESW_FBR_REG,PROG_REG_ESW_FBR);

	/* program FUN1 IOR1 register,set function 1 as ready status */ 
	SLAVE_Fun1_Ready();

	/* 设置超时值,cmd11电压切换等待时间 */
	BSP_REG_WRITE(g_u32SlaveBase,CLK_DELAY_TIMER,TIME_OUT_VALUE);//timeout 
	    
	/*set IO access support register*/
	SLAVE_IO_Mode(IO_SPEED_MODE);
	SLAVE_Fun_Ready();
	/* 使能中断 */
	SLAVE_IntMask_Global(GLOBAL_INT_BITS_ALL);
	SLAVE_IntMask_Fun0(FUN0_INT_BITS_ALL);
	SLAVE_IntMask_Fun1(FUN1_INT_BITS_ALL);
	
}
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;
}
예제 #10
0
/*高速模式支持*/
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);
}
예제 #11
0
/*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);
}
예제 #12
0
/*msg transfer slave->host*/
BSP_VOID hal_sdio_S2MMsgSend(BSP_U32 u32Msg)
{   
    /*first set Fun1_rd_data_rdy bit*/
    (BSP_VOID)hal_sdio_S2MRdySend(sizeof(u32Msg));
    BSP_REG_WRITE(g_u32SlaveBase,ARM_GENERAL_PURPOSE,u32Msg);
}
예제 #13
0
BSP_VOID SLAVE_Rst()
{
    /*设置复位管脚*/
    BSP_REG_WRITE(g_u32SlaveBase,SOFT_RESET_VALID,0x1);
}