I/O口模拟SPI接口的迷你嵌入式控制器装置和方法转让专利

申请号 : CN201410274306.6

文献号 : CN104020704B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 黄德颖郭戈

申请人 : 大连理工大学

摘要 :

一种I/O口模拟SPI接口的迷你嵌入式控制器装置和方法,涉及嵌入式技术领域。所述迷你嵌入式控制器装置包括控制中心模块、SPI?A接口模块、SPI?B接口模块、在线仿真调试接口模块,尺寸仅有12mm*10mm。嵌入式控制器芯片采用尺寸小、集成度高、引脚数目相对少的芯片。所述方法为分别依次调用:当所述装置为主设备下的SPI时序初始化模块和SPI时序模拟模块和当所述装置作为从设备时的SPI时序初始化模块、基于中断处理技术的SPI时序模拟模块。本发明在满足了接口数目和外形尺寸要求的前提下,用较低的成本实现了I/O口模拟SPI接口;迷你嵌入式控制器装置作为主设备或者从设备时,可以实现SPI工作方式四下的全双工通信时序。中断处理技术的采用,提高通信的可靠性和实时性。

权利要求 :

1.一种I/O口模拟SPI接口的迷你嵌入式控制器装置,其特征在于,该迷你嵌入式控制器装置包括控制中心模块、SPI-A接口模块、SPI-B接口模块、在线仿真调试接口模块;控制中心模块位于整个板子的中部,SPI-A接口模块置于板子上侧,SPI-B接口模块置于板子下侧,在线仿真调试接口模块置于板子左侧;嵌入式控制器芯片位于控制中心模块内左侧,滤波电容和稳压电容位于控制中心模块内右侧;

控制中心模块,包括嵌入式控制器芯片、滤波电容、稳压电容;

SPI-A接口模块,包括四个引脚的单排排针,通过SPI-A总线与嵌入式控制器芯片的四个I/O引脚相连;SPI-A总线的信号包括SPI-A_NSS使能信号、SPI-A_SCK时钟信号、SPI-A_MOSI和SPI-A_MISO数据信号;

SPI-B接口模块:包括四个引脚的单排排针,通过SPI-B总线与嵌入式控制器芯片的另四个I/O引脚相连;SPI-B总线的信号包括SPI-B_NSS使能信号、SPI-B_SCK时钟信号、SPI-B_MOSI和SPI-B_MISO数据信号;

在线仿真调试接口模块:包括三个引脚的单排排针,通过在线仿真调试信号线与嵌入式控制器芯片的SWIM引脚、电源引脚、地引脚相连;仿真调试信号线包括SWIM信号、电源信号、地信号;

由于嵌入式控制器开发板外围平面尺寸为12mm*10mm,两个SPI接口模块和在线仿真调试接口模块采用标准的1.27mm排针,排针焊接好后,其边缘和模块边缘重合。

2.根据权利要求1所述的迷你嵌入式控制器装置,其特征在于,所述控制中心模块的嵌入式控制器芯片采用STM8S003F3U。

3.根据权利要求1或2所述的迷你嵌入式控制器装置,其特征在于,所述的滤波电容和稳压电容选封装为0402的贴片电容。

4.利用基于I/O口模拟SPI接口的迷你嵌入式控制器装置的方法,其特征在于具体操作如下:(1)所述迷你嵌入式控制器作为SPI通信主设备时,通过依次调用SPI时序初始化模块和SPI时序模拟模块来实现;更进一步,SPI时序初始化模块包括接口硬件初始化子模块、协议基本设备初始化子模块;

接口硬件初始化子模块,配置SPI-A接口引脚的输入输出模式和电平状态;将SPI-A_NSS引脚、SPI-A_SCK引脚、SPI-A_MOSI引脚配置成输出模式,SPI-A_MISO引脚配置成输入模式;这四个引脚电平状态均为高电平;

协议基本设备初始化子模块,初始化SPI时序模拟时使用的基本设备,包括时钟发生器、时钟计数器、时钟比较器、收发数据缓冲区,通信状态控制器;

时钟发生器,其功能是根据其设定的初始值从SPI-A_SCK引脚输出指定频率的时钟波形;

时钟计数器,其功能是在SPI通信中实时记录主设备的SPI-A_SCK引脚发出的时钟的周期数,其值为当前时钟周期数;

时钟比较器,其功能是比较其设定值与时钟计数器的值是否相等,若相等则时钟比较器输出“1”;否则输出“0”;

收发数据缓冲区,其功能是分为接收数据缓冲区和发送数据缓冲区,分别存放SPI通信时接收的实时数据和需要发送的数据;初始化时清空收发数据缓冲区;写接收数据缓冲区和读发送数据缓冲区均是按位操作;通过时钟计数器可知当前时钟波形的个数N,N为正整数,从而根据接收数据引脚的电平向接收数据缓冲区相应的数据位第N位写“0”或“1”;读出发送数据缓冲区相应的数据位第N位,根据该数据位的值,拉低或拉高发送数据引脚的电平;

通信状态控制器,其功能是表明当前是否在进行SPI通信,控制数据缓冲区和时钟比较器的访问权限;为“0”表明在正在进行SPI通信,当前SPI总线忙,则不能对发送数据缓冲区进行写操作,即不能对发送数据缓冲区的数据进行更新;不能对接收数据缓冲区进行读操作,即不能读出接收数据缓冲区的值;不能修改时钟比较器的设定值;为“1”表明当前SPI总线空闲,对发送数据缓冲区进行写操作,对接收数据缓冲区进行读操作,修改时钟比较器的设定值;

SPI时序模拟模块,其功能是模拟SPI协议在工作方式四下的时序,完成数据的接收和发送,包括以下四个步骤;具体为:S1:主设备有数据发送,向发送数据缓冲区写入数据,拉低SPI-A_NSS引脚,通信状态控制器置为0,延迟一个时钟周期后进入步骤S2;

为了增加通信的可靠性,在SPI-A_NSS引脚电平拉低后延迟一个SPI通信的时钟周期,即比通常的相应SPI时序多延迟半个时钟周期,再从SPI-A_SCK引脚发出时钟波形;多延迟半个周期并不会给实时性以及通信造成影响,反而更多地增加了通信的可靠性;

S2:检测数据是否发完,若“否”进入步骤S3;若“是”进入步骤S4;

每个时钟周期结束,若时钟比较器的输出为“0”,表示“否”,数据没有发完,进入步骤S3;若为“1”,表示“是”,数据已发完,进入步骤S4;

S3:SPI-A_SCK引脚继续输出一个完整的时钟周期,时钟计数器加一,发

送和接收数据,完成后进入步骤S2;具体如下:

S3-1:在每个时钟周期的开始,即SPI-A_SCK引脚产生下降沿后,时钟计数器立即加一,同时根据发送数据缓冲区相应数据位的值将SPI-A_MOSI引脚拉高或者拉低,值为“1”则输出高电平,值为“0”则输出低电平,从而发送相应的数据位;

S3-2:在半个周期后时钟的上升沿到来后,读取SPI-A_MISO引脚的电平,获得当前数据位并保存到接收数据缓冲区相应位,若为高电平,则写入“1”;若为低电平,则写入“0”,完成后进入步骤S2;

S4:退出通信,包括以下步骤:

S4-1:已经收发完16位数据,拉高SPI-A_SCK引脚和SPI-A_NSS信号引脚;

S4-2:将发送数据缓冲区和时钟计数器清零,将通信状态控制器置一,这样便完成了一次通信,SPI总线空闲;

(2)所述迷你嵌入式控制器作为SPI通信从设备时,通过依次调用SPI时序初始化模块、基于中断处理技术的SPI时序模拟模块来实现;更进一步SPI时序初始化模块包括接口硬件初始化子模块、中断配置子模块、协议基本设备初始化子模块;基于中断处理技术的SPI时序模拟模块包括使能信号引脚下的中断服务程序子模块和时钟信号引脚下的中断服务程序子模块;

采用中断处理技术,使从设备能及时响应外部设备的通信请求,实时可靠地交互数据;

接口硬件初始化子模块,其功能是配置SPI-A接口引脚的输入输出模式和电平状态;将SPI-A_NSS引脚、SPI-A_SCK引脚、SPI-A_MISO引脚配置成输出模式,SPI-A_MOSI引脚配置成输入模式;这四个引脚初始电平均配置为高电平;其中还需将SPI-A_NSS引脚、SPI-A_SCK引脚配置成能响应外部中断的模式,当这两个引脚的电平发生上升沿或下降沿变化时,能调用其对应的中断服务程序;

中断配置子模块,其功能是配置引脚的中断掩码、中断服务函数的注册、总中断使能;

具体包括:

中断掩码:配置I/O端口的外部中断掩码,当相应引脚的电平发生上升沿或下降沿变化时能产生一个外部中断信号;

中断服务函数的注册:在中断向量表中注册中断服务函数;

总中断使能:使能控制器芯片的总中断;

协议基本设备初始化子模块其功能是初始化时钟计数器、收发数据缓冲区、通信状态控制器;具体包括:时钟计数器,用于记录SPI通信过程中从设备收到的外部设备的时钟周期数;

收发数据缓冲区,分为接收数据缓冲区和发送数据缓冲区,分别存放SPI通信时接收的实时数据和需要发送的数据;初始化时清空收发数据缓冲区;写接收数据缓冲区和读发送数据缓冲区均是按位操作;

通信状态控制器,表明当前是否在进行SPI通信,控制访问数据缓冲区、时钟比较器的权限;为“0”表明在正在进行SPI通信,当前SPI总线忙,则不能对发送数据缓冲区进行写操作,即不能对发送数据缓冲区的数据进行更新;另外不能对接收数据缓冲区进行读操作,即不能读出接收数据缓冲区的值;不能修改时钟比较器的设定值;为“1”表明当前SPI总线空闲,修改发送数据缓冲区的数据或读出接收数据缓冲区的值;

基于中断处理技术的SPI时序模拟模块;其主要功能是在SPI-A_SCK引脚输出的时钟节拍下,完成数据的接收和发送;具体为:使能信号引脚下的中断服务程序子模块:当SPI-A_NSS引脚的电平发生变化时,调用其中断服务程序;在该中断服务程序中,判断当前SPI-A_NSS引脚的电平,若为“低”,表明有外部设备选择了本从设备进行SPI通信,SPI总线忙,则将通信状态控制器的值置“0”,清空时钟计数器后退出该中断服务程序;若为“高”,表明没有外部设备与从设备进行SPI通信,SPI总线空闲,则将通信状态控制器的值置1后退出该中断服务程序;

时钟信号引脚下的中断服务程序子模块:当SPI-A_SCK引脚的电平发生变化时,调用该引脚对应的中断服务程序;在中断服务程序中,包括以下步骤:S5:判断通信状态控制器的值;

为了排除干扰引起引脚电平的波动,首先判断通信状态控制器的值,若为“1”,则退出中断,说明此时并没有外部设备向本从设备发送数据;若为“0”,进入步骤S6;

S6:读取当前SPI-A_SCK引脚的电平;

电平为“低”进入步骤S7;为“高”进入步骤S8;

S7:时钟计数器自动加一,SPI-A_MISO引脚输出发送数据缓冲区的相应数据位;

进入步骤S7说明是电平下升沿变化触发的中断,处于一个时钟周期的开始时刻,时钟计数器自动加一;根据发送数据缓冲区的相应数据位,为“0”或为“1”,对应将SPI-A_MISO引脚电平拉低或者拉高;完成后退出中断;

S8:读出SPI-A_MOSI引脚信号引脚当前的电平,保存到接收数据缓冲区相应的数据位;

进入步骤S8说明是电平上升沿变化触发的中断,当前处于一个时钟周期的中间时刻,则读出从设备的SPI-A_MOSI引脚当前的电平,写入到接收数据缓冲区相应的数据位;高电平写入“1”;低电平写入“0”;完成后退出中断。

说明书 :

I/O口模拟SPI接口的迷你嵌入式控制器装置和方法

技术领域

[0001] 本发明涉及嵌入式技术领域,涉及一种具有迷你尺寸的嵌入式控制器装置和方法。

背景技术

[0002] 一些嵌入式产品的研发往往需要将几个子产品进行组合实现一个完成的功能,中间可能需要一些带多个SPI接口的嵌入式控制器(后面简称接口控制器),负责将相关的两个子产品进行连接或者控制,需要接口控制器带两个或者两个以上SPI接口。这种项目一般有两种解决方案,一种方案是直接购买带多个SPI接口的成品嵌入式控制器开发板,但市场2
上这类开发板功能往往比较齐全,除了SPI接口外还有IC、UART、LED灯等子接口或者其他功能模块,这样便出现了该嵌入式控制器开发板的资源浪费问题,同时造成研发经费的浪费。另一种方案是采用内部集成多通道SPI控制器的嵌入式控制器芯片,根据研发项目需求进行定制设计,这样可以避免资源浪费的问题,但当对接口控制器的外形尺寸限制较高时,现有的接口控制器选用的嵌入式控制器芯片往往芯片自身尺寸较大,设计成开发板时外围电路基本元件也较多,导致开发板尺寸较大,采用这类芯片满足了接口需求而不能满足尺寸需求;而尺寸较小的嵌入式控制器芯片,虽然外围基本元件少,但内部往往没有集成SPI控制器,满足了尺寸要求却不能满足接口数目需求。

发明内容

[0003] 本发明解决了上述难以同时满足接口控制器尺寸小和SPI接口数量的问题,提出的一种通用I/O口(即GPIO,简称I/O口)模拟SPI接口的迷你嵌入式控制器装置和方法。发明的嵌入式控制器装置外围尺寸为12mm*10mm,和成人指甲盖大小一样,板上带有两个SPI接口和一个仿真调试接口。基于所述装置,设计了I/O口模拟SPI总线协议在工作方式四下全双工通信时序方法,即一种I/O口模拟SPI接口的方法,极大程度上满足了接口控制器在外形尺寸和接口数目方面的要求。
[0004] 本发明解决技术问题采用的技术方案如下:
[0005] 一种I/O口模拟SPI接口的迷你嵌入式控制器装置,包括控制中心模块、SPI-A接口模块、SPI-B接口模块、在线仿真调试接口模块。控制中心模块位于整个板子的中部,SPI-A接口模块置于板子上侧,SPI-B接口模块至于板子下侧,仿真器调试接口模块置于板子左侧。嵌入式控制器芯片位于控制中心模块内左侧,滤波电容和稳压电容位于控制中心模块内右侧。
[0006] 控制中心模块:包括嵌入式控制器芯片、滤波电容、稳压电容,嵌入式控制器芯片采用尺寸小、集成度高、引脚数目相对少的芯片,滤波电容和稳压电容选封装为0402的贴片电容。
[0007] SPI-A接口模块:简称SPI-A接口,包括四个引脚的单排排针,通过SPI-A总线与嵌入式控制器芯片的四个I/O引脚相连。SPI-A总线的信号包括SPI-A_NSS使能信号、SPI-A_SCK时钟信号、SPI-A_MOSI和SPI-A_MISO数据信号。后述中这四个I/O引脚相应简称为SPI-A_NSS引脚、SPI-A_SCK引脚、SPI-A_MOSI引脚、SPI-A_MISO引脚。
[0008] SPI-B接口模块:简称SPI-B接口,包括四个引脚的单排排针,通过SPI-B总线与嵌入式控制器芯片的另四个I/O引脚相连。SPI-B总线的信号包括SPI-B_NSS使能信号、SPI-B_SCK时钟信号、SPI-B_MOSI和SPI-B_MISO数据信号。
[0009] 在线仿真调试接口模块:包括三个引脚的单排排针,通过在线仿真调试信号线与嵌入式控制器芯片的SWIM引脚、电源引脚、地引脚相连。仿真调试信号线包括SWIM(Single wire interface module)信号、电源信号、地信号。该接口模块用于程序的下载和在线调试,节省了资金,不用购买昂贵的迷你型芯片程序烧录器。
[0010] 由于嵌入式控制器开发板外围平面尺寸为12mm*10mm,两个SPI接口模块和在线仿真调试接口模块采用标准的1.27mm排针,排针焊接好后,其边缘可以刚好和模块边缘重合。
[0011] 一种I/O口模拟SPI接口的迷你嵌入式控制器方法,基于上述I/O口模拟SPI接口的迷你嵌入式控制器装置,I/O口模拟SPI总线协议在工作方式四下全双工通信时序的方法。
[0012] SPI总线信号包括NSS使能信号、SCK时钟信号、MISO和MOSI数据信号。
[0013] SPI总线协议可以工作在四种方式下,结合所采用的嵌入式控制器芯片的接口特性(上电工作后所有I/O引脚默认值均为高电平),选用第四种工作方式,即SPI的时钟极性选择CPOL=1(CPOL=0时SPI总线空闲为低电平,CPOL=1时SPI总线空闲为高电平);SPI的时钟相位选择为CPHA=1(其中CPHA=0时在SCK第一个跳变沿采样,为CPHA=1时在SCK第二个跳变沿采样)。
[0014] SPI-B接口和SPI-A接口的I/O口模拟SPI总线协议方法相同,则以SPI-A接口为对象,分为接口控制器在SPI-A接口通信下作为主设备和从设备两种情况进行说明。
[0015] 上述I/O口模拟SPI接口的迷你嵌入式控制器方法,具体操作如下:
[0016] (1)所述装置作为SPI通信主设备时,所述方法通过依次调用SPI时序初始化模块和SPI时序模拟模块来实现。更进一步,SPI时序初始化模块包括接口硬件初始化子模块、协议基本设备初始化子模块。
[0017] 接口硬件初始化子模块,配置SPI-A接口引脚的输入输出模式和电平状态。将SPI-A_NSS引脚、SPI-A_SCK引脚、SPI-A_MOSI引脚配置成输出模式,SPI-A_MISO引脚配置成输入模式;这四个引脚电平状态均为高电平。
[0018] 协议基本设备初始化子模块,初始化SPI时序模拟时使用的基本设备,包括时钟发生器、时钟计数器、时钟比较器、收发数据缓冲区,通信状态控制器。
[0019] 时钟发生器,其功能是根据其设定的初始值从SPI-A_SCK引脚输出指定频率的时钟波形。
[0020] 时钟计数器,其功能是在SPI通信中实时记录主设备的SPI-A_SCK引脚发出的时钟的周期数,其值为当前时钟周期数。
[0021] 时钟比较器,其功能是比较其设定值与时钟计数器的值是否相等,若相等则时钟比较器输出“1”;否则输出“0”。
[0022] 收发数据缓冲区,其功能是分为接收数据缓冲区和发送数据缓冲区,分别存放SPI通信时接收的实时数据和需要发送的数据。初始化时清空收发数据缓冲区。写接收数据缓冲区和读发送数据缓冲区均是按位操作。例如,通过时钟计数器可知当前时钟波形的个数N(正整数),从而根据接收数据引脚的电平向接收缓冲区相应的数据位(第N位)写“0”或“1”;读出发送数据缓冲区相应的数据位(第N位),根据该数据位的值,拉低或拉高发送数据引脚的电平。
[0023] 通信状态控制器,其功能是表明当前是否在进行SPI通信,控制数据缓冲区和时钟比较器的访问权限。为“0”表明在正在进行SPI通信,当前SPI总线忙,则不能对发送数据缓冲区进行写操作,即不能对发送数据缓冲区的数据进行更新;不能对接收数据缓冲区进行读操作,即不能读出接收数据缓冲区的值;不能修改时钟比较器的设定值。为“1”表明当前SPI总线空闲,可以对发送数据缓冲区进行写操作,可以对接收数据缓冲区进行读操作,可以修改时钟比较器的设定值。
[0024] SPI时序模拟模块,其功能是模拟SPI协议在工作方式四下的时序,完成数据的接收和发送,包括以下四个步骤。具体为:
[0025] S1:主设备有数据发送,向发送数据缓冲区写入数据,拉低SPI-A_NSS引脚,通信状态控制器置为0,延迟一个时钟周期后进入步骤S2;
[0026] 为了增加通信的可靠性,在SPI-A_NSS引脚电平拉低后延迟一个SPI通信的时钟周期,即比通常的相应SPI时序多延迟半个时钟周期,再从SPI-A_SCK引脚发出时钟波形。多延迟半个周期并不会给实时性以及通信造成影响,反而更多地增加了通信的可靠性。
[0027] S2:检测数据是否发完,若“否”进入步骤S3;若“是”进入步骤S4。
[0028] 每个时钟周期结束,若时钟比较器的输出为“0”,表示“否”,数据没有发完,进入步骤S3;若为“1”,表示“是”,数据已发完,进入步骤S4。
[0029] S3:SPI-A_SCK引脚继续输出一个完整的时钟周期,时钟计数器加一,发送和接收数据,完成后进入步骤S2。具体如下:
[0030] S3-1:在每个时钟周期的开始,即SPI-A_SCK引脚产生下降沿后,时钟计数器立即加一,同时根据发送数据缓冲区相应数据位的值将SPI-A_MOSI引脚拉高或者拉低(值为“1”则输出高电平,值为“0”则输出低电平),从而发送相应的数据位。
[0031] S3-2:在半个周期后时钟的上升沿到来后,读取SPI-A_MISO引脚的电平,获得当前数据位并保存到接收数据缓冲区相应位,若为高电平,则写入“1”;若为低电平,则写入“0”,完成后进入步骤S2。
[0032] S4:退出通信,包括以下步骤:
[0033] S4-1:已经收发完16位数据,拉高SPI-A_SCK引脚和SPI-A_NSS信号引脚。
[0034] S4-2:将发送数据缓冲区和时钟计数器清零,将通信状态控制器置一,这样便完成了一次通信,SPI总线空闲。
[0035] (2)所述装置作为SPI通信从设备时,所述方法通过依次调用SPI时序初始化模块、基于中断处理技术的SPI时序模拟模块来实现。更进一步SPI时序初始化模块包括接口硬件初始化子模块、中断配置子模块、协议基本设备初始化子模块;基于中断处理技术的SPI时序模拟模块包括使能信号引脚下的中断服务程序子模块和时钟信号引脚下的中断服务程序子模块。
[0036] 采用中断处理技术,使从设备能及时响应外部设备的通信请求,实时可靠地交互数据。
[0037] 接口硬件初始化子模块,其功能是配置SPI-A接口引脚的输入输出模式和电平状态。将SPI-A_NSS引脚、SPI-A_SCK引脚、SPI-A_MISO引脚配置成输出模式,SPI-A_MOSI引脚配置成输入模式;这四个引脚初始电平均配置为高电平。其中还需将SPI-A_NSS引脚、SPI-A_SCK引脚配置成能响应外部中断的模式,当这两个引脚的电平发生上升沿或下降沿变化时,能调用其对应的中断服务程序。
[0038] 中断配置子模块,其功能是配置引脚的中断掩码、中断服务函数的注册、总中断使能。具体包括:
[0039] 中断掩码:配置I/O端口的外部中断掩码,当相应引脚的电平发生上升沿或下降沿变化时能产生一个外部中断信号;
[0040] 中断服务函数的注册:在中断向量表中注册断服务函数。
[0041] 总中断使能:使能控制器芯片的总中断。
[0042] 协议基本设备初始化子模块其功能是初始化时钟计数器、收发数据缓冲区、通信状态控制器。
[0043] 时钟计数器,用于记录SPI通信过程中从设备收到的外部设备的时钟周期数。
[0044] 收发数据缓冲区,分为接收数据缓冲区和发送数据缓冲区,分别存放SPI通信时接收的实时数据和需要发送的数据。初始化时清空收发数据缓冲区。写接收数据缓冲区和读发送数据缓冲区均是按位操作。
[0045] 通信状态控制器,表明当前是否在进行SPI通信,控制访问数据缓冲区、时钟比较器的权限。为“0”表明在正在进行SPI通信,当前SPI总线忙,则不能对发送数据缓冲区进行写操作,即不能对发送数据缓冲区的数据进行更新;另外不能对接收数据缓冲区进行读操作,即不能读出接收数据缓冲区的值;不能修改时钟比较器的设定值。为“1”表明当前SPI总线空闲,可以修改发送数据缓冲区的数据,也可以读出接收数据缓冲区的值。
[0046] 基于中断处理技术的SPI时序模拟模块。其主要功能是在SPI-A_SCK引脚输出的时钟节拍下,完成数据的接收和发送。具体为:
[0047] 使能信号引脚下的中断服务程序子模块:当SPI-A_NSS引脚的电平发生变化时,调用其中断服务程序。在该中断服务程序中,判断当前SPI-A_NSS引脚的电平,若为“低”,表明有外部设备选择了本从设备进行SPI通信,SPI总线忙,则将通信状态控制器的值置“0”,清空时钟计数器后退出该中断服务程序。若为“高”,表明没有外部设备与从设备进行SPI通信,SPI总线空闲,则将通信状态控制器的值置1后退出该中断服务程序。
[0048] 时钟信号引脚下的中断服务程序子模块:当SPI-A_SCK引脚的电平发生变化时,调用该引脚对应的中断服务程序。在中断服务程序中,包括以下步骤:
[0049] S5:判断通信状态控制器的值。
[0050] 为了排除干扰引起引脚电平的波动,首先判断通信状态控制器的值,若为“1”,则退出中断,说明此时并没有外部设备向本从设备发送数据;若为“0”,进入步骤S6。
[0051] S6:读取当前SPI-A_SCK引脚的电平。
[0052] 电平为“低”进入步骤S7;为“高”进入步骤S8。
[0053] S7:时钟计数器自动加一,SPI-A_MISO引脚输出发送数据缓冲区的相应数据位。
[0054] 进入步骤S7说明是电平下升沿变化触发的中断,处于一个时钟周期的开始时刻,时钟计数器自动加一。根据发送数据缓冲区的相应数据位,为“0”或为“1”,对应将SPI-A_MISO引脚电平拉低或者拉高。完成后退出中断。
[0055] S8:读出SPI-A_MOSI引脚信号引脚当前的电平,保存到接收缓冲区相应的数据位。
[0056] 进入步骤S8说明是电平上升沿变化触发的中断,当前处于一个时钟周期的中间时刻,则读出从设备的SPI-A_MOSI引脚当前的电平,写入到接收缓冲区相应的数据位。高电平写入“1”;低电平写入“0”。完成后退出中断。
[0057] 本发明的有益效果是实现了接口控制器迷你尺寸的硬件设计,在满足了接口数目和外形尺寸要求的前提下,尽量降低了本发明装置的资金投入。同时提出了I/O口模拟SPI接口协议的方法,使本发明装置作为主设备或者从设备时,可以实现SPI工作方式四的全双工通信时序。中断处理技术的采用,提高通信的可靠性和实时性。

附图说明

[0058] 图1是本发明所述装置的硬件原理图。
[0059] 图2是本发明所述装置各个组成部分的布局。
[0060] 图3是本发明所述方法中使用的SPI方式四下协议时序。
[0061] 图4是本发明所述方法中接口控制器作为主设备时的SPI时序模拟子模块步骤图。
[0062] 图5是本发明所述方法中接口控制器作为从设备时的U1-12引脚下的中断服务程序模块步骤图。
[0063] 图中:1 控制中心模块;2 嵌入式控制器芯片;3 滤波电容和稳压电容;4 SPI-A接口模块;5 SPI-A总线;6 SPI-B接口模块;7 SPI-B总线;8 在线仿真调试接口模块;9 在线仿真调试线。

具体实施方式

[0064] I/O口模拟SPI接口的迷你嵌入式控制器装置(如图1、图2)包括控制中心模块、SPI-A接口模块、SPI-B接口模块、在线仿真调试接口模块,具体为:
[0065] 控制中心模块:采用STM8S系列中的STM8S003F3U作为嵌入式控制器芯片U1,该型号的芯片有尺寸仅有3mm*3mm,且集成度高。芯片外围的滤波电容和稳压电容:U1-5对地外接680nF的电容;在电源和地之间并联C2、C3、C4均为100nF滤波电容。均采用0402封装的贴片电容
[0066] SPI-A接口模块:单排排针,P8、P9、P10、P11四个引脚。通过SPI-A总线依次与STM8S003F3U的U1-7、U1-12、U1-13、U1-14四个I/O引脚相连。信号与引脚的对应关系如下:
[0067] U1-7  和P8  对应 SPI-A_NSS  信号;
[0068] U1-12 和P9  对应 SPI-A_SCK  信号;
[0069] U1-13 和P10 对应 SPI-A_MOSI 信号;
[0070] U1-14 和P11 对应 SPI-A_MISO 信号。
[0071] SPI-B接口模块:单排排针,P4、P5、P6、P7四个引脚。通过SPI-B总线依次与STM8S003F3U的U1-8、U1-17、U1-18、U1-19四个I/O引脚相连。信号与引脚的对应关系如下:
[0072] U1-8  和P4 对应 SPI-B_NSS  信号;
[0073] U1-17 和P5 对应 SPI-B_SCK  信号;
[0074] U1-18 和P6 对应 SPI-B_MOSI 信号;
[0075] U1-19 和P7 对应 SPI-B_MISO 信号。
[0076] 在线仿真调试接口:单排排针,P1、P2、P3三个引脚。通过在线仿真调试信号线依次与STM8S003F3U的电源引脚U1-6、U1-15和地引脚U1-4相连。信号与引脚的对应关系如下:
[0077] U1-6  和P1 对应 电源信号;
[0078] U1-15 和P2 对应 SWIM信号;
[0079] U1-4  和P3 对应 地信号。
[0080] 所述装置各个组成部分的布局(如图1):控制中心模块位于整个板子的中部。SPI-A接口模块置于板子上侧,SPI-B接口模块至于板子下侧,仿真器调试接口模块置于板子左侧。U1位于控制中心模块的左侧,滤波电容和稳压电容位于右侧。
[0081] 嵌入式控制器开发板外围平面尺寸为12mm*10mm,两个SPI接口模块和在线仿真调试接口模块采用标准的1.27mm排针,焊接好后,排针边缘可以刚好和模块边缘重合。
[0082] 以下基于本接口控制器的硬件设计,对I/O口模拟SPI总线协议时序的方法进行说明。
[0083] SPI-B接口和SPI-A接口的I/O口模拟SPI总线协议方法相同,以接口控制器在SPI-A接口以1KHz的速率发送16位数据为例,分为主设备和从设备两种情况对所述方法具体实施方式进行说明。
[0084] (1)当接口控制器作为主设备时,包括SPI时序初始化模块,SPI时序模拟模块。
[0085] SPI时序初始化模块包括接口硬件初始化子模块、协议基本设备初始化子模块。
[0086] 接口硬件初始化子模块,将U1-7(SPI-A_NSS引脚)、U1-12(SPI-A_SCK引脚)和U1-13(SPI-A_MOSI)这三个引脚配置成数字输出模式,U1-14引脚(SPI-A_MISO引脚)配制成数字输入模式,这四个引脚初始电平均配置为高电平。
[0087] 协议基本设备初始化子模块,初始化SPI时序模拟时使用的时钟定时器、时钟计数器、时钟比较器、收发数据缓冲区,通信状态控制器。具体为:
[0088] 时钟定时器其初始值为1KHz。在SPI通信时,U1-12(SPI-A_SCK引脚)输出时钟的频率为1KHz。
[0089] 时钟计数器其初始值为0。
[0090] 时钟比较器设定值的初始值为16。
[0091] 收发数据缓冲区分为接收数据缓冲区和发送数据缓冲区,清空收发数据缓冲区。
[0092] 通信状态控制器初始值为1。当前SPI总线空闲,可以对发送数据缓冲区进行写操作,可以对接收数据缓冲区进行读操作,可以修改时钟比较器的设定值。
[0093] SPI时序模拟子模块,其主要功能是模拟SPI协议在工作方式四下的时序(如图3),完成数据的接收和发送,包括以下四个步骤(如图4),具体为:
[0094] S1:主设备有数据发送,向发送数据缓冲区写入16位数据,拉低U1-7(SPI-A_NSS引脚),通信状态控制器置为0,延迟一个时钟周期的时间后进入步骤S2。
[0095] S2:检测数据是否发完。若“否”进入步骤S3;若“是”进入步骤S4。
[0096] 每个时钟周期结束,若时钟比较器的输出为“0”,表示“否”,进入步骤S3;若为“1”,表示“是”,进入步骤S4。
[0097] S3:U1-12(SPI-A_SCK引脚)输出一个完整的时钟周期,下降沿时发送相应数据位,上升沿时接收相应数据位,完成后进入步骤S2。
[0098] S3-1在每个时钟周期的开始,即U1-12产生下降沿后,时钟计数器立即加一,同时根据发送数据缓冲区相应数据位的值将U1-13(SPI-A_MOSI)拉高或者拉低(值为“1”则输出高电平,值为“0”则输出低电平),从而发送相应的数据位,完后进入步骤S3-2。
[0099] S3-2半个周期后时钟的上升沿,读取U1-14(SPI-A_MISO引脚)的电平,获得当前数据位并保存到接收数据缓冲区相应位,若为高电平,则写入“1”;若为低电平,则写入“0”,完成后进入步骤S2。
[0100] S4:退出通信。
[0101] S4-1已经收发完16位数据,拉高U1-12引脚和U1-7引脚。
[0102] S4-2将发送数据缓冲区和时钟计数器清零,将通信状态控制器置一,这样便完成了一次通信,SPI总线空闲。
[0103] (2)当接口控制器作为从设备时,包括SPI时序初始化模块,基于中断处理技术的SPI时序模拟模块。
[0104] SPI时序初始化模块包括接口硬件初始化子模块、中断配置子模块、协议基本设备初始化子模块。
[0105] 接口硬件初始化子模块,具体为将上述U1-7(SPI-A_NSS引脚)、U1-12(SPI-A_SCK引脚)、U1-13(SPI-A_MOSI)三个引脚配置成数字输入模式,U1-14引脚(SPI-A_MISO引脚)配制成数字输出模式,这四个引脚初始电平均配置为高电平。其中还需将U1-7和U1-12配置成能响应外部中断的模式,当这两个引脚的电平发生上升沿或下降沿变化时,能调用其对应的中断服务程序。
[0106] 中断配置子模块,其主要功能是配置引脚的中断掩码、中断服务函数的注册、总中断使能。具体包括:
[0107] 中断掩码:配置I/O端口的外部中断掩码,当相应引脚的电平发生上升沿或下降沿变化时能产生一个外部中断信号;
[0108] 中断服务函数的注册:在中断向量表中注册断服务函数。
[0109] 总中断使能:使能控制器芯片的总中断。
[0110] 协议基本设备初始化子模块,主要功能是初始化时钟计数器、收发数据缓冲区、通信状态控制器。
[0111] 时钟计数器,其初始值为0。
[0112] 收发数据缓冲区,分为接收数据缓冲区和发送数据缓冲区,清空收发数据缓冲区。
[0113] 通信状态控制器初始值为1。表明当前SPI总线空闲,可以修改发送数据缓冲区的数据,也可以读出接收数据缓冲区的值。
[0114] 基于中断处理技术的SPI时序模拟模块。其主要功能是在U1-12(SPI-A_SCK引脚)收到的时钟节拍下,完成数据的接收和发送。具体为:
[0115] 使能信号引脚下的中断服务程序子模块,当U1-7(SPI-A_NSS引脚)电平发生变化时,调用其中断服务程序。在该中断服务程序中,判断当前U1-7的电平,若为“低”,表明有外部设备选择了本从设备进行SPI通信,SPI总线忙,则将通信状态控制器的值置“0”,清空时钟计数器后退出该中断服务程序。若为“高”,表明没有外部设备与从设备进行SPI通信,SPI总线空闲,则将通信状态控制器的值置1后退出该中断服务程序。
[0116] 时钟信号引脚下的中断服务程序子模块,当U1-12的电平发生变化时,调用该引脚对应的中断服务程序。包括以下四个步骤(如图5),具体为:
[0117] S5:在中断服务程序中,判断通信状态控制器的值。
[0118] 为了排除干扰引起引脚电平的波动,首先判断通信状态控制器的值,若为“1”,则退出中断,说明此时并没有主设备向本从设备发送数据;若为“0”,进入步骤S6[0119] S6:判断当前U1-12的电平
[0120] U1-12的电平为“低”进入步骤S7,U1-12的电平为“高”进入步骤S8
[0121] S7:时钟计数器自动加一,从U1-14(SPI-A_MISO引脚)处输出发送数据缓冲区的相应数据位。
[0122] 进入步骤S7说明是电平下升沿变化触发的中断,处于时钟周期的开始时刻,时钟计数器加一。根据发送数据缓冲区的相应数据位,为“0”或为“1”,对应将U1-14引脚电平拉低或者拉高。完成后退出中断。
[0123] S8:读出U1-13引脚当前的电平,保存到接收缓冲区相应的数据位。
[0124] 进入步骤S8说明是电平上升沿变化触发的中断,当前处于时钟周期的中间时刻,则读出U1-13引脚当前的电平,写入到接收缓冲区相应的数据位。高电平写入“1”;低电平写入“0”。完成后退出中断。