基于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
- }
|