MC9S12G128模块化分层化软件架构之六——KEY

发布者:心满意足最新更新时间:2021-08-05 来源: eefocus关键字: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_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的滤波。


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

image.png

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。


关键字:KEY 引用地址:MC9S12G128模块化分层化软件架构之六——KEY

上一篇:MC9S12G128模块化分层化软件架构之七_外部中断
下一篇:MC9S12G128模块化分层化软件架构之五——IO优化

推荐阅读最新更新时间:2024-10-29 10:59

Altium软件和Digi-Key数据库实现实时链接
日前,新一代电子产品设计解决方案开发商 Altium宣布推出全新的实时链接,实现 Altium Designer 直接至元件供应商数据库的链接。 首款实时链接将支持全球元件供应商Digi-Key。 该实时链接不仅将帮助设计人员在 Altium Designer 中直接在线搜索供应商数据库,而且还可在选择元件时了解到价格及供货情况等重要信息。目前,通常是在设计方案基本完成后才让采购部去选购相关组件,可一旦该元件供货不足,可能会导致产品发布计划的延后,甚至不得不对设计方案进行重大修改。 元件的选择会对生产成本、生产时间以及设计方案的可靠性与长期可维护性造成重大影响。通过提供实时链接功能,Altium 不仅
[嵌入式]
详解汽车数字钥匙(Digital Key)规范
1.3C数字钥匙规范简介 CCC(Car Connectivity Consortium)车联网联盟是一个致力于制定智能手机到汽车连接解决方案标准的全球跨行业组织。2021年7月CCC将UWB定义为第三代数字钥匙的核心技术,并发布CCC R3(第三代数字钥匙)规范。 CCC R3是基于NFC/BLE/UWB作为基础的无线电技术的使用,该系统采用非对称密码技术对车辆和设备进行相互签名认证,且只对已知车辆显示身份,只有使用和车辆存储的公钥相对应的私钥签名计算,车辆才能进行解闭锁、启动发动机等功能。R3可以兼容R2(第二代数字钥匙),R1(第一代数字钥匙)是独立于R2、R3进行部署。 在成功完成车主配对后,车主每次携带设备靠近车
[嵌入式]
详解汽车数字钥匙(Digital <font color='red'>Key</font>)规范
Marktech Optoelectronics 和 Digi-Key 合作推出 定制型光电探测器
Marktech Optoelectronics 与全球电子元器件分销商 Digi-Key Electronics 展开合作,按照客户规格要求供应经专门设计和优化的定制型光电探测器。下面就随电源管理小编一起来了解一下相关内容吧。 Marktech Optoelectronics 和 Digi-Key 合作推出 定制型光电探测器 定制探测器覆盖以下任一 Marktech 产品线:硅光伏或光敏光电二极管、雪崩光电二极管、光电晶体管或 InGaAs PIN 光电二极管。此外,还提供定制器件封装,包括符合客户规格要求的或由 Marktech 推荐的最适合客户应用的封装。 Marktech Optoelectronics 首席执行官
[电源管理]
Digi-Key 全球独家现货发售 u-blox 的新型 XPLR-IoT-1 套件
全球供应品类丰富、发货快速的现货电子元器件分销商 Digi-Key Electronics, 日前宣布全球独家发售定位和无线通讯技术全球领导者 u-blox 的 XPLR-IoT-1 探索套件。 Digi-Key 现独家提供 u-blox 的 XPLR-IoT-1 套件(点击放大) XPLR-IoT-1 套件是一个即用型开发平台,具有适用于许多不同用例和应用的关键物联网组件和服务。该套件包含了 GNSS、蜂窝、Wi-Fi 和蓝牙技术,以及云通信服务。 该套件提供了开箱即用体验所需的一切,初始安装快速、简单。 只需几个初始步骤,该套件就可以将数据发布到云端并展示完整的端到端解决方案,而可充电电池还允许进行便携式操作。
[物联网]
Digi-<font color='red'>Key</font> 全球独家现货发售 u-blox 的新型 XPLR-IoT-1 套件
PULS DIN 导轨电源现通过 Digi-Key 向全球客户发售
全球电子元器件分销商 Digi-Key Electronics 与 PULS 达成新的经销协议,向全球发售 PULS 的高能效 DIN 导轨电源系列,下单立即发 货。 PULS 是 DIN 导轨电源领域的全球领军企业,始终专注于为客户提供便于安装和操作的可靠型高科技产品。 PULS L.P. 总裁兼总经理 Matt Biskner 表示:“我们非常荣幸能与 Digi-Key 合作, 将 PULS 的产品提供给其全球广泛的客户群。Digi-Key 可提供专业的技术支持和出色的客户服务,并且拥有庞大的全球网络,而 PULS 能供应全球最高效的、最全面的 DIN 导轨电源产品,因此双方强强联手,就可确保更多的设计工程师针对个人应用需求选
[电源管理]
扩大广泛产品线,2020年前三季度Digi-Key新增70多家核心供应商
Digi-Key Electronics 拥有全球品类最丰富的电子元件库存,并且能够立即发货,其宣布已在今年前三个季度新增 70 多家核心供应商,借此扩大了产品组合。截止目前,核心供应商总数已达到 1,200 家。到 2020 年底,该公司将在核心产品当中新增近 150,000 个供应商零件编号。 Sensiron 的 SGP40-D-R4 室内空气质量传感器可用于空气净化器或按需控制式通风,这款传感器仅仅是今年加入 Digi-Key 产品手册的急需元器件之一 “我们很高兴在 2020 年签约了多家面向中国市场的供应商,”Digi-Key 全球供应商管理副总裁 David Stein 表示。“与
[半导体设计/制造]
扩大广泛产品线,2020年前三季度Digi-<font color='red'>Key</font>新增70多家核心供应商
Digi-Key:不断加强其工业自动 (IA) 元器件产品供应
Digi-Key Electronics 作为一家全球电子元器件分销商,不断加强其 工业自动化 (IA) 元器件的产品供应,从而为无数 IA 应用提高设计和项目能力。Digi-Key 的产品组合中先后加入了 14,000 多个工业自动化零件编号,类别包括传感器、电缆、安全装置、控制监视器、继电器、定时器、开关、照明和控制器等。 除了 OMRON 、 TE 、 Panasonic 、 Molex 等 Digi-Key 传统供应商的产品线外,该公司在过去的一年中增加了 15 条新产品线,其中包括 Altech 、SICK、 IDEC 、 Carlo Gavazzi 和 Belden 等供应商的产品。 Digi-Key 工业自动
[工业控制]
TE 的 DEUTSCH 工业和商业运输应用产品现在Digi-Key全球发售
全球电子元器件分销商 Digi-Key Electronics 今天宣布,其产品库将新增由全球领先的连接器和传感器品牌 TE Connectivity (TE) 生产的 DEUTSCH 工业环境密封电子连接器。 该重型连接器具有防尘、防潮湿、防盐雾的功能,可适应地形条件恶劣的地区。 TE 的 DEUTSCH 连接器采用坚固耐用的热塑或耐用铝,配有硅胶密封件和扣眼,能防止污染。   Digi-Key 全球 IP & E 副总裁 Tom Busher 表示:“我们很高兴能与 TE 建立合作伙伴关系,为我们的客户群提供其 DEUTSCH 连接器系列产品。 TE 的 DEUTSCH 品牌在全球设计工程界赢得了高度的认可和赞誉。现在我们
[工业控制]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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