一种单spi总线控制多can接口的控制方法

文档序号:6386519阅读:1482来源:国知局
专利名称:一种单spi总线控制多can接口的控制方法
技术领域
本发明涉及通信技术领域,尤其涉及一种单SPI总线控制多CAN接口的控制方法。
背景技术
当前多CAN (Controll er Area Network,控制器局域网络)接口应用领域比较少,主要是为了连接不同CAN协议格式或者不同CAN通信速率的CAN总线时才需要。大多数MCU (Micro Controller Unit,单片机)上能够提供多CAN接口的DSP芯片也只支持到2个,扩展性有一定的限制。而支持外扩的CAN通信芯片,一般是由SPI (SerialPeripheral Interface,串行外设接口)总线控制,大多数单片机上能够提供多个SPI接口的DSP (DigitalSignal Processor,数字信号处理)芯片最多只支持2个SPI总线,并且一个SPI接口通常只能对应一个CAN通信芯片。当前多CAN接口技术常采用这两种方式,二者的局限性在于无法支持2个以上的CAN通信接口的应用。MCU上CAN控制器方式的处理效率是最高的,但硬件局限了,无法支持更多的CAN接口,而通过SPI方式扩展CAN接口的方式则受制于SPI总线个数。

发明内容
本发明实施例提供了一种单SPI总线控制多CAN接口的控制方法,旨在解决现有技术中无法满足一个SPI总线控制多个CAN接口的问题。本发明实施例是这样实现的,一种单SPI总线控制多CAN接口的控制方法,所述方法包括以下步骤存储过程A、当多个CAN芯片中的任意一个CAN芯片的接收邮箱接收完CAN总线上的数据时该CAN芯片触发中断,发送中断信号;B、单片机通过SPI总线设置所述触发中断的CAN芯片关闭芯片内部中断使能,并退出中断;C、单片机通过SPI总线查询所有触发中断的CAN芯片的接收邮箱接收的数据,并通过SPI总线读取到单片机的内存缓冲区中,在单片机的内存缓冲区设置数据标识,恢复所述触发中断的CAN芯片中断使能,让所述触发中断的CAN芯片继续接收数据;读取过程D、单片机应用程序判断内存缓冲区是否有数据标识,是则拷贝内存缓冲区数据到应用程序的内存缓冲区,否则返回失败,并继续判断内存缓冲区是否有数据标识。本发明采用多CAN芯片产生中断时将数据读取到单片机,在不影响通信的同时降低了成本。


图1表示本发明实施例提供的单SPI总线控制多CAN接口的控制方法流程图2表不本发明实施例提供的系统架构图;图3表示本发明实施例提供的硬件连线示意图;图4表示本发明实施例提供的CAN芯片产生中断的流程图;图5表示本发明实施例提供的数据接收流程图;图6表示本发明实施例提供的数据读取流程图;图7表示本发明实施例提供的发送数据流程图。
具体实施例方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。图1示出了本发明实施例提供一种单SPI总线控制多CAN接口的控制方法流程图,详述如下在步骤SlOl中,当多个CAN芯片中的任意一个CAN芯片的接收邮箱接收完CAN总线上的数据时该CAN芯片触发中断,发送中断信号;在本发明实施例中,系统要通过CAN通信方式来实现对三种不同设备的管理,而这三种不同设备的通信协议格式和通信速率不相同,因此无法放在I个或2个独立的CAN总线上实现正常通信,必须要找到能支持3个独立CAN总线的方法。主控DSP没有集成内置CAN收发器,必须通过外扩的CAN收发器芯片来,外扩CAN芯片通过SPI接口来控制,主控MCU却只有I个SPI接口。如图2所示为本发明实施例提供的系统架构图,设计上充分利用了 MCU上的管脚资源,三个CAN收发器共用一个SPI总线,如图3所示为本发明实施例提供的硬件连线示意图,通过GPIO (General Purpose InputOutput,通用输入/输出)来实现片选CS (片选信号,chip select)三个CAN收发器的接收中断分别对应对主控DSP三个中断引脚。软件设计中底层驱动接口设计主要包含两个主要部分,即数据接收中断的处理和数据接收任务的处理。而应用层接口设计主要包含两部分,即数据发送接口和读取接口。其中数据接收中断处理、数据接收任务和数据读取接口属于本发明的输入处理部分,而数据发送借口则实现了本发明的输出处理部分。四个部分要互斥使用SPI总线。在步骤S102中,单片机通过SPI总线接口设置所述触发中断的CAN芯片关闭芯片内部中断使能,并退出中断;在本发明实施例中,中断处理关闭是避免单片机在还没有读取出CAN芯片中数据时,CAN芯片不断产生中断,从而导致单片机不断去处理中断请求,而没有时间去读取数据,造成一种死循环。在步骤S103中,单片机通过SPI总线查询所有触发中断的CAN芯片的接收邮箱接收的数据,并通过SPI总线读取到单片机的内存缓冲区中,在单片机的内存缓冲区设置数据标识,恢复所述触发中断的CAN芯片中断使能,让所述触发中断的CAN芯片继续接收数据;在步骤S104中,单片机应用程序判断内存缓冲区是否有数据标识,是则拷贝内存缓冲区数据到应用程序的内存缓冲区,否则返回失败,并继续判断内存缓冲区是否有数据标识。在本发明实施例中,单片机通过SPI总线通知任意一个CAN芯片发送数据到与CAN芯片连接的CAN总线上。发送不需要中断方式,因此只要获得了片选信号CS的使用权(互斥量)即可以进行发送数据的操作,并且在发送失败时返回失败原因。在本发明实施例中,在数据的接收发送之前还需要对系统中的每个CAN芯片做以下处理依次配置每个CAN芯片对应的中断向量和中断处理函数,初始化CAN芯片的片选信号互斥量以及CAN芯片对应的接收数据缓冲区;依次配置每个CAN芯片的速率、接收滤波器以及唤醒功能以使CAN芯片能正常工作。图4示出了本发明实施例提供的CAN芯片产生中断的流程图,详述如下在步骤S401中,当多个CAN芯片中的任意一个CAN芯片的接收邮箱接收到CAN总线上的数据时,当前CAN芯片中断记数器加I ;在步骤S402中,判断当前CAN芯片获取片选信号互斥量是否成功,是则执行步骤S403,否则执行步骤S404 ;在步骤S403中,设置当前CAN芯片片选信号,使当前CAN芯片处于选通,并通过SPI接口设置当前CAN芯片关闭芯片内部中断使能,让当前CAN芯片不继续产生中断信号,继续执行步骤S405 ;在步骤S404中,检查片选信号是否是当前CAN芯片,是则执行步骤S406,否则执行步骤S407 ;在步骤S405中,释放多CAN芯片片选信号互斥量;在步骤S406中,唤醒数据接收任务;在步骤S407中,关闭当前CAN芯片在单片机上对应的中断向量使能,让单片机不响应当前CAN芯片产生的中断信号,等待数据接收任务处理。在本发明实施例中,当总线上有数据被CAN芯片接收到芯片邮箱时,芯片会产生中断信号通知MCU处理,这样就调用了中断处理函数,数据接收中断功能设计成每个CAN设备中断对应一个独立的中断处理过程,这样做是为了管理单个CAN设备的参数信息。在中断处理部分,特别加入了 2级关闭中断的机制,解决不同中断问题。所谓中断问题是指,一个SPI总线要分给多个设备使用时,必须添加互斥量来保护每个设备的控制,这是第一级中断处理要解决的问题,其次单个设备占用SPI总线时,通过SPI实现CAN总线数据收发也需要互斥使用,这是第二级的中断处理。在整个中断处理过程中需要对第二级中断处理进行特别处理,方法是关闭当前设备注册的系统中断向量使能,在数据收取任务完成前暂停设备接收中断触发功能。然后,在数据收取任务完成后,再开启系统中断向量使能。图5示出了本发明实施例提供的数据接收流程图,详述如下在步骤S501中,单片机统计系统初始化过的CAN芯片数,按顺序依次查询,并初始化一个CAN芯片序号等于0 ;在步骤S502中,单片机获得待查询CAN芯片序号;在步骤S503中,判断当前序号的CAN芯片是否超过系统初始化CAN芯片的最大个数,是则结束数据接收,否则执行步骤S504 ;
在步骤S504中,通过当前CAN芯片中断计数器判断当前CAN芯片是否接收到数据,是则执行步骤S505,否则将CAN芯片号加1,并返回步骤S503;在步骤S505中,判断当前CAN芯片是否获得片选信号使用权,是则执行步骤S506,否则将CAN芯片号加I,并返回步骤S503 ;在步骤S506中,设置片选信号选中当前CAN芯片,并获取CAN芯片接收邮箱状态;在步骤S507中,判断CAN芯片邮箱是否有数据包,是则执行步骤S508,否则执行步骤 S509 ;在步骤S508中,读取数据包存在缓冲区,同时通知应用读取数据;在步骤S509中,开启CAN芯片内中断使能;在步骤S510中,判断当前CAN芯片对应单片机上中断向量使能是否关闭,是则执行步骤S511,否则将CAN芯片号加1,并返回步骤S503。在步骤S511中,开启当前CAN芯片中断向量使能。在本发明实施例中,数据接收任务设计成多个CAN设备共用的模式。这样设计的目的在于统一处理多个设备数据接收的工作可以避免发生数据繁忙的CAN总线一直占用CPU的处理资源,而其它CAN总线数据无法及时收取造成丢包。图6示出了本发明实施例提供的数据读取流程图,详述如下在步骤S601中,判断缓冲区是否存有数据,是则执行步骤S602,否则执行步骤S603 ;在步骤S602中,从缓冲区读取数据并返回结果;在步骤S603中,判断当前CAN芯片数据接收是否结束,是则执行步骤S604,否则返回结果并退出读取;在步骤S604中,判断是否有数据进入通知,是则执行步骤S605,否则继续判断是否有数据进入通知。在步骤S605中,从缓冲区读取数据,返回结果并退出读取。图7示出了本发明实施例提供的发送数据流程图,详述如下在步骤S701中,判断当前CAN芯片是否获得片选信号使用权,是则执行步骤S702,否则继续判断当前CAN芯片是否获得片选信号使用权;在步骤S702中,获取发送寄存器状态;在步骤S703中,判断当前CAN芯片的邮箱是否准备好发送数据,是则执行步骤S704,否则执行步骤S705 ;在步骤S704中,发送数据并返回结果;在步骤S705中,将CAN芯片号加I继续判断下一个CAN芯片的邮箱是否准备好发送数据,当判断最后一个CAN芯片的邮箱没有准备好发送数据时,获取错误码并返回结果。在本发明实施例中,用户需要发送数据时,调用应用层的数据发送接口即可,发送借口是非阻塞式发送,即将要发送的数据配置到CAN芯片寄存器中,由CAN芯片自己完成发送操作。当总线上有数据被CAN芯片接收到芯片邮箱时,芯片会产生中断信号通知MCU处理,这样就调用了中断处理函数,中断函数主要是为了清理CAN芯片内部中断标志以及调用数据接收任务函数。进入数据接收任务函数,主要任务是立刻把CAN芯片邮箱中收的数据通过SPI总线读取到MCU内存中,让CAN芯片继续接收数据,另外一个任务是在收完数据后发出一个信号量,通知应用层读取函数有数据可以用了。本发明已经在高压直流电源系统和直流电动车充电系统进行了应用,产品运行的效果满足了行业用户的需要。而且降低了制造成本,同时不影响通信数据收发处理及准确度。本发明采用多CAN芯片产生中断时将数据读取到单片机,在不影响通信的同时降低了成本。以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
权利要求
1.一种单SPI总线控制多CAN接口的控制方法,其特征在于,所述方法包括以下步骤 存储过程 A、当多个CAN芯片中的任意一个CAN芯片的接收邮箱接收完CAN总线上的数据时该CAN芯片触发中断,发送中断信号; B、单片机通过SPI总线设置所述触发中断的CAN芯片关闭芯片内部中断使能,并退出中断; C、单片机通过SPI总线查询所有触发中断的CAN芯片的接收邮箱接收的数据,并通过SPI总线读取到单片机的内存缓冲区中,在单片机的内存缓冲区设置数据标识,恢复所述触发中断的CAN芯片中断使能,让所述触发中断的CAN芯片继续接收数据; 读取过程 D、单片机应用程序判断内存缓冲区是否有数据标识,是则拷贝内存缓冲区数据到应用程序的内存缓冲区,否则返回失败,并继续判断内存缓冲区是否有数据标识。
2.如权利要求1所述的方法,其特征在于,所述方法还包括以下步骤 发送过程 E、单片机通过SPI总线通知多个CAN芯片中的任意一个CAN芯片发送数据到与所述CAN芯片连接的CAN总线上。
3.如权利要求1所述的方法,其特征在于,在所述步骤A之前还包括以下步骤 依次配置每个CAN芯片对应的中断向量和中断处理函数,初始化所述CAN芯片的片选信号互斥量以及所述CAN芯片对应的接收数据内存缓冲区; 依次配置每个CAN芯片的速率、接收滤波器以及唤醒功能。
4.如权利要求1所述的方法,其特征在于,所述步骤B具体包括以下步骤 B1、当多个CAN芯片中的任意一个CAN芯片的接收邮箱接收到CAN总线上的数据时,当前CAN芯片中断记数器加I; B2、判断当前CAN芯片获取片选信号互斥量是否成功,是则执行步骤B3,否则执行步骤B4 ; B3、设置当前CAN芯片片选信号,使当前CAN芯片处于选通,并通过SPI接口设置当前CAN芯片关闭芯片内部中断使能,让当前CAN芯片不继续产生中断信号,继续执行步骤B5 ;B4、检查片选信号是否是当前CAN芯片,是则执行步骤B6,否则执行步骤B7 ; B5、释放多CAN芯片片选信号互斥量; B6、唤醒数据接收任务; B7、关闭当前CAN芯片在单片机上对应的中断向量使能,让单片机不响应当前CAN芯片产生的中断信号,等待数据接收任务处理。
5.如权利要求1所述的方法,其特征在于,所述步骤C具体包括以下步骤 Cl、单片机统计系统初始化过的CAN芯片数,按顺序依次查询,并初始化第一个CAN芯片的序号等于O ; C2、单片机获得待查询CAN芯片的序号; C3、判断当前序号的CAN芯片是否超过系统初始化CAN芯片的最大个数,是则结束数据接收,否则执行步骤C4; C4、通过当前CAN芯片中断计数器判断当前CAN芯片是否接收到数据,是则执行步骤C5,否则将CAN芯片的序号加1,并返回步骤C3; C5、判断当前CAN芯片是否获得片选信号使用权,是则设置片选信号选中当前CAN芯片,并获取CAN芯片的接收邮箱状态,否则将CAN芯片的序号加1,并返回步骤C3 ; C6、判断CAN芯片邮箱是否有数据包,是则读取数据包存在内存缓冲区,同时通知应用程序读取数据,否则执行步骤C7 ; C7、开启CAN芯片内中断使能,判断当前CAN芯片对应单片机上中断向量使能是否关闭,是则开启当前CAN芯片中断向量使能,否则将CAN芯片的序号加I,并返回步骤C3。
6.如权利要求1所述的方法,其特征在于,所述步骤D具体包括以下步骤 D1、判断内存缓冲区是否存有数据,是则从内存缓冲区读取数据并返回结果,否则执行步骤D2 ; D2、判断当前CAN芯片数据接收是否结束,是则执行步骤D3,否则返回结果并退出读取; D3、判断是否有数据进入通知,是则从内存缓冲区读取数据,返回结果并退出读取,否则继续判断是否有数据进入通知。
7.如权利要求2所述的方法,其特征在于,所述步骤E具体包括以下步骤 E1、判断当前CAN芯片是否获得片选信号使用权,是则获取发送寄存器状态,否则继续判断当前CAN芯片是否获得片选信号使用权; E2、判断当前CAN芯片的邮箱是否准备好发送数据,是则发送数据并返回结果,否则将CAN芯片号加I继续判断下一个CAN芯片的邮箱是否准备好发送数据,当判断最后一个CAN芯片的邮箱没有准备好发送数据时,获取错误码并返回结果。
全文摘要
本发明适用于通信技术领域,涉及一种单SPI总线控制多CAN接口的控制方法,所述方法包括当多个CAN芯片中的任意一个CAN芯片的接收邮箱接收完CAN总线上的数据时该CAN芯片触发中断;通过SPI总线设置所述触发中断的CAN芯片关闭中断使能,并退出中断;查询所有触发中断的CAN芯片的接收邮箱接收的数据,并读取到单片机的缓冲区中,在缓冲区设置数据标识,恢复所述触发中断的CAN芯片中断使能,让所述触发中断的CAN芯片继续接收数据;应用程序判断缓冲区是否有数据标识,是则拷贝到应用程序的缓冲区,否则返回失败,并继续判断。本发明采用多CAN芯片产生中断时将数据读取到单片机,在不影响通信的同时降低了成本。
文档编号G06F13/40GK103064815SQ20121059331
公开日2013年4月24日 申请日期2012年12月29日 优先权日2012年12月29日
发明者叶飞虹, 王赫, 李民英 申请人:广东志成冠军集团有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1