历史上的今天
返回首页

历史上的今天

今天是:2024年11月28日(星期四)

正在发生

2019年11月28日 | LPC1768/17XX之CAN控制器硬件查找表的理解

2019-11-28 来源:51hei

一、背景: 


使用LPC1768来做CAN的收发,在此对使用LPC1769的 CAN 控制器进行收发做个总结和记录,以备下次开发快速上手使用。 


附:LPC1768/1769 除了支持最高频率不同以外,其它基本上一致。 


二、正文: 

0.png?imageView2/2/w/550 

由上图可见,整个 CAN 控制器一头是 CPU,另一头是 CAN 收发器:        


CAN 收发器负责 CAN 数据与 CAN 网络的通信。CAN 内核模块解析和封装要发送到 CAN 收发器以及从 CAN    


收发器发过来的数据,此处 CAN 内核工作由硬件自行完成。   


CPU通过 APB总线即可设置 CAN 控制器状态,以及读取中断信息和中断状态。      


 一共有 3 个发送缓冲器(邮箱),这样就可以保证,最少可以发送 3组并发的 CAN 数据; 


2 个接收缓冲器(邮箱),这样就可以在 CPU 处理 1 个邮箱的接收数据的同时, 


还能用另一个邮箱接收网络上的数据。        


LPC17XX CAN 的验收滤波器比较特殊, 


它是一个独立于 CAN 控制器的器件,也属于一种外设,不过比较特殊的是, 

0.png?imageView2/2/w/550 

它是服务于 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?imageView2/2/w/550 

/*------------------------------------------------------------------- 

*  函数名称: 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: // ACCOFFACCBPEFCAN=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)为扩展帧组标识符查找表大小。

推荐阅读

史海拾趣

Bytes公司的发展小趣事

随着市场规模的扩大,Bytes公司意识到供应链管理和成本控制的重要性。公司不断优化供应链结构,提高采购效率和质量,降低生产成本。同时,公司还通过精细化管理,降低运营成本,提高盈利能力。这些措施使得Bytes公司在激烈的市场竞争中保持了良好的财务状况。

AAEON公司的发展小趣事

随着市场规模的扩大,Bytes公司意识到供应链管理和成本控制的重要性。公司不断优化供应链结构,提高采购效率和质量,降低生产成本。同时,公司还通过精细化管理,降低运营成本,提高盈利能力。这些措施使得Bytes公司在激烈的市场竞争中保持了良好的财务状况。

艾谱科(Epticore)公司的发展小趣事

艾谱科公司深知技术创新的重要性。为了保持产品的竞争力,公司不断加大研发投入,积极引进高素质人才,并与国内外知名科研机构建立合作关系。在研发团队的努力下,艾谱科不断推出具有创新性的产品,如低功耗处理器、高速数据传输模块等。这些新产品不仅提升了公司的市场竞争力,也为客户提供了更加优质的产品选择。

Densei-Lambda (TDK)公司的发展小趣事

艾谱科公司的创立源于其创始人对电子行业未来发展的独到见解。在21世纪初,随着数字化和智能化技术的飞速发展,创始人意识到电子行业即将迎来一场技术革命。他带领团队深入研究新兴技术,并成功开发出一款具有划时代意义的电子元件——高效能芯片。这款芯片凭借其出色的性能和稳定性,迅速获得了市场的认可,为艾谱科公司的发展奠定了坚实的基础。

和芯润德(CoreChips)公司的发展小趣事

在2010年代初,中国的集成电路市场仍被国际巨头所主导,技术壁垒高筑。然而,和芯润德科技有限公司(以下简称“和芯润德”)却勇敢地挑战了这一现状。公司创始人团队凭借对技术的深刻理解和不懈追求,成功研发出首款具有自主知识产权的以太网网络芯片,打破了美系技术的长期垄断。这一突破不仅为和芯润德赢得了市场的认可,也为中国集成电路产业赢得了宝贵的尊严。

CET Technology公司的发展小趣事

为满足公司业务板块的不断完善和团队的日益壮大,CET Technology深圳总部在2020年迎来了新的里程碑。公司乔迁至位于深圳国际创新谷的甲级写字楼,办公面积扩大近一倍,实现了硬件办公环境的升级。新址位于留仙洞总部基地核心地带,地理位置优越,为公司员工及客户提供更高效的品质体验。此次迁址不仅展现了CET的雄厚实力,也标志着公司迈向了新的发展阶段。

问答坊 | AI 解惑

USB数据采集方面的论文

谁有USB数据采集方面的论文,基于msp430+ch375。相关的即可,在写论文。QQ邮箱:419681844@qq.com,…

查看全部问答>

DVR的结构解析以及工作原理

最近关注安防领域,希望同行们多多交流。 DVRDigitalVideoRecorder(数字硬盘录像机),是目前视频监控行业最为常见并且最为理想的监控和记录视频资料的设备。 DVR是一套进行图像存储处理的计算机系统,具有对图像/语音进行长时间录像、录音、远程 ...…

查看全部问答>

维控 开机画面停留5秒进入指定画面

 开机后点开机画面任意点,就跳到指定画面。   首先,在工程配置的系统参数里,一般属性栏下有个“启用系统控制区”,输入控制画面切换的地址,这个地址可以用我们的HDW里的地址,我们就拿HDW0为例。   然后,在开机画面上加个无 ...…

查看全部问答>

急!!! 关于倒计时牌设计

各位大虾  14位的倒计时牌设计  我实在是凑不齐14位  不知道是哪14位 有现成的程序最好  先谢谢啦!! …

查看全部问答>

usb线缆插入WinCE设备以后充电过程是在哪里实现的?

如题,请教各位,当usb线缆插入WinCE设备以后应该是先充电再通信,那么充电过程是在哪里实现的?…

查看全部问答>

一个cf卡启动的问题!请指导一下^-^

昨天用cf卡进行vxworks启动,成功了!但是有一个地方我没改,原以为启动不了,但是发现居然也成功了!! 问题是:在sysLib.c中将原来的ataTypes数组 ATA_TYPE ataTypes[ATA_MAX_CTRLS][ATA_MAX_DRIVES] =     { ................   &n ...…

查看全部问答>

LED环氧树脂工艺不良处理方法

[hide]LED生产过程中所使用的环氧树脂(Epoxy),是业界制作产品时的重点之一,以下是LED工艺中个别不良现象的处理方法:一、因硬化不良而引起裂化现象:硬化物中有裂化发生。原因:硬化时间短,烤箱之温度不均匀。处理方法:1.测定Tg是否有硬化不良 ...…

查看全部问答>

最近有没有stm32开发板团购活动

最近有没有stm32开发板团购活动…

查看全部问答>

今天才参加完ST武汉站研讨会,

                                 第一次接触ST的MCU,不能说它很强但整体上觉得ST32还是很特色的一种,至少在USB和Ethernet及ADC(会上说它有16个通道 ...…

查看全部问答>