[技术问答] HC32F003的中断优先级这样配置为什么不行,需要注意什么?

[复制链接]
1099|2
 楼主| chongdongchen 发表于 2020-10-12 13:38 | 显示全部楼层 |阅读模式
基于HC32F003_DDL_Rev1.0.2。需要配置TIM2的优先级高于TIM1。
TIM2中断里对IO口进行取反并用示波器观察,TIM1不启动时其波形是稳定的,启动后波形就不稳定,更改优先级0-3不起作用。仿真时观察优先级寄存器,是配置成功的。
代码如下,求解答:
  1. void bt_init (void)
  2. {
  3.     stc_bt_config_t           stcBtConfig;
  4.     uint16_t                  u16ArrData;
  5.    
  6.     DDL_ZERO_STRUCT(stcBtConfig);
  7.    
  8.     //Basetime 外设时钟使能
  9.     Clk_SetPeripheralGate(ClkPeripheralBt, TRUE);
  10.    
  11.     //工作模式
  12.     stcBtConfig.enGateP = BtPositive;       //门控极性控制
  13.     stcBtConfig.enGate  = BtGateDisable;    //无门控
  14.     stcBtConfig.enPRS   = BtPCLKDiv1;       //PCLK分频
  15.     stcBtConfig.enTog   = BtTogDisable;     //TOG输出Disable
  16.     stcBtConfig.enCT    = BtTimer;          //定时器功能
  17.     stcBtConfig.enMD    = BtMode2;          //自动重装载16位
  18.    
  19.     Bt_Init(TIM1, &stcBtConfig);
  20.     Bt_Init(TIM2, &stcBtConfig);
  21.    
  22.     //中断使能
  23.     Bt_ClearIntFlag(TIM1);
  24.     EnableNvic(TIM1_IRQn,3,TRUE);
  25.     Bt_EnableIrq(TIM1);
  26.    
  27.     Bt_ClearIntFlag(TIM2);
  28.     EnableNvic(TIM2_IRQn,1,TRUE);  //FALSE
  29.     Bt_EnableIrq(TIM2);
  30.    
  31.     //设置重载值和计数值
  32.     u16ArrData = 0x10000 - (SystemCoreClock /(1000));  //1000Hz
  33.     Bt_ARRSet(TIM1, u16ArrData);
  34.     Bt_Cnt16Set(TIM1, u16ArrData);
  35.    
  36.     u16ArrData = 0x10000 - (SystemCoreClock /(50*64));  //
  37.     Bt_ARRSet(TIM2, u16ArrData);
  38.     Bt_Cnt16Set(TIM2, u16ArrData);
  39.    
  40.     //启动
  41.     Bt_Run(TIM1);   //
  42.     Bt_Run(TIM2);   //用于触发ADC
  43. }




 楼主| chongdongchen 发表于 2020-10-12 15:25 | 显示全部楼层
结帖,已经找到问题了,这里的配置是没问题的。
smartpower 发表于 2020-10-12 19:51 | 显示全部楼层
应该是踩了双线程时,【读-修改-写】的坑了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

55

主题

1238

帖子

10

粉丝
快速回复 在线客服 返回列表 返回顶部