|
楼主 |
发表于 2010-8-31 19:39:07
|
显示全部楼层
linghu2 令狐二中 谢谢您;
是这样的,我发送不是用中断来发送的,接收是用中断,我接收完成时是有清除中断的;
我的接收程序如下:
Intf_temp = mcp2515_read_register( CANINTF); //读取mcp2515中断标志位
Intf_temp = (Intf_temp & ((1<<RX1IF) |(1<<RX0IF))); //取出CANINTF中的RX1IF,RX0IF判断是否有缓冲器满
if((Intf_temp&(1<<RX0IF)) == (1<<RX0IF)) //判断是否为RX0中断
{
mcp2515_read_register_p( RXB0SIDH , ID_temp , 4); //读取4个字节的ID信息 接收缓冲器0标识符
length = mcp2515_read_register( RXB0DLC );////读取数据字节长度
mcp2515_read_register_p( RXB0D0 , data ,length); //读取数据
mcp2515_bit_modify( CANINTF, (1<<RX0IF), 0 );//接收完毕清中断
}
我的发送程序如下:
temp[0] =AIM_ID;//1
temp[1] =B_CANTXnext_frame|(1<<EXIDE);
temp[2] =OWN_ID;//1
temp[3] =C_CANTX_frame;
mcp2515_bit_modify( TXB0CTRL, (1<<TXREQ)|(1<<TXP1)|(1<<TXP0), ~(1<<TXREQ)|(1<<TXP1)|(1<<TXP0) );//添加报文发送前(TXREQ)先置0
mcp2515_write_register_p( TXB0SIDH, temp, 4 );
mcp2515_write_register( TXB0DLC, lengthf ); // 设定报文的数据字节数
mcp2515_write_register_p( TXB0D0, data, lengthf );// TXB0D0 数据发送寄存器0
CAN2515_CSON;
SPI_ReadWirte(SPI_RTS | 0x01);//0x01发送缓冲器为TXB0 启动发送 相当与TXREQ置1
CAN2515_CSOFF; |
|