主题中讨论的其他器件: C2000WARE
我们正在使用 TMS320F28379D 并使用 USB 作为批量器件来发送状态信息(每80us~48字节)。
CPU1具有2个中断:
ADCB1中断(INT1.2)
USBA 中断(INT9.15)
我们的 A/D 中断每80us 发生一次、USB 中断有时与 A/D 中断异步使用多达16us。
在实时 USB 中断干扰实时 A/D 中断导致 USB 中断短路时、我们就会遇到问题。
我们需要嵌套中断、以便可以通过 A/D 中断来中断 USB 中断。
我认为我只需要修改如下所示的函数 F28x_USB0DeviceIntHandler ():
_interrupt void F28x_USB0DeviceIntHandler (void)
{
USB0DeviceIntHandler ();
INTERRUPT_clearACKGROUP (INTERRUPT_ACK_group9);
}
我进行了以下修改:
_interrupt void F28x_USB0DeviceIntHandler (void)
{
IER = M_INT1;//仅允许 ADCB INT1.2进行中断
PieCtrlRegs.PIEACK.all = 0xFFFF;
ASM (" NOP" );
eINT;//启用所有可屏蔽中断
USB0DeviceIntHandler ();
dint;//禁用所有可屏蔽中断
}
我希望这一变化只会减慢我们可以发送的数据量。
当我查看示波器时、我发现 USB 不再与 A/D 中断干扰、但是
即使 A/D 中断没有占用太多的时间、USB 也似乎没有获得太多数据。
我所做的操作有问题吗、或者 USB 批量函数不允许嵌套中断吗?
另外一种想法是、当我查看示波器时、USB 中断的发生速率几乎与 A/D 中断相同、 是否可以在 A/D 中断结束时消除 USB 中断并将其转换成轮询进程,因为它的发生速度似乎永远不会超过80us?
感谢您的任何建议... John