打印
[技术问答]

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

[复制链接]
904|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chongdongchen|  楼主 | 2020-10-12 13:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
基于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 | 只看该作者
应该是踩了双线程时,【读-修改-写】的坑了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

54

主题

1231

帖子

10

粉丝