chongdongchen 发表于 2020-10-12 13:38

HC32F003的中断优先级这样配置为什么不行,需要注意什么?

基于HC32F003_DDL_Rev1.0.2。需要配置TIM2的优先级高于TIM1。
TIM2中断里对IO口进行取反并用示波器观察,TIM1不启动时其波形是稳定的,启动后波形就不稳定,更改优先级0-3不起作用。仿真时观察优先级寄存器,是配置成功的。
代码如下,求解答:
void bt_init (void)
{
    stc_bt_config_t         stcBtConfig;
    uint16_t                  u16ArrData;
   
    DDL_ZERO_STRUCT(stcBtConfig);
   
    //Basetime 外设时钟使能
    Clk_SetPeripheralGate(ClkPeripheralBt, TRUE);
   
    //工作模式
    stcBtConfig.enGateP = BtPositive;       //门控极性控制
    stcBtConfig.enGate= BtGateDisable;    //无门控
    stcBtConfig.enPRS   = BtPCLKDiv1;       //PCLK分频
    stcBtConfig.enTog   = BtTogDisable;   //TOG输出Disable
    stcBtConfig.enCT    = BtTimer;          //定时器功能
    stcBtConfig.enMD    = BtMode2;          //自动重装载16位
   
    Bt_Init(TIM1, &stcBtConfig);
    Bt_Init(TIM2, &stcBtConfig);
   
    //中断使能
    Bt_ClearIntFlag(TIM1);
    EnableNvic(TIM1_IRQn,3,TRUE);
    Bt_EnableIrq(TIM1);
   
    Bt_ClearIntFlag(TIM2);
    EnableNvic(TIM2_IRQn,1,TRUE);//FALSE
    Bt_EnableIrq(TIM2);
   
    //设置重载值和计数值
    u16ArrData = 0x10000 - (SystemCoreClock /(1000));//1000Hz
    Bt_ARRSet(TIM1, u16ArrData);
    Bt_Cnt16Set(TIM1, u16ArrData);
   
    u16ArrData = 0x10000 - (SystemCoreClock /(50*64));//
    Bt_ARRSet(TIM2, u16ArrData);
    Bt_Cnt16Set(TIM2, u16ArrData);
   
    //启动
    Bt_Run(TIM1);   //
    Bt_Run(TIM2);   //用于触发ADC
}



chongdongchen 发表于 2020-10-12 15:25

结帖,已经找到问题了,这里的配置是没问题的。

smartpower 发表于 2020-10-12 19:51

应该是踩了双线程时,【读-修改-写】的坑了。
页: [1]
查看完整版本: HC32F003的中断优先级这样配置为什么不行,需要注意什么?