一种串行外围接口的高速半硬件实现方法

文档序号:6635772阅读:280来源:国知局
一种串行外围接口的高速半硬件实现方法
【专利摘要】一种串行外围接口的高速半硬件实现方法,CPU建立用于将待发送的SPI数据转换成GPIO端口驱动数据的预解析数组表,将待发送的SPI数据拆分成与预解析数组表中的数据具有同样位宽的数据组合,通过查询预解析数组表,将待发送的SPI数据组合解析成驱动GPIO端口的驱动数据,将解析后的GPIO端口驱动数据连续地存储,以便于DMA模块搬运,DMA模块将连续存储的GPIO端口驱动数据搬运至GPIO模块端口,将数据写入GPIO数据寄存器,驱动GPIO模块的时钟线和数据线同时翻转。本发明大大降低了CPU工作量,提高了系统工作效率,充分发挥了DMA的数据快速搬运优势,使得SPI通信速率也大大提高。
【专利说明】-种串行外围接口的高速半硬件实现方法

【技术领域】
[0001] 本发明涉及一种串行外围接口的高速半硬件实现方法,尤其涉及一种利用DMA(直 接访问存储器)与GPIO (通用输入输出)结合来实现串行外围接口功能的半硬件方法,适用 于没有SPI (串行外围接口)硬件模块又需要使用SPI进行高速通信的应用场景。

【背景技术】
[0002] SPI接口的全称是"Serial化ri地eral Interface",意为串行外围接口,是一种 高速、全双工、同步的通信总线,并且连线简单,节省电路空间,近年来得到了非常广泛的应 用。
[0003] SPI通信通常采用硬件方式实现,硬件方式实现优点是速度快,不需要CPU全程参 与,系统效率高。但是在没有SPI硬件的应用中,只能用软件模拟的方式实现SPI通信。
[0004] 目前SPI通信中,有很大一部分应用是主机采用软件的方式(即通过GPI0(通用输 入输出)端口产生高低电平)模拟SPI通信协议与从设备进行通信。尤其是一些比较低端 的通用单片机控制器芯片MCU中常常不集成SPI模块,主机用软件方式模拟SPI端口的应 用方式就更为普遍。
[0005] 图1是目前普遍采用的软件方式SPI方法的示意图,目前普遍采用的软件方式SPI 通信是首先将待发送SPI通信数据通过CPU逐位比较的方式转换成串行数据(0/1),同时还 要驱动其他GPIO端口按SPI时钟翻转产生CLK信号,然后根据串行数据在GPIO端口产生 SPI通信需要的时钟驱动和数据驱动(GPIO端口翻转),该整个过程需要在CPU控制下完成, 占用了大量CPU资源。
[0006] 该种方法方便可行,省去了对控制器集成SPI模块的要求也降低了硬件成本,缩 短了开发周期。但是由于通过软件方式模拟SPI通信在GPIO端口上产生翻转需要花费大 量的CPU时间,CPU需要全程参与对每一个SPI数据的逐位解析和驱动,通信速度和系统效 率都大大降低,系统最快通信速率受限于系统工作频率,通信速度很难提高,成为该种应用 方式的瓶颈。


【发明内容】

[0007] 本发明提供一种串行外围接口的高速半硬件实现方法,利用DM模块和GPIO模块 实现通信过程,而CPU只要在通信之前完成对待发送数据的解析即可,该种半硬件实现方 法大大降低了 CPU工作量,提高了系统工作效率,充分发挥了 DMA的数据快速搬运优势,使 得SPI通信速率也大大提高。
[0008] 为了达到上述目的,本发明提供一种串行外围接口的高速半硬件实现方法,利用 DMA模块和GPIO模块来实现串行外围接口的数据通信功能,CPU仅需要在通信之前将待发 送的SPI数据解析成GPIO端口驱动数据,该高速半硬件实现方法包含W下步骤: CPU建立用于将待发送的SPI数据转换成GPIO端口驱动数据的预解析数组表,通过查 询预解析数组表,将待发送的SPI数据解析成驱动GPIO端口的驱动数据,解析后的GPIO端 口驱动数据需连续地存储,W便于DMA模块搬运; DMA模块将连续存储的GPIO端口驱动数据搬运至GPIO模块端口,驱动GPIO模块的时 钟线和数据线同时翻转。
[0009] 所述的预解析数组表是用于将待发送的SPI数据变换成GPIO端口驱动数据的一 个映射方法。
[0010] 先将待发送的SPI数据拆分成与预解析数组表中的数据具有同样位宽的数据组 合后,再通过查询预解析数组表,将待发送的SPI数据组合解析成驱动GPIO端口的驱动数 据。
[0011] 在DMA模块将连续存储的GPIO端口驱动数据搬运至GPIO模块端口的数据搬运过 程中,完全由DMA模块完成数据搬运,即实现对GPIO端口的驱动,由DMA模块和GPIO模块完 成SPI模拟通信过程,不需要CPU的参与,提高了系统的运行效率和模拟SPI的通信速度。
[0012] 本发明与【背景技术】相比,具有W下优点: 1、传统软件SPI传输需要将待传数据通过CPU逐位比较的方式转换成串行数据(0/1), 而本发明创建的预解析数组表将该个逐位解析的过程通过建立查表的方式进行代替,一次 查表代替CPU的比较时钟和比较数据线两个动作,创建速度快。
[0013] 2、预解析数组表创建的方式考虑了 DMA传输的特殊要求,使得通过DMA的一次数 据搬运动作可W同时完成对数据引脚和时钟引脚的驱动,不占用CPU资源,驱动速度快。
[0014] 3、采用了数据拆分的方法减小存储的解析数组的大小,减少了系统资源占用。
[0015] 4、CPU只要在通信之前完成对待发送数据的解析即可,通信过程由DMA和GPIO硬 件实现,所W称为是半硬件的实现方式,相比纯软件的SPI实现方式,本发明提出的半硬件 方式大大降低了 CPU工作量,提高了系统工作效率,充分发挥了 DMA的数据快速搬运优势, 使得SPI通信速率也大大提高。

【专利附图】

【附图说明】
[0016] 图1是【背景技术】中软件方式SPI方法的示意图。
[0017] 图2是通用单片机MCU的电路模块框图。
[001引图3是本发明的流程图。
[0019] 图4是本发明的功能示意图。
[0020] 图5是对本发明进行验证的波形图。

【具体实施方式】
[0021] W下根据图2?图5,具体说明本发明的较佳实施例。
[002引如图2所示,是一个通用单片机MCU的电路模块框图,该MCU包含CPUlO 1,W及分 别电性连接CPUlOl的直接访问存储器(DMA) 102、通用输入输出接口(GPIO) 103、串行外围 接口(SPI) 104、静态随机存储器(SRAM) 105、只读存储器(ROM) 106、闪存(Flash) 107、计时 器(TIMER) 108和看口狗电路(Watchdog) 109和通用异步收发器(UART) 110。在很多应用 中,除了使用单片机MCU自带的SPI接口模块,也会通过GPIO模拟SPI接口来实现某些功 能。
[0023] Direct Memcxry Access (直接访问存储器DMA)是一种高速的数据传输操作,允许 在外部设备和存储器之间直接读写数据,既不通过CPU,也不需要CPU干预,整个数据传输 操作在直接访问存储器DM的控制下进行。
[0024] 如图3所示,本发明提供一种串行外围接口的高速半硬件实现方法,包含W下步 骤: 步骤1、对系统进行初始化配置并设定SPI通讯协议。
[0025] 所述的初始化配置包含;配置堆载、配置时钟频率(如48MHz)、中断设置,及配置 外设接口 GPIO和DMA。
[0026] 所述的设定SPI通讯协议包含;SPI协议中可W规定在系统时钟CLK的上升沿或 者下降沿读取SPI数据线MOSI线上的数据,也可W选择发送的数据是LSB (低位)在先还 是MSB (高位)在先。
[0027] 本实施例中,W SPI模拟为例,SPI接口有4个信号;MOSI (主出从入),MISO (主 入从出),CLK (SPI时钟),SS (从设备选择),本实施例中设置在系统时钟CLK的上升沿读取 MOSI线上的数据,高位在先。
[0028] 步骤2、CPU建立用于将待发送的SPI数据转换成GPIO端口驱动数据的预解析数 组表,该预解析数组表同时包含时钟线和数据线的驱动信息。
[0029] 所述的预解析数组表是专口用于将待发送的SPI数据变换成GPIO端口驱动数据 的一个映射方法,是在DMA模块搬运待发送数据之前对待发送数据进行预处理的一个关键 步骤。
[0030] Sbit位宽数据数值范围为[OxOO-Oxff],为了减小预处理数组大小,只对4bit位 宽数据[OxO-Oxf]区间建立预解析数组表,一个8位宽数据可通过拆分成两个4位宽数据, 然后查预解析数组表而得。
[0031] GPIO模块共8个引脚,向GPIO模块的8位数据寄存器的对应位写入1则驱动相应 GPIO模块的引脚为高,写入0则驱动相应GPIO模块的引脚为低。本实施例中采用GPIO模 块的第3、4号引脚,3号引脚对应时钟线CLK,4号引脚对应数据线M0SI,向GPIO模块的8 位输出寄存器写入0x04则驱动GPIO模块的3号引脚为高,写入0x08则驱动GPIO模块的 4号引脚为高。
[0032] 假设模拟SPI发送4bit位宽数据4' 0000b,同时驱动GPIO模块的时钟线(GPIO 引脚3)和数据线(GPIO引脚4),则GPIO模块的数据寄存器应该顺序写入的数据为=OxOO, 0x04,0x00,0x04,0x00,0x04,0x00,0x04,对于小端MCU (小端MCU就是将最低有效位LSB存 放在最低端的地址上),DMA源数据区用字方式(对于DMA方式来说,有源数据与目的数据之 说,DMA开始运行后,将数据从源数据区搬运到目的数据区,对32位的CPU来说,一个字包含 4个字节,字方式访问就是每次读写的操作对象长度都是4个字节)访问时应该存储的源数 据为0x04000400,0x04000400,而对于大端MCU(大端MCU就是将最高有效位MSB存放在最低 端的地址上),DMA源数据区用字方式访问时应该存储的源数据为0x00040004,0x00040004。 发送1-f可依次类推。
[003引 W小端MCU为例,所述的小端MCU预解析数组表的内容如下:

【权利要求】
1. 一种串行外围接口的高速半硬件实现方法,其特征在于,利用DMA模块和GPIO模块 来实现串行外围接口的数据通信功能,CPU仅需要在通信之前将待发送的SPI数据解析成 GPI0端口驱动数据,该高速半硬件实现方法包含以下步骤: (PU建立用于将待发送的SPI数据转换成GPI0端口驱动数据的预解析数组表,通过查 询预解析数组表,将待发送的SPI数据解析成驱动GPI0端口的驱动数据,解析后的GPI0端 口驱动数据需连续地存储,以便于DMA模块搬运; DMA模块将连续存储的GPI0端口驱动数据搬运至GPI0模块端口,驱动GPI0模块的时 钟线和数据线同时翻转。
2. 如权利要求1所述的串行外围接口的高速半硬件实现方法,其特征在于,所述的预 解析数组表是用于将待发送的SPI数据变换成GPI0端口驱动数据的一个映射方法。
3. 如权利要求1所述的串行外围接口的高速半硬件实现方法,其特征在于,先将待发 送的SPI数据拆分成与预解析数组表中的数据具有同样位宽的数据组合后,再通过查询预 解析数组表,将待发送的SPI数据组合解析成驱动GPI0端口的驱动数据。
4. 如权利要求1所述的串行外围接口的高速半硬件实现方法,其特征在于,在DMA模块 将连续存储的GPI0端口驱动数据搬运至GPI0模块端口的数据搬运过程中,完全由DMA模 块完成数据搬运,即实现对GPI0端口的驱动,由DMA模块和GPI0模块完成SPI模拟通信过 程,不需要CPU的参与,提高了系统的运行效率和模拟SPI的通信速度。
【文档编号】G06F13/40GK104331385SQ201410689233
【公开日】2015年2月4日 申请日期:2014年11月26日 优先权日:2014年11月26日
【发明者】周玉洁, 陈玲 申请人:上海爱信诺航芯电子科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1