Cortex-M3 LM3S9B92 CAN总线编程例子,该例子完成收到什么发送什么。。。。
代码:
//CAN Demo for LM3S9B92
//该例子完成将CAN0收到的数据又发送出去
//Created by Robin
//2012-02-06
//使用PB4和PB5作为CAN0RX和CAN0TX
#include "hw_memmap.h"
#include "hw_types.h"
#include "hw_can.h"
#include "hw_ints.h"
#include "can.h"
#include "interrupt.h"
#include "sysctl.h"
#include "gpio.h"
tCANMsgObject msgObject;
unsigned char databuf[8];
//延时函数
void delay()
{
unsigned long ulLoop;
for(ulLoop = 0; ulLoop < 40000; ulLoop++)
{
}
}
void goon()
{
//下面设置为接收来等待数据的到来
msgObject.pucMsgData = databuf; //缓冲区
msgObject.ulMsgID = 0x000;
//下面两条设置成接收所有数据
msgObject.ulMsgIDMask = 0x000; //设置过滤掩码为“不对任何数据进行过滤”
msgObject.ulFlags = MSG_OBJ_USE_ID_FILTER; //使用过滤
msgObject.ulMsgLen = 8; //最大长度为8
CANMessageSet(CAN0_BASE, 1, &msgObject, MSG_OBJ_TYPE_RX); //设置接收结构体
while((CANStatusGet(CAN0_BASE, CAN_STS_NEWDAT) & 1) == 0); //一直等待数据的道来
CANMessageGet(CAN0_BASE, 1, &msgObject, true); //读出数据,并相关的中断标志
//至此接收完毕
//下面开始发送数据
CANMessageSet(CAN0_BASE, 1, &msgObject, MSG_OBJ_TYPE_TX); //把接收到的数据又发送出去
}
int main()
{
//系统初始化
SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);
//使能端口B
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
//PB4和PB5用作CAN
GPIOPinConfigure(GPIO_PB4_CAN0RX);
GPIOPinConfigure(GPIO_PB5_CAN0TX);
//PB4 PB5作为CAN引脚
GPIOPinTypeCAN(GPIO_PORTB_BASE, GPIO_PIN_4 | GPIO_PIN_5);
//使能外设CAN0
SysCtlPeripheralEnable(SYSCTL_PERIPH_CAN0);
//初始化CAN0
CANInit(CAN0_BASE);
//设置通信速率125kbps
CANBitRateSet(CAN0_BASE, SysCtlClockGet(), 125000);
//使能CAN0
CANEnable(CAN0_BASE);
for(;;)
{
goon();
delay();
}
}