ONGOING!

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_KEY\Sources\code_rules.txt中可见。

3.2    driver层

3.2.1         drio_cfg.c

change log:

3.2.1.1          新增drio_pull_enable_reg[]上拉使能寄存器

如下:

3.2.1.1.1    PCUR

在MC9S12G128.h中的定义:

在芯片手册中的定义:

3.2.1.1.2     PERT

在mc9s12g128.h中的定义:

在datasheet中的定义:

3.2.1.1.3     PERS

在mc9s12g128.h中的定义:

在datasheet中的定义:

3.2.1.1.4     PERM

在mc9s12g128.h中的定义:

在datasheet中的定义:

3.2.1.1.5     PERP

在mc9s12g128.h中的定义:

在datasheet中的定义:

3.2.1.1.6     PERJ

在mc9s12g128.h中的定义:

在datasheet中的定义:

3.2.1.1.7     PER1AD

在mc9s12g128.h中的定义:

在datasheet中的定义:

3.2.1.1.8     PER0AD

在mc9s12g128.h中的定义:

在datasheet中的定义:

3.2.1.2          新增drio_polarity_select_reg[]极性选择寄存器

如下:

3.2.1.2.1     PPST

在mc9s12g128.h中的定义:

在datasheet中的定义:

3.2.1.2.2     PPSS

在mc9s12g128.h中的定义:

在datasheet中的定义:

3.2.1.2.3     PPSM

在mc9s12g128.h中的定义:

在datasheet中的定义:

3.2.1.2.4     PPSP

在mc9s12g128.h中的定义:

在datasheet中的定义:

3.2.1.2.5     PPSJ

在mc9s12g128.h中的定义:

在datasheet中的定义:

3.2.1.2.6     PPS1AD

在mc9s12g128.h中的定义:

在datasheet中的定义:

3.2.1.2.7     PPS0AD

在mc9s12g128.h中的定义:

在datasheet中的定义:

3.2.2         drio_cfg.h

3.2.2.1          声明extern

3.2.3         drio.c

change log:

3.2.3.1          新增drio_set_pin_pull

变动如下:

除了port范围和pin范围的有效性检查外,针对PORTAD的DRIO_PIN8到DRIO_PIN15增加的port处理,原因在drio_cfg.h和drio_cfg.c中可见;

port范围和pin范围的有效性检查是为了防止drio_pull_enable_reg[]和drio_polarity_select_reg[]数组越界。

3.3    中间件module层优化

3.3.1         mdio_cfg.h

change history:

3.3.1.1          增加MdIoPullType上拉类型枚举

3.3.1.2          修改debounce方式枚举类型名为MdIoDebType

统一命名规范。

3.3.1.3          修改MdIoInputCfgStruct

1.       增加上下拉选择;

2.       修改deb_ctr为deb_max;这是debounce的阈值;

3.3.1.4          修改输入IO采样结果的结构体MdIoInputDataStruct

1.       修改名字为MdIoInputDataStruct;

2.       增加debouncecounter计数器;

3.3.1.5          修改IOInputCfg_NULL

3.3.2         mdio_cfg.c

change log:

3.3.2.1          修改mdio_input_cfg[]

这里给每个按键进行20ms的滤波。

根据原理图可知,对应的按键

key

SW丝印标号

PIN

key1

SW4

PJ4

key2

SW5

PJ5

key3

SW6

PJ6

key4

SW3

PJ7

3.3.3         mdio.c

change log:

3.3.3.1          增加输入PIN脚电平采集函数的周期长度

目的:将输入采样函数做成周期调用的函数

3.3.3.2          io初始化函数mdio_init优化

1.       增加上下拉判断和设定;

2.       给mdio_input_data[].raw_value和mdio_input_data[].deb_value增加初始值;

3.3.3.3          mdio_input_info[]改名为mdio_input_data[]

3.3.3.4          增加三个input IO采样函数

1.       mdio_input_sample

2.       mdio_input_sample_opt

3.       mdio_input_sample_opt2

此处以最终的mdio_input_sample_opt2周期任务为例:

3.3.3.4.1     mdio_input_sample任务最终实现的功能

1.       采集每个配置的输入PIN脚的原始值——raw_value;

2.       根据配置方式进行滤波处理,设置deb_value;

3.       将采集到的数据存储在mdio_input_data[]中;

3.3.4         mdinit.c

调用所有module层的初始化函数。

3.4    应用层

3.4.1         apl_key.c

注意网络标号和丝印不一致,后期会改善,此处的LED1和KEY1皆为网络标号。

检测到按键1按下点亮LED1,松开关闭LED1;

检测到按键2按下点亮LED2,松开关闭LED2;

检测到按键3按下点亮LED3,松开关闭LED3;

检测到按键4按下点亮LED4,松开关闭LED4;

3.4.2         apl_key.h

有原理图知:按键按下,PIN脚电平为0,松开为1。

3.5    main.c

3.5.1         delay_1ms ()模拟1ms定时器

提供1ms时间节拍。

3.5.2         timer_counter_task()模拟时间片管理

65532->65533->65534->65535->0

    如果 C_plio_input_sample_task_perido为4,65532能整除4,mdio_input_sample可以执行,65533,65534,65535不能整除4,mdio_input_sample任务不能执行,

    65535加一为0,任务可以执行,这样的话,时间间隔就不是4ms了,所以mdsys_time不能让它加满自动归零,应该在65532即65535-65535%4之前归零。

3.5.3         apl_task()APP任务

调用所有应用程序周期任务。

3.5.4         main

1.      调用初始化函数;

2.      调用周期任务;

4       软件测试及调试

4.1    PORTJ验证代码

4.2    MCU register

4.2.1         DDR数据方向寄存器

PORTJ的方向寄存器DDRJ,从图中可以看出,我们需要DDRJ位4到位7都为1,即input。 debug时可以看到:DDRJ每个位都为0,由于DDRJ的reset值为0x00,可以从datasheet中查到。

4.2.2         Data Register数据寄存器

根据mdio_cfg.c中的配置,在没有按键按下时,PTJ应该为0xff, debug可以看到如下:

此时按下KEY2:

PTJ的bit5为0,即输入为低电平。

4.3    raw_value测试

在mdio.c的io_input_data_ptr->raw_level= raw_value处打断点:

4.4     debounce测试

没有按键按下时:

当按下KEY2时:

debounce counter达到配置的20时,将raw_value赋值给io_input_data_ptr->deb_level。

MC9S12G128模块化分层化软件架构之六——KEY相关推荐

  1. MC9S12G128模块化分层化软件架构之四——LED

    源码下载:https://download.csdn.net/download/Sure_gengjia/125628 内容关注公众号:激活未来 1      overview 1.1    目的 本 ...

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

    源码地址://download.csdn.net/download/Sure_gengjia/1253037 PDF文档://download.csdn.net/download/Sure_gengj ...

  3. MC9S12G128模块化分层化软件架构之五——IO优化

    更多内容,关注公众号:激活未来 FS32K144即将登陆本公众号号,还是那句话: 不局限于硬件功能的实现,着眼于实现高质量.优美的软件. 1      overview 1.1    目的 本文档用于 ...

  4. MC9S12G128模块化分层化软件架构之九_ClockAndRTI

    修改历史 内容 1        overview 1.1        目的 2        question 3        软件实现 3.1        Coding Rule 3.2   ...

  5. MC9S12G128模块化分层化软件架构之十——TaskSchedule任务调度

    修改历史 内容 1        overview 1.1        目的 1.2        综述 2        question 3        软件实现 3.1        Cod ...

  6. 系分架构 - 软件架构设计

    个人总结,仅供参考,欢迎加好友一起讨论 文章目录 系分&架构 - 软件架构设计 考点摘要 概念 架构的 4 + 1 视图 软件架构风格 经典五大架构风格 调用/返回风格 独立构件风格 虚拟机风 ...

  7. 分层化网络设计:核心层,汇聚层,接入层

    核心层,汇聚层,接入层 分层化网络设计模型可以帮助设计者按层次设计网络结构,并对不同层次赋予特定的功能,为不同层次选择正确的设备和系统.三层网络模型是最常见的分层化网络设计模型,通常划分为接入层.汇聚 ...

  8. 瀑布模型:像工厂流水线一样把软件开发分层化

    今天我们聊一聊这个软件工程中的瀑布模型. 瀑布模型算是现代软件工程的起源,软件工程的发展,很大部分都是构建于瀑布模型的基础之上的.我们后面所学的软件工程的很多内容,都是源自瀑布模型的衍生,或者其中某个 ...

  9. 一种Android客户端架构设计分享

    转载请注明出处:http://blog.csdn.net/ahence/article/details/56678126 技术发展日新月异,业界各种Android客户端架构设计,五花八门,但我们不能简 ...

最新文章

  1. 关键字static、const、volatile的作用
  2. ServiceStack.Redis的问题与修正
  3. 关于ssh 配置文件的参数说明
  4. pyqt5讲解8:容器QTabWidget,QStackedWidget,QDockWidget
  5. 使用route命令解决一机双网访问
  6. 再论数据仓库与数据库的区别
  7. 百度课程——基于深度学习的自然语言处理
  8. 五步构建经营指标,拒绝分析不接地气
  9. Unable to round-trip http request to upstream: EOF
  10. keli中逻辑分析仪的使用
  11. 离散数学(五):命题逻辑的推理理论
  12. linux鼠标怎么取出来,浅析linux中鼠标数据读取
  13. jupyter notebook的安装与启动
  14. linux服务器被攻击怎么办
  15. tableau:柱图的两种实现方式
  16. 前端一键切换深色模式
  17. carsim2020.0的教程在“将HDWDZDPPV6 替换成 复制的HostID”这个步骤总是安装失败,解决这个问题,成功安装carsim2020.0的经验
  18. bp神经网络的主要功能,一文搞定bp神经网络
  19. vue 项目实战 递归
  20. java类型转换的例子

热门文章

  1. 写一些关于如何运用计算机英语,关于介绍电脑的英语作文,80词左右.
  2. 用Python爬虫来爬写真网图片
  3. Ubuntu 15.10 安装 小米/360 2代等随身WIFI驱动
  4. 经济研究之关于ROE指标//2021-2-3
  5. 中英文文本分类的区别
  6. 全球与中国远程家庭监控系统市场深度研究分析报告
  7. iPhone文件路径大全
  8. 中标麒麟安装达梦数据库DM8
  9. c语言开发一个学生成绩统计程序,用C语言实现成绩统计程序的设计课程设计报告.doc...
  10. 在MAC下,使用anaconda,解决python画图时中文乱码