久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9098|回復: 2
收起左側

LPC1768/17XX之CAN控制器硬件查找表的理解

[復制鏈接]
ID:90762 發表于 2018-10-18 08:36 | 顯示全部樓層 |閱讀模式
一、背景:
         使用LPC1768來做CAN的收發,在此對使用LPC1769的 CAN 控制器進行收發做個總結和記錄,以備下次開發快速上手使用。
     附:LPC1768/1769 除了支持最高頻率不同以外,其它基本上一致。

二、正文:
         先貼一張 LPC1769 CAN 控制器的方框圖:
0.png
由上圖可見,整個 CAN 控制器一頭是 CPU,另一頭是 CAN 收發器:        
    CAN 收發器負責 CAN 數據與 CAN 網絡的通信。CAN 內核模塊解析和封裝要發送到 CAN 收發器以及從 CAN   
    收發器發過來的數據,此處 CAN 內核工作由硬件自行完成。   
    CPU通過 APB總線即可設置 CAN 控制器狀態,以及讀取中斷信息和中斷狀態。      
    一共有 3 個發送緩沖器(郵箱),這樣就可以保證,最少可以發送 3組并發的 CAN 數據;
    2 個接收緩沖器(郵箱),這樣就可以在 CPU 處理 1 個郵箱的接收數據的同時,
    還能用另一個郵箱接收網絡上的數據。        
     LPC17XX CAN 的驗收濾波器比較特殊,
    它是一個獨立于 CAN 控制器的器件,也屬于一種外設,不過比較特殊的是,
0.png

它是服務于 CAN 控制器的外設,這么做的意義就在于,驗收濾波這方面,不再需要軟件來做任何事情,直接由硬件來實現查表算法,節省寶貴的 CPU資源,由于它也算是一個
    獨立的外設,   
   
CAN 驗收濾波器有 2 種工作模式:一種是一般模式;另一種被稱為“FullCAN 模式”。
1.在一般模式下,當 CAN 控制器的接收端收到一個完整的標識符時,它將通知接收驗收濾波器。驗收濾波器響應這個信號,讀出 CAN 控制器編號和標識符大小(標準標識符 ll 位或擴展標識符 29位);然后搜索 LUT,查找匹配的標識符。如果找到匹配的標識符,則通知 CAN 控制器將接收的報文放入 CAN控制器接收緩沖中;否則,放棄接收到的這一幀信息。
    2.如果使能 FullcAN 模式,且 CAN 控制器報告產生的是一
個標準標識符,則驗收過濾器首先查詢 FullCAN 標準標識符表然后在 FullCAN 模式下處理接收。如果在 FullCAN 標準標識符表中沒有找到匹配的 ID,則依次查找下一個存在的表格,直到找到匹配者或查找表結束。一旦發現匹配的 ID,就將接收到的報文放入特定的報文緩沖中而不是 CAN 控制器接收緩沖中,這個特定的緩沖位于驗收濾波器的 RAM 中,而且是在 LUT的最后部分。CPU可以在任何時候讀取接收到的報文。

以上讀起來有點累:
我的理解獨立的外設 CAN,
1.本質是多個硬件比較器,接受 ID 與內部設定 ID自動比較,不通過 CPU,直接由硬件來實現查表算法,節省寶貴的CPU 資源。這是 NXP-CAN獨特優點, 實時工控系統需要由多個功能 CAN,RS485,I2C,用戶邏輯編程等。NXP-CAN 適合設計實時控制系統。
     
2.編程
只是設定接收濾波器工作模式,與收濾波器起始地址。
3.其它設定網上資料很多。
0.png

/*-------------------------------------------------------------------
*  函數名稱: CAN_SetACCF()
*  參      數:  波特率
*  返      回: XX
*  函數功能:  接收濾波器狀態
*  版本信息: 2010-04-30          *  修改信息:   
-*-------------------------------------------------------------------
void CAN_SetACCF(const unsigned int ACCFMode)
{
            
      switch (ACCFMode)  
            {
             case ACCF_OFF:         //  接收濾波器狀態-復位/停止
    LPC_CANAF->AFMR = ACCFMode;//  不 緩 沖 區 接 收 報
文            
                        break;
                        
         case ACCF_BYPASS:         //  接收濾波器狀態-復位/停止
             LPC_CANAF->AFMR = ACCFMode; //  所有接收的報文
存到接收緩沖區中
                        break;
                        //  接收濾波器狀態-運行         //  硬件接收過濾
         case ACCF_ON: // ACCOFF\ACCBP\EFCAN=0 時,接收濾波
器處于工作模式
         case ACCF_FULLCAN: //  ,接收濾波器處于 FullCAN 工作模

                  LPC_CANAF->AFMR = ACCF_OFF;
                 CAN_SetACCF_Lookup();
                 LPC_CANAF->AFMR = ACCFMode;
                        break;            

                        default:            break;
            }
}

/*-------------------------------------------------------------------
函數名稱: CAN_SetACCF()
*  參      數:  波特率
*  返      回: XX
*  函數功能:  接收濾波器狀態
*                  
*-*------------------------------------------------------------------
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;             //標準擴展幀
            LPC_CANAF->EFF_GRP_sa = address;     //  擴展幀組幀
                          /* Set End of Table */
         LPC_CANAF->ENDofTable = address;     //表結束地址
}


   
/*--------------------------------------------------------------------------------*-
*  函數名稱: CAN_SetACCF_Lookup()
*  參      數:  波特率
*  返      回: XX
*  函數功能:  接收濾波器狀態                  
*  說      明:  如果一個表格的起始地址等于下一個表格的起始
地址或表格終止寄存器的數值,
*       則該表格為空,在處理中將被忽略。
*       表格的大小由其前后 2 個表格起始地址寄存器的差值決
定。
*     例如,(SFF_GRP_sa) - (SFF_sa)為獨立標準幀標識符查找表
格大小。
*   若其值為0,即 SFF_GRP_sa=SFF_sa,則獨立標準幀標識符
查找表格大小為 0,
*    在查找時此表格將被忽略。查找表結束寄存器 ENDofTable
代表查找表結束地址,
*     (ENDofTable) - (EFF_GRP_sa)為擴展幀組標識符查找表大小。


完整的pdf格式文檔51黑下載地址:
LPC1768CAN硬件過過濾器2.zip (688.05 KB, 下載次數: 19)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:441038 發表于 2018-12-6 16:48 | 顯示全部樓層
非常好的資源。
回復

使用道具 舉報

ID:6656 發表于 2018-12-10 14:09 | 顯示全部樓層
多謝分享,資源很好
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产片侵犯亲女视频播放 | 国产成人免费视频 | 久久不卡| www久久国产 | 亚洲一二三区免费 | 日韩和的一区二在线 | 亚洲视频www | 色偷偷噜噜噜亚洲男人 | 国产欧美视频一区二区 | 日日草夜夜草 | 国产一区二区三区日韩 | 91豆花视频 | 午夜影院操| 国产久| 99九九视频 | 国产激情自拍视频 | 热99精品视频 | 韩日一区二区三区 | 欧美日韩高清在线一区 | 国产真实精品久久二三区 | 国产精品视频在线观看 | 国产精品国产自产拍高清 | 国产三级日本三级 | 亚洲看片网站 | 欧美精品一区免费 | 91视视频在线观看入口直接观看 | 91精品福利 | 午夜天堂精品久久久久 | 日本一区视频在线观看 | 亚洲成人精品免费 | 小川阿佐美pgd-606在线 | 成人在线中文 | 成人精品久久 | 激情欧美日韩一区二区 | 九九热在线免费视频 | 久久国产精品视频免费看 | 另类视频在线 | 久久亚洲国产 | 国产99久久精品一区二区永久免费 | 国产高清无av久久 | 国产成人综合一区二区三区 |