嵌入式软件分层设计嵌入式软件就是某一项目的源码文件子集,源码文件的数量,根据项目复杂程度的有所不同而有规模和层次的差异。就拿非常简单的一个芯片厂商获取的demo来说,代码也不会被细分到寄存器操作者(Drv层)、板级反对包在模块(Bsp层)、功能模块检验(App层)等各层,但是这里的“分层”很多时候都不过于显著,因为它意味着是个demo,所谓的“分层”更好的还是人为给它做到的定义。确实意义的分层,就是指代码的编码规范、程序的继续执行逻辑来反映的。
关于分层设计的意义在这暂缓做到过于多的探究,只是做到个引子,来讲讲SPI模块的设计过程,如何设计一套享有自己规范和便利重制的SPI模块。SPI在分层架构中的设计思路刚提及分层设计的思路,那么SPI作为一个通信接口,如果按照分层设计的思路,如何把模块设计得更加合理,更加便利?此处必须设计的SPI是介于“应用于”和“驱动”之间的,“应用于”就是项目业务市场需求的功能模块将数据、数据包等传授给SPI模块,而“驱动”是SPI模块获得数据包后,把数据改变为SPI的时序发送到过来。当我们获得一款芯片,大多数情况下官方获取的demo程序早已给我们构建好了很多的驱动(或者自己从网络资源中Download),各个模块的驱动,早已被PCB成函数或者库可供我们必要调用。想象一下我们的项目工程,如果必须操作者芯片硬件模块的时候,必要调用官方获取的接口函数,虽然能构建功能,但是在必须替换芯片平台的时候,就必须在繁复的、与业务市场需求涉及的应用层里去找和去改动为目标驱动模块。
这里就牵涉到了分层设计的优势所在:由于平台的替换,驱动模块早已变了样,那么对代码的重制就不会显得十分费力,不仅是脑力活,堪称体力活(即使可以批量更换,你也必须细心比对模块,更加要解决问题模块的差异性)。而此时如果是分层设计的,在应用于和驱动中间有个BSP层,应用层调用的只是BSP层,几乎不牵涉到驱动、寄存器,不牵涉到与芯片平台涉及的模块,那么即使平台怎么替换、驱动怎么转变,你只必须转变BSP层的明确构建,比较就精彩很多了。从上一篇《嵌入式硬件通信接口协议-SPI(一)协议基础》对SPI协议的讲解,设计BSP层的时候,根据SPI可配备项来设计模块功能。
设计BSP层的SPI功能函数时考虑到模块模式、数据宽度、时钟极性与振幅、时钟速率、数据bit位大小末端自由选择、管脚定义。设计BSP层时,首先想起的是模块初始化和数据发送。设计初始化,把SPI可配备项放到函数模块,不作参数传递;设计数据发送,传数据的同时也把SPI端口号作为参数之一,因为我们都告诉MCU可能会有多个SPI模块,将SPI端口号作为参数也是较为适当。SPI模块本身就是可以构建1对N的串行总线,为什么在用于过程中有时要分别用于有所不同的SPI端口来相接有所不同的外围器件呢?主要原因是SPI的可配备项的不完全一致,有些外围器件对SPI时钟信号SCLK的极性拒绝为低、较低不一样,时钟振幅不一样,并且通信数据bit位大小末端自由选择的不一样,这些模块配备项的差异,造成了有些场景下操作者有所不同器件时必须用于有所不同的SPI端口。
SPI时序用于IO插槽仿真从零开始设计自有的一套SPI板级反对包在(BSP)模块,那就从初始化开始。这里设计的是仿真SPI,所以不会调用GPIO设置的模块。当前用于的芯片平台是STM32F103系列,虽然此时早已几乎可以调用官方的StdPeriphDriversV3.5.0版本的标准外设库。调用模块库不是目的,沦为“徵库侠”只不过很非常简单。
此处新的写出的仿真构建方式,目的解释在BSP层,构建自有系统的软件架构,为系统集成获取底层模块。同时也是在了解自学和理解SPI模块的时序特性。初始化函数模块里继续做到了SPI端口号、数据宽度、模块时钟模式、数据位优先模式这四个参数,基本上这四个参数早已可以已完成对大部分应用于市场需求。
在编码初期再行不意图放入过多的配备项,首先按照最简单的配置文件方式编码,确保程序逻辑可以跑完通。其中中用的管脚定义,是在已完成原理图或者已完成原型机检验时,基本就确认了管脚的用于,因此管脚的定义一般的都是放到BSP层的头文件中。
这样更加便于重制和研发。数据发送到时,再行写出发送到一个字节的数据,数据是“踩”着SPI模块时钟信号SCLK的“节奏”逐一bit位发送到过来,因此在发送数据的时候也是必须主机操作者时钟信号SCLK和数据信号MOSI:SPI的数据发送到模块dcbsp_spi_sendbyte函数构建了将1个字节的数据通过GPIO输入,构建了SPI模块的时序,其中关键的是SCLK信号输入、1字节数据的移位输入、SCLK信号做到延时输入脉冲。
本文来源:RAYBET雷竞技入口-www.fdjs.net
Copyright © 2008-2024 www.fdjs.net. RAYBET雷竞技入口科技 版权所有备案号:ICP备65156409号-4网站地图