高级会员

- 积分
- 943
- 金钱
- 943
- 注册时间
- 2013-5-17
- 在线时间
- 192 小时
|
5金钱
大家好,我现在做的装置程序CAN 中断可以进入,但是现场调试会中断一直重复进入,请问一下寄存器版本的如何清CAN中断标志啊?程序如下:
#if CAN_RX0_INT_ENABLE //????RX0????
void USB_LP_CAN1_RX0_IRQHandler(void)
{
u32 id;
u8 i,x,k;
u8 ide,rtr,len;
Can_Rx_Msg(0,&id,&ide,&rtr,&len,Can_rxbuf);
P_pdu.Pxid.pid=id;
P_pdu.len =len;
x=0;
if (!Can_Rx_Fir_Flag)
{
Can_Rx_Fir_Flag++;
memcpy(P_pdu.Pdata ,Can_rxbuf,len);
  _Rque.P_Data[P_Rque.Pos_Head++]=P_pdu;
if (P_Rque.Pos_Head>50)
{
P_Rque.Pos_Head=0;
Can_Rx_Fir_Flag=0;
}
P_Rque.P_empty=1;
}
else
{
k=P_Rque.Pos_Head-1;
if (   _Rque.P_Data[k].Pxid.pid==id)
{
for (i=0;i<8;i++)
{
if( P_Rque.P_Data[k].Pdata==Can_rxbuf)
{
continue;
}
else
{
x=1;
break;
}
}
}
else
{
x=1;
}
if (x==1)
{
memcpy(P_pdu.Pdata ,Can_rxbuf,len);
P_Rque.P_Data[P_Rque.Pos_Head++]=P_pdu;
if (P_Rque.Pos_Head>50)
{
P_Rque.Pos_Head=0;
Can_Rx_Fir_Flag=0;
}
  _Rque.P_empty=1;
}
}
// CAN->IER &= ~(1<<1);
}
#endif
程序大概是;当第一次把数据放入接收队列,当不是第一次时和上一次的ID和数据比较当相同时就不放入队列了,不同的就放入队列
|
|