?? main.cpp
字號:
//////////////////////////////////////////////////////////////
// 基于C++類庫CCAN及CLUT的LPC2000 CAN演示程序
// 周立功單片機版權所有
//////////////////////////////////////////////////////////////
#include "config.h"
#include "CAN.H" // CCAN類定義
#include "LUT.h" // CLUT類定義
CCAN CanA(1,64); // 構造一個CAN通道,CAN控制器號為1,內建128幀軟件接收緩沖
CCAN CanB(2,64); // 構造一個CAN通道,CAN控制器號為2,內建128幀軟件接收緩沖
volatile UINT32 err;
void __irq AllCanACanBINT(void) // CAN1的發送接收VIC中斷函數,表格錯誤或其他CAN中斷入口
{
if(1 /*CAN interrupt occur*/)
{
err = CANLUTerrAd; // debug
CanA.IntEntry(); // 調用成員函數處理接收、發送中斷或其他CAN中斷入口
CanB.IntEntry();
VICVectAddr = 0;
}
}
//////////////////////////////////////////////////////////////
int main()
{
VICIntSelect = 0; // 設置所有中斷分配為IRQ中斷
// CAN1/CAN2 中斷入口設定,非向量中斷
VICDefVectAddr = (UINT32)AllCanACanBINT;
// 打開相應的VIC中斷允許
VICIntEnable = (0x01L << 19); // for CanA and CanB
VICIntEnable = ((0x01L << 20) | (0x01L << 26)); // for CanA
VICIntEnable = ((0x01L << 21) | (0x01L << 27)); // for CanB
// 設置接收過濾器模式
CLUT::AFSetMode(1); // 接任何收數據,bypass mode
_CANBTR btr;
btr.dwValue = 0; // 500K波特律的設置
btr.Bits.BRP = 1;
btr.Bits.TSEG1 = 7;
btr.Bits.TSEG2 = 1;
btr.Bits.SJW = 0;
btr.Bits.SAM = 0;
CanA.Initial(btr); // 用500K波特率初始化CanA
btr.dwValue = 0; // 250K波特律的設置
btr.Bits.BRP = 3;
btr.Bits.TSEG1 = 7;
btr.Bits.TSEG2 = 1;
btr.Bits.SJW = 0;
btr.Bits.SAM = 1;
CanB.Initial(btr); // 用250K波特率初始化CanB
// 啟動總線進入工作模式
CanA.SoftBusEnable();
CanB.SoftBusEnable();
_CANRxBUF rxbuf;
_CANTxBUF txbuf;
// CAN1 CAN2 數據中轉傳輸
while(1)
{
if(TRUE == CanA.Receive(&rxbuf))
{
txbuf.fi.Bits.DLC=rxbuf.fs.Bits.DLC;
txbuf.fi.Bits.FF = rxbuf.fs.Bits.FF;
txbuf.fi.Bits.RTR=rxbuf.fs.Bits.RTR;
txbuf.id.dwValue=rxbuf.id.dwValue;
txbuf.da.dwValue=rxbuf.da.dwValue;
txbuf.db.dwValue=rxbuf.db.dwValue;
// 寫發送緩沖并啟動發送,這個demo沒有任何超時機制限制
// 真正使用時應該調用IsTransCompleted函數查詢是否發送成功并需要有超時限制
while(CanB.Transmit(&txbuf) == 0);
}
if(TRUE == CanB.Receive(&rxbuf))
{
txbuf.fi.Bits.DLC=rxbuf.fs.Bits.DLC;
txbuf.fi.Bits.FF = rxbuf.fs.Bits.FF;
txbuf.fi.Bits.RTR=rxbuf.fs.Bits.RTR;
txbuf.id.dwValue=rxbuf.id.dwValue;
txbuf.da.dwValue=rxbuf.da.dwValue;
txbuf.db.dwValue=rxbuf.db.dwValue;
// 寫發送緩沖并啟動發送,這個demo沒有任何超時機制限制
// 真正使用時應該調用IsTransCompleted函數查詢是否發送成功并需要有超時限制
while(CanA.Transmit(&txbuf) == 0);
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -