基于LPC2119和μC/OSII的CAN中继器设计

发布时间:2023-02-08  

  引 言

  CAN总线的直接通信距离只有10 km左右,而且由于收发器驱动能力的限制,总线上最多只能挂110个节点,给系统组网带来一定的困难。CAN中继器就是为了解决这个问题而设计的。对CAN中继器初始化参数进行设置,可以在不同的网段内采用不同的通信速率,还可以对报文进行过滤,减轻总线负担。


  1 CAN中继器的硬件设计

  1.1 微控制器LPC2119简介

  CAN中继器是以ARM微控制器LPC2119为核心的软硬件系统。LPC2119是Philips公司生产的一款基于支持实时仿真和跟踪的16/32位ARM7TDMISMCU,带有128 KB嵌入的高速Flash存储器。独特的加速结构使32位代码能够在最大时钟速率下运行。对代码规模有严格控制的应用可使用16位Thumb模式将代码规模降低超过30 %,而性能的损失却很小。LPC2119内部集成2个CAN控制器。它的主要特性有:单个总线上的数据传输速率高达1 Mb/s;32位寄存器和RAM访问;兼容CAN 2.0B, ISO 118981规范;全局验收滤波器可以识别所有的11位和29位Rx标识符;验收滤波器为选择的标准标识符提供Full CANstyle自动接收。


  1.2 LPC2119内部CAN控制器与SJA1000比较

  LPC2119内部集成的CAN控制器与Philips公司的SJA1000 CAN控制器相比较大致相同,只是在验收滤波这一环略有不同,这为习惯SJA1000的开发人员采用LPC2119提供了方便。SJA1000验收滤波器由验收代码寄存器和验收屏蔽寄存器定义,要接收报文的位模式在验收代码寄存器中定义,相应的验收屏蔽寄存器允许定义某些位为“无关”,通过模式寄存器可以选择不同的过滤模式:单过滤模式和双过滤模式。而对LPC2119内部集成的CAN控制器,全局验收过滤器包含一个512×32(2 KB)的RAM,通过软件处理,可在RAM中存放1~5个标识符表格,整个RAM可容纳1024个标准标识符或512的扩展标识符或两种类型混合的标识符。同时有5个地址寄存器指向验收过滤器RAM的表格:Full CAN标准地址,标准单个地址,标准地址范围,扩展单个地址或扩展地址范围。当CAN控制器的接收端已接收到一个完整的标识符时,它将通知验收过滤器,验收过滤器响应这个信号,并读出控制器编号、标识符尺寸,以及来自控制器本身的标识符,然后通过验收过滤器搜索RAM中的表格,以决定接收或放弃这一帧信息。


  1.3 CAN中继器硬件结构


中继器的硬件结构框图

  图1硬件结构框图

  2 系统软件设计

  2.1 引入μC/OSII实时操作系统

  随着应用的复杂化,采用传统前后台设计方法,会显得过于复杂,实时性得不到保证,而且容易发生死锁。解决这些问题的最好方法就是采用实时操作系统。

  μC/OSII完全是占先式的实时内核, 是基于优先级的, 即总是让就绪态中优先级最高的任务先运行, 因此实时性比非占先式的内核要好。 它包含了实时内核、任务管理、时间管理、任务间通信同步(信号量、邮箱、消息队列) 和内存管理等功能; 它的绝大部分代码是用C 语言编写的, 可移植性强, 可以在绝大多数8 位、16 位、32 位以至64 位微处理器、微控制器、数字信号处理器(DSP) 上运行。

  CAN中继器对系统的实时性和可靠性要求比较高。采用μC/OSII实时操作系统可以有效地对任务进行调度;对各任务赋予不同的优先级可以保证任务及时响应,而且采用实时操作系统,降低了程序的复杂度,方便程序的开发。


  2.2 软件设计中需考虑的问题

  (1) 使用代码的容量

  在前/后台系统的设计中,对存储器容量的需求仅仅取决于应用程序代码,而使用RTOS的情况则很不一样。RTOS 内核本身需要额外的代码空间。

  总代码量=应用程序代码+内核代码

  每个任务都是独立运行的,必须给每个任务提供单独的栈空间(RAM)。在决定分配给每个任务多少栈空间时,应该尽可能使之接近实际的需求量。栈空间的大小不仅要计算任务本身的需求(局部变量、函数调用等) ,还需要计算最多中断嵌套层数(保存寄存器、中断服务程序中的局部变量等)。内核的另一个应该具有的特性是,每个任务所需的栈空间大小可以分别定义。所有内核都需要额外的栈空间,以保证内部变量、数据结构、队列等。如果内核支持中断用栈分离,则总的RAM需求量的表达式为:RAM总需求=应用程序RAM 需求+内核数据区RAM需求+各任务栈需求的总和+最多中断嵌套栈需求。

  除非有特别大的RAM空间可以使用,对栈的分配与使用均要特别小心。实时多任务系统比前后台系统需要更多的代码(ROM) 和数据空间(RAM) 。额外的代码空间取决于内核的大小,而RAM的用量则取决于系统中的任务数。


  (2) 实时性和安全性

  CAN中继器是系统组网的关键设备之一,在稍大型的CAN总线系统中经常会用到中继器。它给系统组网带来方便的同时,也给系统增加了一些存储转发时延,因此在软件设计中必须考虑系统的实时性,尽量缩短数据的存储转发时间。这除了要求给系统数据转发任务分配较高的优先级之外,还应建立一种通信机制,保证在收到一路总线上的数据时,能即时向另一路总线发送。另外,中继器是两路总线之间通信的桥梁,为了保证两路总线之间正常的通信,应尽量避免类似死锁、总线故障之类的情况发生。所以系统必须设计一个监控任务,能对这类情况作出即时反应,同时为了不丢失还未转发的数据,必须为每一路总线设置一环形缓冲区,用于存放新接收到的数据,维护系统的安全性。


  2.3 系统设计实现

  嵌入式CAN中继器主要实现两路CAN总线数据之间相互转发,并且可以根据实际需要,改变某一路CAN控制器的波特率。采用μC/OSII实时操作系统,整个设计由操作系统和一系列用户应用程序构成。


  主函数是程序首先执行的一个函数。该函数永远不会返回,主要实现系统的硬件和操作系统的初始化。硬件包括中断、键盘、显示等初始化;操作系统包括任务控制快和事件控制快的初始化,而且在启动多任务调度之前,必须至少创建一个任务。在此系统中创建了一个启动任务,主要负责时钟的初始化和启动,中断的启动,CAN控制器的初始化及启动及任务的划分等。在交出CPU的使用权之后,只做一些空闲处理。


  (1) 任务的划分

  要完成实时多任务的各种功能,必须对任务进行划分。本程序根据各个任务的重要性和实时性,把程序分成六个具有不同优先级的任务,包括系统监控、数据转发、键盘输入、LED显示、接收队列监视和波特率设置。表1为任务划分表。


  除了6个主要应用任务之外,还有两个中断服务子程序:一个时钟节拍中断,用于提供周期性信号源;一个CAN接收中断,用于把接收数据写入环形缓冲区。


(2) 任务的同步与调度

  通常多任务操作系统的任务不同于一般的函数,它是一个无限循环,而且没有返回值。如果没有更高优先级的任务进入就绪态,当前任务是不会放弃对CPU的使用权的。为了实现操作系统的正常运行和有关事件的同步,必须正确处理任务间的通信和事件标志的设置。整个系统的功能结构如图2所示。

基于LPC2119和μC/OSII的CAN中继器功能框图

  图2系统功能结构

  各个任务具有不同的优先级,通过调用系统挂起函数或延时函数,可以启动具有更高优先级的进入就绪态的任务。在嵌入式CAN中继器的设计中,通过对延时参数的设置,系统每隔一定的时钟节拍,就启动接收队列监视任务,定期扫描环形缓冲区。一旦发现读指针与写指针不相等时,就将环形缓冲区中新接收到的数据存入TEMPBUF中,同时发送信号量SendSem。数据转发任务接收到信号量,启动运行,完成数据转发功能。

  数据转发任务如下:void CANDATA_ExchangeTask(void *pdata)

  {

  #if OS_CRITICAL_METHOD == 3/* 给CPU状态寄存器分配存储器*/

  OS_CPU_SRcpu_sr;

  #endif

  INT8U err;

  pdata=pdata;/*避免编译器警告*/

  for(;;) {

  OSSemPend (SendSem,0,&err);/*等待发送信号量,若无信号则将本函数挂起,并启动其他任务,如系统监控或键盘输入或LED显示等*/

  if (CANNUM == CAN1) {/*判断是哪一路总线接收到数据,如是CAN1,则向CAN2发送数据*/

  ToSendData (TEMPBUF,FORTXBUF );/*将存放在TEMPBUF中的数据转换成可用于发送的数据格式,存放在FORTXBUF中*/

  CanSendData (CAN2,0x00,FORTXBUF);/*向另一路总线发送数据*/

  }

  else {

  ToSendData (TEMPBUF,FORTXBUF );

  CanSendData (CAN1,0x00,TXBUF);

  }

  }

  }同样,其他模块功能——波特率的设置、系统的监控、信息的显示等,也是通过任务间的通信—信号量的传递来实现的,以此来保证时间与任务的同步。


  结语

  基于μC/OSII和LPC2119的CAN中继器,在实验调试过程中,运行状况良好,工作稳定。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>