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模块软件编写说明。

MC9S12G128模块化分层化软件架构之二——IO驱动_第1张图片

2. 软件分层架构

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

MC9S12G128模块化分层化软件架构之二——IO驱动_第2张图片

 

2.1 driver层

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

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

如在drio_cfg.c中定义drio_dir_reg[]

MC9S12G128模块化分层化软件架构之二——IO驱动_第3张图片

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

MC9S12G128模块化分层化软件架构之二——IO驱动_第4张图片

2.2 中间件层

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

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

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

MC9S12G128模块化分层化软件架构之二——IO驱动_第5张图片

MC9S12G128模块化分层化软件架构之二——IO驱动_第6张图片

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引脚,外部资源如下表:

PORT

MC9S12G128100pin

MC9S12G12864pin

A

7-0

-

B

7-0

-

C

7-0

-

D

7-0

-

E

1-0

1-0

T

7-0

7-0

S

7-0

7-0

M

3-0

3-0

P

7-0

7-0

J

7-0

7-0

AD

15-0

15-0

 

3.1  数据方向寄存器DDR

以PORTT为例:

MC9S12G128数据手册定义如下:

MC9S12G128模块化分层化软件架构之二——IO驱动_第7张图片

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

MC9S12G128模块化分层化软件架构之二——IO驱动_第8张图片

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

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

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

 

3.2  数据寄存器

以PORTT为例:

MC9S12G128数据手册定义如下:

MC9S12G128模块化分层化软件架构之二——IO驱动_第9张图片

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

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

portt_pin0_value = PTT & 0x01;

//或者

portt_pin0_value = PTT_PTT0;

MC9S12G128模块化分层化软件架构之二——IO驱动_第10张图片

 

3.3  上拉下拉使能寄存器

以PORTT为例:

MC9S12G128数据手册定义如下:

MC9S12G128模块化分层化软件架构之二——IO驱动_第11张图片

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

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

PERT = PERT | 0x03;

MC9S12G128模块化分层化软件架构之二——IO驱动_第12张图片

 

3.4 上拉下拉选择寄存器

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

MC9S12G128模块化分层化软件架构之二——IO驱动_第13张图片

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

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

PPST = PPST | 0x03;

 

MC9S12G128模块化分层化软件架构之二——IO驱动_第14张图片

 

4 软件实现

4.1 driver层

4.1.1 drio_cfg.c

4.1.1.1 方向寄存器DDR

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

MC9S12G128模块化分层化软件架构之二——IO驱动_第15张图片

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

MC9S12G128模块化分层化软件架构之二——IO驱动_第16张图片

修改之后定义为:

MC9S12G128模块化分层化软件架构之二——IO驱动_第17张图片

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

MC9S12G128模块化分层化软件架构之二——IO驱动_第18张图片

 

4.1.1.2  指针数组类型定义

在drio_cfg.h中重定义:

4.1.1.3 数据寄存器

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

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

MC9S12G128模块化分层化软件架构之二——IO驱动_第19张图片

 

4.1.2 drio_cfg.h

4.1.2.1 port 枚举

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

MC9S12G128模块化分层化软件架构之二——IO驱动_第20张图片

 

4.1.2.2 PIN脚枚举

枚举出有哪些PIN

MC9S12G128模块化分层化软件架构之二——IO驱动_第21张图片

 

4.1.3 drio.c

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

    • 引脚输出设置;
    • 引脚输入设置;
    • 引脚上拉下拉使能设置;
    • 引脚下拉下拉选择;

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

MC9S12G128模块化分层化软件架构之二——IO驱动_第22张图片

4.1.3.1 引脚输出设置

MC9S12G128模块化分层化软件架构之二——IO驱动_第23张图片

形参:

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

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

4.1.3.2 引脚输入设置:

MC9S12G128模块化分层化软件架构之二——IO驱动_第24张图片

形参:

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中看到:

MC9S12G128模块化分层化软件架构之二——IO驱动_第25张图片

4.2.1.1 引脚输出配置

 

 

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

· port

· pin

· open drain(可省略)

· 初始化引脚电平

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

 

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

MC9S12G128模块化分层化软件架构之二——IO驱动_第26张图片

MC9S12G128模块化分层化软件架构之二——IO驱动_第27张图片

MC9S12G128模块化分层化软件架构之二——IO驱动_第28张图片

增加输出port和pin:

MC9S12G128模块化分层化软件架构之二——IO驱动_第29张图片

4.2.1.2 引脚输入配置

 

 

MC9S12G128模块化分层化软件架构之二——IO驱动_第30张图片

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

· port

· pin

· deb_type(debounce type)

· deb_ctr(debounce counter)

 

4.2.1.3 输出输入数组大小定义

 

 

 

 

4.2.2 mdio_cfg.h

 

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

 

 

MC9S12G128模块化分层化软件架构之二——IO驱动_第31张图片

 

 

 

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

MC9S12G128模块化分层化软件架构之二——IO驱动_第32张图片

4.2.2.3 debounce方式枚举定义

 

 

MC9S12G128模块化分层化软件架构之二——IO驱动_第33张图片

4.2.2.4 无效值定义

 

 

 

4.2.3 mdio.c

 

MC9S12G128模块化分层化软件架构之二——IO驱动_第34张图片

 

 

 

4.2.3.1 io初始化函数

MC9S12G128模块化分层化软件架构之二——IO驱动_第35张图片

 

 

4.2.4 mdio.h

函数声明:

你可能感兴趣的:(MC9S12G128模块化分层化软件架构之二——IO驱动)