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

发布者:pingbashou最新更新时间:2019-11-28 来源: 51hei关键字:LPC1768  17XX  CAN控制器  硬件查找表 手机看文章 扫描二维码
随时随地手机看文章

一、背景: 


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


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


二、正文: 

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: // 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)为扩展帧组标识符查找表大小。

关键字:LPC1768  17XX  CAN控制器  硬件查找表 引用地址:LPC1768/17XX之CAN控制器硬件查找表的理解

上一篇:LPC1788 SPI主从机代码
下一篇:LPC1100 IAP使用注意事项与实验例程源码V2.0-基于Keil编译环境

推荐阅读最新更新时间:2024-11-10 09:02

在LPC2131微控制器外部实现CAN总线通信设计
Philips公司的LPC213l是基于ARM7TDMI-S的高性能32位RISC微控制器。它具有ARM处理器的所有优点——低功耗、高性能和较为丰富的片上资源,但LPC2131内部没有集成CAN控制器,而无法利用CAN总线来进行通信。为了使得LPC2131能够利用CAN总线进行通信,可以通过外部扩展来实现其功能。目前,比较普通的方法是在LPC2131的外部采用CAN控制器设计CAN总线接口。LPC2131与CAN控制器的接口电路如图1所示。 这种方法中,LPC2131是通过GPIO口与CAN控制器SJA1000相连实现数据交互的。LPC2131通过寄存器IOSET/IOCLR来设定I/O口的高/低状态,虽然可以同时置位/拉低
[单片机]
在LPC2131微<font color='red'>控制器</font>外部实现<font color='red'>CAN</font>总线通信设计
LPC1768之中断
一外中断:只有特定的4个外中断引脚, 1 在特定的引脚上,引脚功能要选对应的外中断功能 2设定的触发条件(高低电平、上升/下降沿) 3 NVIC设定,特定的通道。 二GPIO中断: 1只有GPIO0和GPIO2上的引脚,且与外中断3共用NVIC通道。即NVIC设置、中断使能、中断函数名、清楚NVIC中断标记都是用EXIT3_IRQ 2只能配置成上升沿、下降沿中断、总中断(先判断是那个端口、然后判断是那个位中断)。(异步检测无需电平可在掉电情况下使用。) 3管脚配置成通用的输入输出。参考http://www.mamicode.com/info-detail-516502.html 三引脚上的特殊中断:如定时器捕获CAP0/1
[单片机]
LPC1768的看门狗定时器使用
void wwdg_init(void) { LPC_SC- PCLKSEL0 |= (3 0);//分频数为八分频 LPC_WDT- WDCLKSEL &= ~(3 0); LPC_WDT- WDCLKSEL |= (1 0);//设置wdt时钟为apb LPC_WDT- WDCLKSEL |= (1 31);//锁定时钟源 LPC_WDT- WDTC = 0xffff;//设定重载值 LPC_WDT- WDMOD |= (1 0)|(1 1);//看门狗使能并设定引发复位 //此时初始化就完成了 } //关闭系统总中断 __asm void NVIC_SETPRIMASK(void) { CPS
[单片机]
LPC1768IAP(详解,有上位机)
  之前说了stm32的iap编程,今天天气真好,顺手就来说说lpc1788的iap编程(没看前面的请查看stm笔记下的内容)   首先是flash的算法,lpc1768并没有寄存器来让我们操作flash,他内置了iap的flash算法,在技术手册的525页有如下说明      其支持的iap命令有这些 这样我们就能够做出相关的flash读写借口呢(具体请查看lpc1768的技术手册) unsigned param_table ;//传递参数列表 unsigned result_table ;//返回结果列表 //调用iap命令 void iap_entry(unsigned param_tab ,unsigned re
[单片机]
LPC1768IAP(详解,有上位机)
基于89C51单片机和CAN控制器实现老旧住宅供暖计量系统的改造设计
1、引言 CAN总线技术诞生于汽车控制领域,随着其技术的不断完善,应用领域也不断扩展。 CAN总线技术进入我国以来,在经历了引进、使用阶段后,自2000年以来,国内许多相关厂商对该总线技术进行了不懈的研究与开发,取得了一定的成果,目前,国内CAN总线技术已经在汽车控制、数控机床、医疗器械和楼宇自动化等众多领域得到了应用,是受到广泛关注的总线技术之一。 CAN总线具有现场总线的特点,适合于分布式系统的应用。目前,国内已具有一定的 CAN总线产品的开发能力,其应用成本也随之降低,所以,在传统控制系统的改造中 CAN总线技术得到了比较广泛的应用。随着热能商品化和供暖计费制度的改革,国内居民住宅供暖体制也将发生变化,其中最为重要的也是
[单片机]
基于89C51单片机和<font color='red'>CAN</font><font color='red'>控制器</font>实现老旧住宅供暖计量系统的改造设计
LPC1768时钟详解
LPC1768有三个独立的时钟源,可以通过软件进行配置。MCU上电并成功复位后,内部的RC振荡器开始起振,并以此为工作频率去读取内部ROM区的代码来执行初始化工作,其中就包括对系统时钟的配置(在文件system_LPC17xx.c中)。 系统时钟配置的过程如下: LPC1700系列Cortex-M3微控制器包括3个独立的振荡器,它们分别为主振荡器(通常指外界晶振)、内部RC振荡器和RTC振荡器。每个振荡器可根据特定的应用要求来选用(通过配置时钟源选择寄存器CLKSRCSEL),寄存器配置如下
[单片机]
<font color='red'>LPC1768</font>时钟详解
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved