我用的是LPC2131+SJA1000+TJA1050,ARM c语言与C语言有所不同,我本以为是寄存器设置的问题,所以只发了初始化,我发送接收数据用的查询.<br /> void init_can()<br />{ uint8 dat;<br /> IO0CLR = CS; // 0x40800000;INT|CS;<br /> <br /> write_can(0,0x01);//控制寄存器,进入复位模式,并且禁能所有中断源<br /> write_can(31,0x48); //时钟分频器<br /> write_can(4,0xaa); //验收代码ID 550<br /> write_can(5,0x00); //验收屏蔽寄存器 <br /> write_can(6,0x01); //btr0<br /> write_can(7,0x1c); //btr1 <br /> write_can(8,0xaa); //输出控制寄存器<br /> delay(2);<br /> write_can(0,0x06); //退出复位模式,并且使能发送中断和接收中断<br /> dat= read_can(0);<br /> <br /> while((dat&0x01)==1) //判断是否复位<br /> {<br /> write_can(0,0x06);<br /> }<br /> }<br />void Tx1(void) //发送子程序<br />{ uint8 i;<br /> uint8 addr=10;<br /> uint8 snd1[10]={0xaa,0x28,0x19,0x83,0x02,0x12,0x44,0x53,0x48,0x12};<br /> write_can(0,0x06); //使能发送中断和接收中断,控制寄存器<br /> for(i=0;i<10;i++)<br /> {<br /> write_can(addr,snd1);<br /> addr++;<br /> delay(100);<br /> }<br /> write_can(1,0x05);// 启动发送,置位发送请求位<br /> delay(100);<br /> }<br /><br />uint8 receive() //接收数据,并发到串口上<br />{ <br />uint8 i; <br />receive_data[0]=read_can(0x14);<br />receive_data[1]=read_can(0x15);<br />receive_data[2]=read_can(0x16);//data1<br />receive_data[3]=read_can(0x17);//data2<br />receive_data[4]=read_can(0x18);//data3<br />receive_data[5]=read_can(0x19);//data4<br />receive_data[6]=read_can(0x1a);//data5<br />receive_data[7]=read_can(0x1b);//data6<br />receive_data[8]=read_can(0x1c);//data7<br />receive_data[9]=read_can(0x1d);//data8<br />for(i=0;i<10;i++)<br /> {<br /> UART0_SendByte(receive_data); // 向串口发送字符串<br /> delay(10);<br /> } <br />write_can(1,0x04);//释放,接收缓冲器中载有信息内容被释放 <br />return 1;<br />}<br /><br /> int main (void)<br />{ init_can();<br /> delay(10);<br /> while(1) <br /> {<br /> Tx1();<br /> <br /> delay(1000000);<br /> receive();<br /> } <br /> return 0;<br /> }<br /><br /><br /><br /><br /><br /><br /><br />
|