关于MSTAR的IO初始化

关于MSTAR的IO初始化

volatile U8 code padInitTbl[]= //attribute((section (".isp_info"))) =

drvPadConf.c中这个初始化表,是用来实现对IO PORT的功能实现初始化的。跟了一下这个结构。表非常长,相当于把每一个IO定义了一遍,形成了一个数据表,这个表在

void MDrv_Pad_Init( void )中实调用,

void MDrv_Pad_Init( void )
{
    U8 code *pPadConfig;
    U8  u8Length;
    U16 u16Index; // register index

    u32MapBase = _MapBase_nonPM_MAYA;

    pPadConfig = (U8 *)padInitTbl + 10;

    while (1)
    {
        u16Index = (pPadConfig[0] << 8) + (pPadConfig[1]);

        if (u16Index == 0xFFFF) // check end of table
            break;

        pPadConfig += 2;

        if(u16Index == 0x0000) // switch base address
        {
            if((pPadConfig[0]==0x10)||(pPadConfig[0]==0x11))
            {
                u32MapBase = _MapBase_nonPM_MAYA;
            }
            else if(pPadConfig[0]==0x00)
            {
                u32MapBase = _MapBase_PM_MAYA;
            }
            pPadConfig += 2;
            continue;
        }

        u8Length = HIGHBYTE(u16Index) >> 6;
        u16Index &= 0x3FFF;

        while (1)
        {
            //printf("%x = %bx & %bx\n", u16Index, pPadConfig[0], pPadConfig[1]);
            MDrv_PAD_WriteByteMask((U32)u16Index, pPadConfig[0], pPadConfig[1]);
            pPadConfig += 2;

            if (u8Length == 0)
                break;

            u8Length--;
            u16Index++;
        }
    }

}

而MDrv_Pad_Init()函数是在SYSINIT.C文件中被调用。

void start(void)
{
    U32 u32MiuProtectAlign;
    U32 u32Start;
    U32 u32End;
    U32 u32MiuProtectAddr_Start, u32MiuProtectAddr_End;
    // Added by coverity_0210
    U32 u32Tmp;
    extern U8  _readonly_start[];
    extern U8  _readonly_end[];

    //extern void uart_init(U32 aeon_clock, U32 uart_clock);    //T3 FPGA test
    extern int  main(void);
    extern void MDrv_Pad_Init(void);
    extern void MDrv_ISR_Init(void);
    extern void mhal_stack_init(void *stack);

    char *stack;
    // Setup stack

    stack = (char *)malloc(STACK_SIZE);
    if (stack)
    {
        stack += STACK_SIZE;
        mhal_stack_init(stack);
    }
    else
    {
        ASSERT(0);
    }

#if (!BLOADER)
    MDrv_WDT_Init(E_WDT_DBGLV_NONE);
#endif

    MDrv_MMIO_GetBASE((MS_U32 *) &RIU_MAP, &u32Tmp, MS_MODULE_PM);

#if (PM_LOCK_SUPPORT == 1)
    MDrv_SEM_Init();
#endif

    MDrv_MIU_SetIOMapBase();




#if 0//(MEMORY_MAP <= MMAP_32MB)
        {
            // Set all invalid after 32M
            u32Start = 0x2000000; // 32M
            u32End = 0x4000000; // 64M
            MDrv_MIU_Protect(3, zero_array, ALIGN(u32Start + ((1<<pageshift) - 1), pageshift), ALIGN(u32End, pageshift), ENABLE);
        }
#endif

    Util_InitSymbolTBL();

    console_init();

    ***MDrv_Pad_Init();***

    mdrv_gpio_init();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值