工具与软件:
大家好、我使用 TMS570LS3137协处理器来输出 PWM 波形、代码如下:
- L01 PWCNT { next=L02、hr_LR=low、cond_addr=l02、en_pin_action=on、pin=20、action=PULSEHI、reg=none、data=0};
- L02 DJZ { next=pwm_in_Duty1、cond_addr=L03、reg=none、data=0};
- L03 MOV64 { next=L04、remote=l01、en_pin_action=on、cond_addr=L02、pin=20、comp_mode=ecmp、action=PULSEHI、reg=none、irq=on、data=0};
- L04 MOV64 { next=pwm_in_Duty1、remote=L02、en_pin_action=on、cond_addr=L03、pin=20、comp_mode=ecmp、action=clear、reg=none、irq=on、data=0};
在正常情况下、这个输出 PWM 没有问题、但是我发现如果主处理器正在改变其它 HET 引脚的输出(例如主处理器改变 HET4和 HET7引脚的输出、并且协处理器通过 HET20引脚输出 PWM)、输出 PWM 此时将是不正确的。 我使用以下代码进行了实验(协处理器代码未更改):
- drvSetABSyn ((FLOAT32) 0.5700 U);
- drvSoftwareDelayGomes(10000u);
- while (1)
- {
- hetREG1->DOUT &= (UINT32)(~(((UINT32) 1U) << 4));
- hetREG1->DOUT |= ((UINT32) 1U) << 7;
- hetREG1->DOUT |= ((UINT32) 1U) << 4;
- hetREG1->DOUT &= (UINT32)(~(((UINT32) 1U) << 7));
- }
第一行通过修改协处理器的存储器输出占空比50%、频率700HZ PWM 波形、第二行延迟10秒、然后循环控制 HET 的第4和第7个管脚。 最终输出如下:
在黄线是 HET20引脚输出的 PWM 波形的地方、可以清楚地看到、在主处理器控制 HET 引脚前、波形没有问题、并且在控制之后 PWM 是异常的。
这种现象的原因是什么? 解决方案是什么?