现在用28035的芯片写了一个SPWM的调制程序,我的中断的频率给定是20kHz,现在要做多相相位控制的正弦波发生,我想用一个芯片给另一个芯片发送正弦数值,我把发送的语句写在20kHz的中断里,想让他发送的频率也是20kHz,下面是在中断中CAN发送语句:
ECanaMboxes.MBOX25.MDH.all = M;
ECanaShadow.CANTRS.all = 0;
ECanaShadow.CANTRS.bit.TRS25 = 1; // Set TRS for mailbox under test
ECanaRegs.CANTRS.all = ECanaShadow.CANTRS.all;
do
{
ECanaShadow.CANTA.all = ECanaRegs.CANTA.all;
} while(ECanaShadow.CANTA.bit.TA25 == 0 ); // Wait for TA5 bit to be set..
ECanaShadow.CANTA.all = 0;
ECanaShadow.CANTA.bit.TA25 = 1; // Clear TA5
ECanaRegs.CANTA.all = ECanaShadow.CANTA.all;
但是我现在发现CAN发送芯片的中断频率降低了3倍,就是上面这个发送语句要执行的时间很长,我用GPIO端口看了一下,大约有140us,观看中断时间GPIO端口波形如下所示:
我现在是觉得这个发送的时间太长了,导致了中断频率变成了6.67kHz,成了原来一三分之一,请大家看一下这样的执行时间正常吗?为什么会这样?还有CAN通讯可以实现每50us发一次数据吗(也就是20kHz)?
感激不尽!
