xtrig 发表于 2015-9-22 09:09:33

使用FLEXBUS_DRV_Init()初始化2个外部器件端口的问题

使用FB_CS0和FB_CS2,2个外部器件,用FSDK 1.2的FLEXBUS_DRV_Init()初始化时发现只能初始化FB_CS0,后经分析FSDK源码发现如下问题:

flexbus_status_t FLEXBUS_DRV_Init(uint32_t instance, const flexbus_user_config_t *fb_config)
{
    assert(instance < FB_INSTANCE_COUNT);

    FB_Type* fbbase = g_fbBase;

    if(!fb_config)
    {
      return kStatus_FLEXBUS_InvalidArgument;
    }

    /* clock setting initialization.*/
    CLOCK_SYS_EnableFlexbusClock(instance);

    /* Reset all the register to default state.*/
    FLEXBUS_HAL_Init(fbbase);
    /* Configure all the register to a known state */
    FLEXBUS_HAL_Configure(fbbase, fb_config);

    return kStatus_FLEXBUS_Success;
}
每次FLEXBUS_DRV_Init()均会调用FLEXBUS_HAL_Init(),其代码如下:
void FLEXBUS_HAL_Init(FB_Type* base)
{
    int chip = 0;
    uint32_t reg_value = 0x0;

    for (chip = 0; chip < FB_CSAR_COUNT; chip++)
    {
      /* Reset CSMR register, all chips not valid (disabled).*/
      FB_WR_CSMR(base, chip, 0x0U);
      /* Set default base addr */
      FB_BWR_CSAR_BA(base, chip, 0x0000U);
      /* Reset FB_CSCRx register */
      FB_WR_CSCR(base, chip, 0x00U);
    }

    /* Set FB_CSPMCR register*/
    /* FlexBus signal group 1 multiplex control.*/
    reg_value |= kFlexbusMultiplexGroup1_FB_ALE << FB_CSPMCR_GROUP1_SHIFT;
    /* FlexBus signal group 2 multiplex control.*/
    reg_value |= kFlexbusMultiplexGroup2_FB_CS4 << FB_CSPMCR_GROUP2_SHIFT;
    /* FlexBus signal group 3 multiplex control.*/
    reg_value |= kFlexbusMultiplexGroup3_FB_CS5 << FB_CSPMCR_GROUP3_SHIFT;
    /* FlexBus signal group 4 multiplex control.*/
    reg_value |= kFlexbusMultiplexGroup4_FB_TBST << FB_CSPMCR_GROUP4_SHIFT;
    /* FlexBus signal group 5 multiplex control.*/
    reg_value |= kFlexbusMultiplexGroup5_FB_TA << FB_CSPMCR_GROUP5_SHIFT;
    /* Write to CSPMCR register.*/
    FB_WR_CSPMCR(base, reg_value);
}

可见,每次FLEXBUS_HAL_Init()均会清除CSMR, CSAR, CSCR等寄存器,因而导致第二次调用FLEXBUS_DRV_Init()时会清除上次的设置。

因此想问,如何使用FSDK1.2来分配FLEXBUS给多个CS?初始化第二个chip要用HAL层的函数吗?


xtrig 发表于 2015-9-23 11:42:00

似乎用FSDK的人不多啊,FSL的兄弟能否也给点建议。
页: [1]
查看完整版本: 使用FLEXBUS_DRV_Init()初始化2个外部器件端口的问题