一种利用DMA实现高速CAN波特率的自动识别方法与流程

文档序号:11250820阅读:1038来源:国知局

本发明涉及检测can波特率技术领域,尤其涉及一种利用dma实现高速can波特率的自动识别方法。



背景技术:

在一些应用场合中,需要ecu控制器做can波特率自动适配。ecu控制器在发送数据前,先监听一段总线数据,通过对总线电平变化规律的分析,估算出can总线目前的波特率,确定波特率后再连接到总线。

目前通过ecu做can波特率自动适配主要有以下几种方案:(1)波特率枚举法:ecu不断的修改can控制器的波特率,直到can控制器接收到有效数据为止。缺点:波特率识别比较慢,若遇到ecu晶振不准或被识别总线采用非常规波特率,会出现波特率无法识别的问题。(2)接收管脚中断法:关闭can控制器,开启接收管脚中断,在中断中记录管脚变化的时间戳。积累一定数据后通过分析时间戳来估算can波特率。缺点:需要在中断中记录时间戳,误差比较大;不支持高速率的can总线(>500kbit/s)。(3)接收管脚捕获法:关闭can控制器,开启接收管脚捕获功能,当接收管脚电平发生变化时,通过定时器的捕获功能获得时间戳,在捕获中断中记录这个时间戳。积累一定数据后通过分析时间戳来估算can波特率。缺点:can通讯管脚不一定有定时器捕获功能,如果使用mcu外部连线就提高了电路复杂度,因为需要在中断中记录时间戳,同样不支持高速率的can总线(>500kbit/s)。



技术实现要素:

本发明的目的在于克服现有技术的不足,提供了一种利用dma实现高速can波特率的自动识别方法。

本发明是通过以下技术方案实现的:一种利用dma实现高速can波特率的自动识别方法,dma采集输入管脚的电平,其特征在于,所述dma接收can.rx的数据信号;所述dma接收定时器timer发射的高频率的信号;所述dma每接收一次信号,就读取一次io输入寄存器,并将其值写入ram中;

包括以下步骤:

(1)首先dma采集输入管脚的电平,由于不需要进入中断,可以获得更高频率的数据采样率;

(2)通过配置定时器timer,以一个很高的频率向dma发送信号,dma每接收一次信号,就读取一次io输入寄存器,并将其值写入ram中;

(3)因为数据采样的频率很快,为了防止ram溢出,主程序只要定期的检查队列中是否有变化的数据,分析其数据表征的can接收管脚电平,即可分析出对应的can波特率。

作为本发明的优选方式之一,所述dma以环形队列的方式操作ram,防止ram的溢出。

作为本发明的优选方式之一,所述的高频率的典型值为10mhz。

作为本发明的优选方式之一,所述定时器timer为ccu6的定时器。

本发明相比现有技术的优点在于:(1)dma一般用于通讯过程中,外设与内存间自动数据传输,极少用于i/o端口的数据采集。但是在波特率检测这种特殊情况下,这种特殊的用法有不可替代的优点。(2)因为是dma直接读取外设管脚的寄存器,对can接收管脚没有其他要求。(3)由于不需要进中断,cpu资源占用少,采样速率高,且采样结果准确。

附图说明

图1是本发明的示意图。

具体实施方式

下面对本发明的实施例作详细说明,本实施例在以本发明技术方案为前提下进行实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施例。

实施例1

如图1所示:一种利用dma实现高速can波特率的自动识别方法,dma采集输入管脚的电平,所述dma接收can.rx的数据信号;所述dma接收定时器timer发射的高频率的信号;所述dma每接收一次信号,就读取一次io输入寄存器,并将其值写入ram中;当dma采集数据频率比较高时,因为对mcu总线的占用,会一定程度上降低cpu的执行速度,但波特率检查只在接入总线后较短的一段时间内执行,并不会对系统照成很大的影响;

包括以下步骤:

(1)首先dma采集输入管脚的电平,由于不需要进入中断,可以获得更高频率的数据采样率;

(2)通过配置定时器timer,以一个很高的频率向dma发送信号,dma每接收一次信号,就读取一次io输入寄存器,并将其值写入ram中;

(3)因为数据采样的频率很快,为了防止ram溢出,主程序只要定期的检查队列中是否有变化的数据,分析其数据表征的can接收管脚电平,即可分析出对应的can波特率。

作为本发明的优选方式之一,所述dma以环形队列的方式操作ram,防止ram的溢出。

作为本发明的优选方式之一,所述的高频率的典型值为10mhz。

作为本发明的优选方式之一,所述定时器timer为ccu6的定时器。

本发明在aurixtc265硬件基础上,使用ccu6的定时器作为图1中定时器timer,首先对ccu6的定时器进行配置,使其每0.1us秒产生一个硬件事件:

用此配置设置好ccu6的定时器后,挂接硬件事件与dma:

然后配置dma的工作模式为:

启动dma后,数据缓冲pinstatebuffser中始终保存着最近0.5ms内管脚变化的情况,对pinstatebuffser中的数据稍作分析,即可得到can通讯的波特率。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。



技术特征:

技术总结
本发明公开了一种利用DMA实现高速CAN波特率的自动识别方法,DMA采集输入管脚的电平,所述DMA接收CAN.RX的数据信号;所述DMA接收定时器发射的高频率的信号;所述DMA每接收一次信号,就读取一次IO输入寄存器,并将其值写入RAM中。本发明相比现有技术的优点在于:(1)DMA一般用于通讯过程中,外设与内存间自动数据传输,极少用于I/O端口的数据采集。但是在波特率检测这种特殊情况下,这种特殊的用法有不可替代的优点。(2)因为是DMA直接读取外设管脚的寄存器,对CAN接收管脚没有其他要求。(3)由于不需要进中断,CPU资源占用少,采样速率高,且采样结果准确。

技术研发人员:何玮
受保护的技术使用者:北京欧鹏巴赫新能源科技股份有限公司
技术研发日:2017.05.02
技术公布日:2017.09.15
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1