源码地址://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引脚,外部资源如下表:
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
函数声明:
上一篇:MC9S12G128模块化分层化软件架构之五——IO优化
下一篇:飞思卡尔s12系列CAN波特率计算
推荐阅读最新更新时间:2024-10-26 11:36
设计资源 培训 开发板 精华推荐
- 双旦抢楼送祝福活动
- 有奖直播:安世半导体先进 SiC MOSFET 助力提升 EV-Charger 和 OBC 应用能效
- 美光邀你元宵节贴窗花、领福利
- 评论有礼|【Discovery 】走进TI毫米波雷达世界 快速获得设计技能
- 扒一扒KEYSIGHT频谱分析仪
- 2019东芝PCIM在线展会:会一会 电力领域中的高能晶体管们
- 有奖直播:现代电动工具的设计挑战与英飞凌解决之道
- ADI有奖下载活动之6 ADI基于IEC61850的智能电子设备(IED)系统解决方案
- 免费下载|TE 白皮书《暖通空调制冷系统中压力传感器的重要性》
- 有奖直播:ADI数字主动降噪耳机方案 8月6日上午10:00-11:30 邀您聆听让技术为我们静下来