|
一、背景:
使用LPC1768來(lái)做CAN的收發(fā),在此對(duì)使用LPC1769的 CAN 控制器進(jìn)行收發(fā)做個(gè)總結(jié)和記錄,以備下次開(kāi)發(fā)快速上手使用。
附:LPC1768/1769 除了支持最高頻率不同以外,其它基本上一致。
二、正文:
先貼一張 LPC1769 CAN 控制器的方框圖:
0.png (214.51 KB, 下載次數(shù): 72)
下載附件
2018-10-18 14:11 上傳
由上圖可見(jiàn),整個(gè) CAN 控制器一頭是 CPU,另一頭是 CAN 收發(fā)器:
CAN 收發(fā)器負(fù)責(zé) CAN 數(shù)據(jù)與 CAN 網(wǎng)絡(luò)的通信。CAN 內(nèi)核模塊解析和封裝要發(fā)送到 CAN 收發(fā)器以及從 CAN
收發(fā)器發(fā)過(guò)來(lái)的數(shù)據(jù),此處 CAN 內(nèi)核工作由硬件自行完成。
CPU通過(guò) APB總線(xiàn)即可設(shè)置 CAN 控制器狀態(tài),以及讀取中斷信息和中斷狀態(tài)。
一共有 3 個(gè)發(fā)送緩沖器(郵箱),這樣就可以保證,最少可以發(fā)送 3組并發(fā)的 CAN 數(shù)據(jù);
2 個(gè)接收緩沖器(郵箱),這樣就可以在 CPU 處理 1 個(gè)郵箱的接收數(shù)據(jù)的同時(shí),
還能用另一個(gè)郵箱接收網(wǎng)絡(luò)上的數(shù)據(jù)。
LPC17XX CAN 的驗(yàn)收濾波器比較特殊,
它是一個(gè)獨(dú)立于 CAN 控制器的器件,也屬于一種外設(shè),不過(guò)比較特殊的是,
0.png (89.02 KB, 下載次數(shù): 80)
下載附件
2018-10-18 14:12 上傳
它是服務(wù)于 CAN 控制器的外設(shè),這么做的意義就在于,驗(yàn)收濾波這方面,不再需要軟件來(lái)做任何事情,直接由硬件來(lái)實(shí)現(xiàn)查表算法,節(jié)省寶貴的 CPU資源,由于它也算是一個(gè)
獨(dú)立的外設(shè),
CAN 驗(yàn)收濾波器有 2 種工作模式:一種是一般模式;另一種被稱(chēng)為“FullCAN 模式”。
1.在一般模式下,當(dāng) CAN 控制器的接收端收到一個(gè)完整的標(biāo)識(shí)符時(shí),它將通知接收驗(yàn)收濾波器。驗(yàn)收濾波器響應(yīng)這個(gè)信號(hào),讀出 CAN 控制器編號(hào)和標(biāo)識(shí)符大小(標(biāo)準(zhǔn)標(biāo)識(shí)符 ll 位或擴(kuò)展標(biāo)識(shí)符 29位);然后搜索 LUT,查找匹配的標(biāo)識(shí)符。如果找到匹配的標(biāo)識(shí)符,則通知 CAN 控制器將接收的報(bào)文放入 CAN控制器接收緩沖中;否則,放棄接收到的這一幀信息。
2.如果使能 FullcAN 模式,且 CAN 控制器報(bào)告產(chǎn)生的是一
個(gè)標(biāo)準(zhǔn)標(biāo)識(shí)符,則驗(yàn)收過(guò)濾器首先查詢(xún) FullCAN 標(biāo)準(zhǔn)標(biāo)識(shí)符表然后在 FullCAN 模式下處理接收。如果在 FullCAN 標(biāo)準(zhǔn)標(biāo)識(shí)符表中沒(méi)有找到匹配的 ID,則依次查找下一個(gè)存在的表格,直到找到匹配者或查找表結(jié)束。一旦發(fā)現(xiàn)匹配的 ID,就將接收到的報(bào)文放入特定的報(bào)文緩沖中而不是 CAN 控制器接收緩沖中,這個(gè)特定的緩沖位于驗(yàn)收濾波器的 RAM 中,而且是在 LUT的最后部分。CPU可以在任何時(shí)候讀取接收到的報(bào)文。
以上讀起來(lái)有點(diǎn)累:
我的理解獨(dú)立的外設(shè) CAN,
1.本質(zhì)是多個(gè)硬件比較器,接受 ID 與內(nèi)部設(shè)定 ID自動(dòng)比較,不通過(guò) CPU,直接由硬件來(lái)實(shí)現(xiàn)查表算法,節(jié)省寶貴的CPU 資源。這是 NXP-CAN獨(dú)特優(yōu)點(diǎn), 實(shí)時(shí)工控系統(tǒng)需要由多個(gè)功能 CAN,RS485,I2C,用戶(hù)邏輯編程等。NXP-CAN 適合設(shè)計(jì)實(shí)時(shí)控制系統(tǒng)。
2.編程
只是設(shè)定接收濾波器工作模式,與收濾波器起始地址。
3.其它設(shè)定網(wǎng)上資料很多。
0.png (177.58 KB, 下載次數(shù): 62)
下載附件
2018-10-18 14:13 上傳
/*-------------------------------------------------------------------
* 函數(shù)名稱(chēng): CAN_SetACCF()
* 參 數(shù): 波特率
* 返 回: XX
* 函數(shù)功能: 接收濾波器狀態(tài)
* 版本信息: 2010-04-30 * 修改信息:
-*-------------------------------------------------------------------
void CAN_SetACCF(const unsigned int ACCFMode)
{
switch (ACCFMode)
{
case ACCF_OFF: // 接收濾波器狀態(tài)-復(fù)位/停止
LPC_CANAF->AFMR = ACCFMode;// 不 緩 沖 區(qū) 接 收 報(bào)
文
break;
case ACCF_BYPASS: // 接收濾波器狀態(tài)-復(fù)位/停止
LPC_CANAF->AFMR = ACCFMode; // 所有接收的報(bào)文
存到接收緩沖區(qū)中
break;
// 接收濾波器狀態(tài)-運(yùn)行 // 硬件接收過(guò)濾
case ACCF_ON: // ACCOFF\ACCBP\EFCAN=0 時(shí),接收濾波
器處于工作模式
case ACCF_FULLCAN: // ,接收濾波器處于 FullCAN 工作模
式
LPC_CANAF->AFMR = ACCF_OFF;
CAN_SetACCF_Lookup();
LPC_CANAF->AFMR = ACCFMode;
break;
default: break;
}
}
/*-------------------------------------------------------------------
函數(shù)名稱(chēng): CAN_SetACCF()
* 參 數(shù): 波特率
* 返 回: XX
* 函數(shù)功能: 接收濾波器狀態(tài)
*
*-*------------------------------------------------------------------
void CAN_SetACCF_Lookup(void)
{
unsigned int address = 0;
unsigned int ID_high, ID_low;
/* Set explicit standard Frame */
LPC_CANAF->SFF_sa = address;
ID_low = (0x125 << 16);
ID_high = 0x126;
*((volatile uint32_t *)(LPC_CANAF_RAM_BASE + address))
= ID_low | ID_high;
address += 4;
/* Set group standard Frame */
LPC_CANAF->SFF_GRP_sa = address;
ID_low = (0x125 << 16); // 下邊界
ID_high = 0x129; / 上邊界
*((volatile uint32_t *)(LPC_CANAF_RAM_BASE + address))
= ID_low | ID_high;
address += 4;
LPC_CANAF->EFF_sa = address; //標(biāo)準(zhǔn)擴(kuò)展幀
LPC_CANAF->EFF_GRP_sa = address; // 擴(kuò)展幀組幀
/* Set End of Table */
LPC_CANAF->ENDofTable = address; //表結(jié)束地址
}
/*--------------------------------------------------------------------------------*-
* 函數(shù)名稱(chēng): CAN_SetACCF_Lookup()
* 參 數(shù): 波特率
* 返 回: XX
* 函數(shù)功能: 接收濾波器狀態(tài)
* 說(shuō) 明: 如果一個(gè)表格的起始地址等于下一個(gè)表格的起始
地址或表格終止寄存器的數(shù)值,
* 則該表格為空,在處理中將被忽略。
* 表格的大小由其前后 2 個(gè)表格起始地址寄存器的差值決
定。
* 例如,(SFF_GRP_sa) - (SFF_sa)為獨(dú)立標(biāo)準(zhǔn)幀標(biāo)識(shí)符查找表
格大小。
* 若其值為0,即 SFF_GRP_sa=SFF_sa,則獨(dú)立標(biāo)準(zhǔn)幀標(biāo)識(shí)符
查找表格大小為 0,
* 在查找時(shí)此表格將被忽略。查找表結(jié)束寄存器 ENDofTable
代表查找表結(jié)束地址,
* (ENDofTable) - (EFF_GRP_sa)為擴(kuò)展幀組標(biāo)識(shí)符查找表大小。
完整的pdf格式文檔51黑下載地址:
LPC1768CAN硬件過(guò)過(guò)濾器2.zip
(688.05 KB, 下載次數(shù): 19)
2018-10-18 08:36 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|