DSP读取扩展串口中接收通道数据的方法与流程

文档序号:12034536阅读:1574来源:国知局
DSP读取扩展串口中接收通道数据的方法与流程

本发明涉及嵌入式计算机领域,具体涉及一种dsp读取扩展串口中接收通道数据的方法。



背景技术:

现有的数字信号处理芯片(以下简称dsp)只含有1~3个uart(通用异步收发器),urat的信号经过不同的串行通信协议驱动芯片形成不同的串行通信协议标准接口(以下简称串口)。当dsp要与多个串口设备(大于其自带的串口数量)进行通信时,需要对其进行串口扩展。

串口扩展多采用专用集成电路。串口扩展芯片与dsp相连接,由dsp控制串口扩展芯片的数据收发等操作。由于dsp的外触发中断管脚数量有限,通常采取多个扩展串口通道的接收中断信号经过逻辑或之后连接到dsp的一个外触发中断管脚上。某些型号dsp或单片机外触发中断没有电平触发功能,只有边沿触发功能。这些类型的dsp从扩展串口芯片中读取相应接收通道的数据只能采用轮询模式或边沿触发中断模式。轮询模式操作简单,但响应慢、效率低和时间不确定性,当接收通道的数据帧频较高时很容易丢帧。边沿触发中断模式响应快,但当多个扩展串口接收通道的数据帧频都较高时,由于数据读取需要占用一定的时间,就会导致某些通道串口中断得不到及时处理,这些接收通道中断管脚的电平无法得到有效的复位,导致这些通道永久性失去触发dsp外部中断的功能,从而导致在中断模式下无法读取这些接收通道中的数据,造成该通道失效。



技术实现要素:

本发明为解决现有dsp与扩展串口芯片进行数据交互时,存在只能采用轮询模式或边沿触发中断模式,导致接收通道的数据帧频较高时很容易丢帧以及由于无法读取接收通道中的数据造成数据通道失效等问题,提供一种dsp读取扩展串口中接收通道数据的方法。

dsp读取扩展串口中接收通道数据的方法,该方法由以下步骤实现:

步骤一、对dsp以及扩展串口专用集成电路进行初始化;

步骤二、初始化后的dsp同时开启中断模式和轮询模式,如果中断条件满足,则进入中断服务程序,如果轮询条件满足,则进入轮询处理程序。

所述进入中断模式或轮询模式中的程序执行方式相同,具体为:

扫描各扩展串口接收通道对应的触发中断管脚的电平状态,若该通道管脚电平状态与中断触发时的电平状态一致,则查询该通道接收fifo中的数据个数,然后将fifo中所有数据读取并保存至用于该通道的专用数组中;若该通道管脚电平状态与中断触发时的电平状态不一致,则对该通道无任何操作;

步骤三、将步骤二中读取各扩展串口接收通道的数据保存在专用数组中,具体为:

设定专用数组中已存在数据起点为p,终点为q,数据长度为m,即p+m=q;专用数组起点为0,终点为f-1,长度为f,且存在如下关系0≤p≤q≤f-1;专用数组中已存在数据终点位置q与该扩展串口接收通道fifo中数据长度n之和为q+n;

若q+n≤f-1,则保持专用数组中已存在数据的起点位置p值不变,将接收通道fifo中的所有数据顺序保存至专用数组中已存在数据终点位置q之后,并将专用数组中已存在数据终点位置更新为q+n;

若q+n>f-1,则将专用数组中已存在数据整体往零点位置移动距离为q+n-f+1,此时已存在数据的起点为p-q-n+f-1,已存在数据的终点为f-1-n;

若p-q-n+f-1≥0,则将接收通道fifo中的所有数据顺序保存至专用数组中已存在数据终点位置f-1-n之后,并将专用数组中已存在数据终点位置修改为f-1,起点值p-q-n+f-1保持不变;

若p-q-n+f-1<0且f-1-n≥0,则将接收通道fifo中的所有数据顺序保存至专用数组中已存在数据终点位置f-1-n之后,并将专用数组中已存在数据终点位置修改为f-1,起点值修改为0;

若p-q-n+f-1<0且f-1-n<0,则专用数组的长度f小于扩展串口接收通道fifo中数据长度n,则程序结束。

本发明的有益效果:本发明所述的方法采用中断模式和轮询模式相结合的方式,将相应扩展串口接收通道fifo中的数据,按照特定的方式存储在专用数组里。该方法解决了单独采用轮询模式的时间不确定性和接收通道数据高帧频下丢帧的问题,也避免了单独采用中断模式而导致在接收通道数据高帧频下接收通道失效的问题。两种模式的有机结合使得dsp能快速处理接收通道的数据,即使在高帧频下也能做到串口接收通道不失效,接收数据无丢帧,极大提高了扩展串口的可靠性。

附图说明

为了更清楚地说明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图做简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明所述的dsp读取扩展串口中接收通道数据的方法中dsp与扩展串口集成电路的连接关系示意图;

图2为本发明所述的dsp读取扩展串口中接收通道数据的方法中dsp初始化的流程图;

图3为本发明所述的dsp读取扩展串口中接收通道数据的方法中dsp对扩展串口集成电路初始化的流程图;

图4为本发明所述的dsp读取扩展串口中接收通道数据的方法中扩展串口集成电路的接收通道数据保存至专用数组的流程图;

图5中(a)、(b)、(c)和(d)分别为本发明所述的dsp读取扩展串口中接收通道数据的方法中扩展串口接收通道数据保存至专用数组的四种位置示意图。

具体实施方式

具体实施方式一、结合图1至图5说明本实施方式,dsp读取扩展串口中接收通道数据的方法,dsp与扩展串口专用集成电路的连接关系结合图1,dsp通过xintf接口(外部接口)分别与每个扩展串口集成电路的数据总线、地址总线及读写信号线相连接,通过xintf的多余的地址总线(如xa[7:5])经三八译码器来控制控制扩展串口集成电路的各通道的片选。各扩展串口集成电路的中断信号1~中断信号n,经过逻辑或元器件之后输出到dsp的外部中断管脚,且所有中断信号1~中断信号n分别输入到dsp的gpio管脚。

具体方法以由以下步骤实现:

一、对dsp初始化,结合图2和图3,包括以下步骤:配置系统时钟,初始化所有gpio,初始化相关外设,延迟一段时间后初始化扩展串口集成电路,配置外部中断,相关中断使能,全局中断使能;所述延迟一段时间大于等于扩展串口上电后至能进行寄存器读写的等待时间,否则会导致dsp对扩展串口初始化不完整,甚至扩展串口无法初始化。

所述初始化扩展串口集成电路的步骤为:配置数据位、停止位、奇偶校验位、配置波特率、使能接收fifo、配置接收fifo触发等级、使能相应串口中断输出以及接收fifo中断使能。

二、本实施方中,扩展串口边沿触发中断服务程序(即中断模式)包括以下步骤:进入中断服务程序,扫描各扩展串口接收通道对应的触发中断管脚的电平状态,若该通道管脚电平状态与中断触发时的电平状态一致,则查询该通道接收fifo中的数据个数,然后将fifo中所有数据读取并保存至用于该通道的专用数组中。若该通道管脚电平状态与中断触发时的电平状态不一致,则对该通道无任何操作;

轮询程序包括以下步骤:在主循环程序中进入轮询程序,扫描各扩展串口接收通道对应的触发中断管脚的电平状态,若该通道管脚电平状态与中断触发时的电平状态一致,则查询该通道接收fifo中的数据个数,然后将fifo中所有数据读取并保存至用于该通道的专用数组中。若该通道管脚电平状态与中断触发时的电平状态不一致,则对该通道无任何操作;

三、各扩展串口接收通道读出的数据独立使用一个专用数组,且各通道轮询模式和中断模式下读取的数据都放在其专用数组内。该专用数组大小至少大于等于该扩展串口接收通道中fifo大小,或至少大于等于该接收通道最长数据帧长度,二者中取最大者,建议取最大者的二倍到三倍。

结合图4和图5,设定专用数组中已存在数据起点为p,终点为q,数据长度为m,即p+m=q。专用数组起点为0,终点为f-1,长度为f,且存在如下关系0≤p≤q≤f-1,如图5中(a)所示;

专用数组中已存在数据终点位置q与该扩展串口接收通道fifo中数据长度n之和为q+n。若q+n≤f-1,则保持专用数组中已存在数据的起点位置p值不变,将接收通道fifo中的所有数据顺序保存至专用数组中已存在数据终点位置q之后,并将专用数组中已存在数据终点位置更新为q+n,存储后的数据在专用数组中的位置如图5中(b)所示;

若q+n>f-1,则需要将专用数组中已存在数据整体往零点位置移动距离为q+n-f+1,此时已存在数据的起点为p-q-n+f-1,此时已存在数据的终点为f-1-n。若p-q-n+f-1≥0,则将接收通道fifo中的所有数据顺序保存至专用数组中已存在数据终点位置f-1-n之后,并将专用数组中已存在数据终点位置修改为f-1,起点值p-q-n+f-1保持不变,存储后的数据在专用数组中的位置如图5中(c)所示;

若p-q-n+f-1<0且f-1-n≥0,则将接收通道fifo中的所有数据顺序保存至专用数组中已存在数据终点位置f-1-n之后,并将专用数组中已存在数据终点位置修改为f-1,起点值修改为0,存储后的数据在专用数组中的位置如图5中(d)所示;

若p-q-n+f-1<0且f-1-n<0,则说明专用数组的长度f小于扩展串口接收通道fifo中数据长度n,这种情况是与前面所述的专用数组长度相悖,不存在此种情况,直接退出本段程序;其中p′和q′为扩展串口接收通道数据存储在专用数组后已存在数据的起点位置和终点位置。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1