MC9S12G128模块化分层化软件架构之二——IO驱动

发布者:星光闪耀最新更新时间:2021-08-10 来源: eefocus关键字:软件架构  IO驱动 手机看文章 扫描二维码
随时随地手机看文章

源码地址://download.csdn.net/download/Sure_gengjia/1253037


 PDF文档://download.csdn.net/download/Sure_gengjia/12530929


MC9S12G128数据手册://download.csdn.net/download/Sure_gengjia/12530918


1. overview


目的


本文档用于起点开发板的PORT模块软件编写说明。

2. 软件分层架构


软件分为底层驱动层——driver层,中间件层(本软件中称之为modules)和应用层——application。

2.1 driver层


与MCU寄存器打交道的软件放在driver层。


diver层分为两部分,一部分是MCU芯片内部寄存器中需要配置的参数,每一个module里面有一个xxx_cfg.c,把MCU在本module中尽量多的寄存器都放在指针数组中,给上层的中间件层和driver层中的服务函数访问。


如在drio_cfg.c中定义drio_dir_reg[]

在drio.c中的drio_set_pin_input()函数会访问该数组以设置某个具体的port和pin的为输入属性。

2.2 中间件层


中间件中放每个模块的相关功能。中间件层分为两部分,一部分为服务函数,包括如每个模块的初始化(IO初始化,ADC初始化)、每个模块处理任务、每个模块数据采集任务。另外一部分为配置部分,需要根据硬件原理图填入对应的配置。


如在中间件层的mdio.c中,包括了IO的初始化部分和输入的IO的电平采集任务;


在mdio_cfg.c中,则是具体的IO输出输入配置;

3. port资源


* GPIO: PORTA、PORTB、PORTC、PORTD、PORTE、PORTT、PORTS、PORTM、PORTP、PORTJ和PORTAD;


* PORTT、PORTS、PORTM、PORTP、PORTJ和PORTAD每一个引脚有对应的上拉下拉使能寄存器行和上拉下拉选择寄存器;


* PORTA、PORTB、PORTC、PORTD和PORTE有一个单独的上拉下拉使能寄存器,PORTA、PORTB、PORTC、PORTD、只能上拉,PORTE只能下拉;


* PORTP、PORTJ和PORTAD支持外部中断;


起点开发板MCU为MC9S12G128,64引脚,外部资源如下表:

image.png

3.1  数据方向寄存器DDR


以PORTT为例:


MC9S12G128数据手册定义如下:


DDRT在codeewarrior提供的mc9s12g128.h中的定义如下:

所以,要想PORTT的pin0、pin1、pin2、pin3为输出,pin4、pin5、pin6、pin7为输入,可以


DDRT = (unsigned char)(DDRT & 0x0fu);  //高四位清零


DDRT = (unsigned char)(DDRT | 0x0fu);   //低四位置一


3.2  数据寄存器


以PORTT为例:


MC9S12G128数据手册定义如下:

DDRT在codeewarrior提供的mc9s12g128.h中的定义如下:


要想读取PORTT的引脚0电平,可以直接对PTT取值,或者PTT_PTT0:


portt_pin0_value = PTT & 0x01;


//或者


portt_pin0_value = PTT_PTT0;


3.3  上拉下拉使能寄存器


以PORTT为例:


MC9S12G128数据手册定义如下:

PERT在codeewarrior提供的mc9s12g128.h中的定义如下:


要想PORTT的PIN0和PIN1使能上拉:


PERT = PERT | 0x03;

3.4 上拉下拉选择寄存器


以PORTT为例,MC9S12G128数据手册定义如下:

PPST在codeewarrior提供的mc9s12g128.h中的定义如下:


要想PORTT的PIN0和PIN1使能上拉:


PPST = PPST | 0x03;

4 软件实现


4.1 driver层


4.1.1 drio_cfg.c


4.1.1.1 方向寄存器DDR


方向寄存器有DDRE, DDRJ, DDRM, DDRP, DDRS, DDRT,将这些寄存器放在指针数组中,方便索引:


定义好之后注意port方向寄存器定义顺序,根据port在数据手册中地址顺序:

修改之后定义为:


需要考虑的问题可在文件的change log中看到:

4.1.1.2  指针数组类型定义


在drio_cfg.h中重定义:

4.1.1.3 数据寄存器


数据寄存器有PORTE, PTJ, PTM, PTP, PTS, PTT,


将这些寄存器放在指针数组中,方便索引:

4.1.2 drio_cfg.h


4.1.2.1 port 枚举


该文件中枚举出有哪些port,方便在drio_cfg.c中索引数组中的指针:

4.1.2.2 PIN脚枚举


枚举出有哪些PIN

4.1.3 drio.c


该文件中主要有以下功能:


引脚输出设置;

引脚输入设置;

引脚上拉下拉使能设置;

引脚下拉下拉选择;

需要考虑的问题可以在文件的change log中看到:


4.1.3.1 引脚输出设置

形参:

port: drio_cfg.h中所有的枚举的port;


pin:drio_cfg.h中所有枚举的PIN;


4.1.3.2 引脚输入设置:


形参:


port: drio_cfg.h中所有的枚举的port;


pin:drio_cfg.h中所有枚举的PIN;


4.1.4 drio.h


函数声明

4.2 中间件module层


4.2.1 mdio_cfg.c


该文件与MCU原理图紧密关联,根据原理图,文件中应当定义有哪些port的哪些PIN是输出的,哪些port的哪些PIN是输入的,输入的引脚是否需要上拉还是下拉,是否需要debounce,debounce的时长是多少,debounce方式是什么?


考虑的问题可以在文件的log中看到:

4.2.1.1 引脚输出配置


 

输出的引脚具有以下属性:


· port


· pin


· open drain(可省略)


· 初始化引脚电平


· 进入睡眠模式的引脚电平


根据原理图,8个LED输出的引脚如下:

增加输出port和pin:

4.2.1.2 引脚输入配置

输出的引脚具有以下属性:


· port


· pin


· deb_type(debounce type)


· deb_ctr(debounce counter)


4.2.1.3 输出输入数组大小定义

4.2.2 mdio_cfg.h


4.2.2.1 输出数组类型结构体定义

4.2.2.2 输入数组类型结构体定义

4.2.2.3 debounce方式枚举定义

4.2.2.4 无效值定义


4.2.3 mdio.c

4.2.3.1 io初始化函数

4.2.4 mdio.h


函数声明:

关键字:软件架构  IO驱动 引用地址:MC9S12G128模块化分层化软件架构之二——IO驱动

上一篇:MC9S12G128模块化分层化软件架构之五——IO优化
下一篇:飞思卡尔s12系列CAN波特率计算

推荐阅读最新更新时间:2024-10-26 11:36

MC9S12G128模块化分层软件架构之二——IO驱动
源码地址://download.csdn.net/download/Sure_gengjia/1253037 PDF文档://download.csdn.net/download/Sure_gengjia/12530929 MC9S12G128数据手册://download.csdn.net/download/Sure_gengjia/12530918 1. overview 目的 本文档用于起点开发板的PORT模块软件编写说明。 2. 软件分层架构 软件分为底层驱动层——driver层,中间件层(本软件中称之为modules)和应用层——application。 2.1 driver层 与MC
[单片机]
<font color='red'>MC9S12G128</font><font color='red'>模块化</font><font color='red'>分层</font><font color='red'>化</font><font color='red'>软件</font><font color='red'>架构</font>之二——<font color='red'>IO</font><font color='red'>驱动</font>
MC9S12G128模块化分层软件架构之五——IO优化
1 overview 1.1 目的 本文档用于起点开发板的GPIO模块软件优化说明。 不局限于硬件功能的实现,着眼于实现高质量、优美的软件。 2 优化内容 2.1 软件功能 ①增加PORTA、PORTB、PORTC、PORTD和PORTAD引脚的相关配置; ②driver层和module层针对新增的PORT进行调整; 2.2 编程健壮性 ①常量前增加const修饰; ②仅用于本文件调用的变量和函数前增加static; 3 软件实现 3.1 CodingRule 具体可在源码的 .MC9S12G128_IO_optimizeSourcescode_rules.txt中可见。 3.2 drive
[单片机]
<font color='red'>MC9S12G128</font><font color='red'>模块化</font><font color='red'>分层</font><font color='red'>化</font><font color='red'>软件</font><font color='red'>架构</font>之五——<font color='red'>IO</font>优化
MC9S12G128模块化分层软件架构之六——KEY
1 overview 1.1 目的 本文档用于起点开发板的GPIO模块软件优化说明。 不局限于硬件功能的实现,着眼于实现高质量、优美的软件。 2 优化内容 2.1 软件功能 ①增加PORTA、PORTB、PORTC、PORTD和PORTAD引脚的相关配置; ②driver层和module层针对新增的PORT进行调整; 2.2 编程健壮性 ①常量前增加const修饰; ②仅用于本文件调用的变量和函数前增加static; 3 软件实现 3.1 CodingRule 具体可在源码的 .MC9S12G128_KEYSourcescode_rules.txt中可见。 3.2 driver层 3.2.1 drio_
[单片机]
<font color='red'>MC9S12G128</font><font color='red'>模块化</font><font color='red'>分层</font><font color='red'>化</font><font color='red'>软件</font><font color='red'>架构</font>之六——KEY
MC9S12G128模块化分层软件架构之七_外部中断
1 overview 1.1 目的 本文档用于起点开发板的外部中断模块软件说明。 不局限于硬件功能的实现,着眼于实现高质量、优美的软件。 2 优化内容 2.1 软件功能 ①增加PORTA、PORTB、PORTC、PORTD和PORTAD引脚的相关配置; ②driver层和module层针对新增的PORT进行调整; 2.2 编程健壮性 ①常量前增加const修饰; ②仅用于本文件调用的变量和函数前增加static; 3 软件实现 3.1 CodingRule 具体可在源码的Sourcescode_rules.txt中可见。 3.2 中断基础知识 3.2.1 mc9s12g128的中断向量号 见mc9s12
[单片机]
<font color='red'>MC9S12G128</font><font color='red'>模块化</font><font color='red'>分层</font><font color='red'>化</font><font color='red'>软件</font><font color='red'>架构</font>之七_外部中断
MC9S12G128模块化分层软件架构之八_QAC静态代码分析
1 overview 1.1 目的 本文档用于起点开发板的软件优化说明。 不局限于硬件功能的实现,着眼于实现高质量、优美的软件。 2 QAC基础知识 2.1 introduction QA·C是用于C代码的深度静态分析器。 QA·C旨在帮助提高软件开发的质量。 QA·C在逐个文件和完整项目的基础上分析源代码,以识别C语言的危险用法。包含1300多个警告消息的库用于突出显示那些不可移植的、难以维护的、过于复杂或可能引起问题的方式编写的源码。 该工具还可以识别不符合ISO C90标准(ISO / IEC 9899:1990)或依赖于未指定、未定义的行为的语言用法。该工具会在使用ISO C99标
[单片机]
<font color='red'>MC9S12G128</font><font color='red'>模块化</font><font color='red'>分层</font><font color='red'>化</font><font color='red'>软件</font><font color='red'>架构</font>之八_QAC静态代码分析
MC9S12G128模块化分层软件架构之九_ClockAndRTI
1 overview 1.1 目的 本文档用于起点开发板的RTI(Real TimeInterrupt)实时时钟中断模块软件说明。 不局限于硬件功能的实现,着眼于实现高质量、优美的软件。 2 question 时钟源怎么选择? 3 软件实现 3.1 CodingRule 具体可在源码的 ..Sourcescode_rules.txt中可见。 3.2 driver层 3.2.1 新建drclock.h 增加MC9S12系统时钟设置,目标时钟频率48MHz。 3.2.2 新建drsys_config.h 增加驱动层参数设置,如外部时钟晶振。 3.2.3 新建drrti.h 3.2.3.1 新增宏函数drrti_
[单片机]
<font color='red'>MC9S12G128</font><font color='red'>模块化</font><font color='red'>分层</font><font color='red'>化</font><font color='red'>软件</font><font color='red'>架构</font>之九_ClockAndRTI
MC9S12G128模块化分层软件架构之十——TaskSchedule任务调度
1 overview 1.1 目的 本文档用于起点开发板的TaskSchedule周期任务调度模块软件说明。 不局限于硬件功能的实现,着眼于实现高质量、优美的软件。 1.2 述 1. 引入功能安全策略,增加任务运行时间和调用周期时间的监控; 2. 引入AUTOSAR timing event方法,周期调用不同任务; 3.实现任务可配置化,配置与底层代码分离. 2 question 1.如何理解offset? 3 软件实现 3.1 CodingRule 具体可在源码的 ..Sourcescode_rules.txt中可见。 3.2 中间件module层修改 3.2.1 增加mdsys_cfg.h 包括中间
[单片机]
<font color='red'>MC9S12G128</font><font color='red'>模块化</font><font color='red'>分层</font><font color='red'>化</font><font color='red'>软件</font><font color='red'>架构</font>之十——TaskSchedule任务调度
MC9S12G128模块化分层软件架构之四——LED
1 overview 1.1 目的 本文档用于起点开发板的PORT模块软件编写说明。 不局限于硬件功能的实现,着眼于实现高质量、优美的软件。 2 软件分层架构 软件分为底层驱动层——driver层,中间件层(本软件中称之为modules)和应用层——application。 2.1 driver层 与MCU寄存器打交道的软件放在driver层。 diver层分为两部分,一部分是MCU芯片内部寄存器中需要配置的参数,每一个module里面有一个xxx_cfg.c,把MCU在本module中尽量多的寄存器都放在指针数组中,给上层的中间件层和driver层中的服务函数访问。 如在drio_cfg.c中定义drio_d
[单片机]
<font color='red'>MC9S12G128</font><font color='red'>模块化</font><font color='red'>分层</font><font color='red'>化</font><font color='red'>软件</font><font color='red'>架构</font>之四——LED
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved