现在单独的 循环发送,和中断接收都可以了。把 发送和接收放在一起,就只能 接收数据, 没有发送数据,程序在一直在中断里面,没有回到 主程序。
帮忙看下 中断里面需要如何操作。程序如下:
main.c 里面的发送 使用了25号邮箱
ECanaMboxes.MBOX25.MDL.byte.BYTE3++;
ECanaMboxes.MBOX25.MDH.byte.BYTE7++;
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;
中断里面的接收 16号邮箱
__interrupt void CanaRev_Isr(void)
{
while(ECanaRegs.CANRMP.all != 0x00010000 ) ;
ECanaRegs.CANRMP.all = 0x00010000;
PieCtrlRegs.PIEACK.bit.ACK9 = 1;
EINT;
}
Eric Ma:
看了中断,没有对外设级别的中断标志进行处理,
.4.3.1 Configuring for Interrupt Handling
看一下上面这个章节。
ERIC
现在单独的 循环发送,和中断接收都可以了。把 发送和接收放在一起,就只能 接收数据, 没有发送数据,程序在一直在中断里面,没有回到 主程序。
帮忙看下 中断里面需要如何操作。程序如下:
main.c 里面的发送 使用了25号邮箱
ECanaMboxes.MBOX25.MDL.byte.BYTE3++;
ECanaMboxes.MBOX25.MDH.byte.BYTE7++;
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;
中断里面的接收 16号邮箱
__interrupt void CanaRev_Isr(void)
{
while(ECanaRegs.CANRMP.all != 0x00010000 ) ;
ECanaRegs.CANRMP.all = 0x00010000;
PieCtrlRegs.PIEACK.bit.ACK9 = 1;
EINT;
}
chao qian1:
回复 Eric Ma:
ERIC
你好。
3.4.3.1 Configuring for Interrupt Handling 这个配置CAN中断的章节已经看了,我在 CAN初始化时, 已经配置好了 3.4.3.1所提到的 中断寄存器, 但里面 并没有说明 如何把中断标志进行处理。