mct模块_mc9s12xs128单片机「建议收藏」

mct模块_mc9s12xs128单片机「建议收藏」ONGING!1overview1.1目的本文档用于起点开发板的GPIO模块软件优化说明

ONGOING

1      overview

1.1    目的

本文档用于起点开发板的GPIO模块软件优化说明。

不局限于硬件功能的实现,着眼于实现高质量、优美的软件

mct模块_mc9s12xs128单片机「建议收藏」

 

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中可见。

 

mct模块_mc9s12xs128单片机「建议收藏」

3.2    driver层

3.2.1         drio_cfg.c

change log:

mct模块_mc9s12xs128单片机「建议收藏」

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

如下:

mct模块_mc9s12xs128单片机「建议收藏」

3.2.1.1.1    PCUR

在MC9S12G128.h中的定义:

mct模块_mc9s12xs128单片机「建议收藏」

在芯片手册中的定义:

mct模块_mc9s12xs128单片机「建议收藏」

mct模块_mc9s12xs128单片机「建议收藏」

 

 

3.2.1.1.2     PERT

在mc9s12g128.h中的定义:

mct模块_mc9s12xs128单片机「建议收藏」

在datasheet中的定义:

mct模块_mc9s12xs128单片机「建议收藏」

3.2.1.1.3     PERS

在mc9s12g128.h中的定义:

mct模块_mc9s12xs128单片机「建议收藏」

在datasheet中的定义:

mct模块_mc9s12xs128单片机「建议收藏」

3.2.1.1.4     PERM

在mc9s12g128.h中的定义:

mct模块_mc9s12xs128单片机「建议收藏」

在datasheet中的定义:

mct模块_mc9s12xs128单片机「建议收藏」

 

3.2.1.1.5     PERP

在mc9s12g128.h中的定义:

mct模块_mc9s12xs128单片机「建议收藏」

 

在datasheet中的定义:

mct模块_mc9s12xs128单片机「建议收藏」

mct模块_mc9s12xs128单片机「建议收藏」

 

3.2.1.1.6     PERJ

在mc9s12g128.h中的定义:

mct模块_mc9s12xs128单片机「建议收藏」

 

在datasheet中的定义:

mct模块_mc9s12xs128单片机「建议收藏」

mct模块_mc9s12xs128单片机「建议收藏」

 

 

3.2.1.1.7     PER1AD

在mc9s12g128.h中的定义:

mct模块_mc9s12xs128单片机「建议收藏」

 

在datasheet中的定义:

mct模块_mc9s12xs128单片机「建议收藏」

mct模块_mc9s12xs128单片机「建议收藏」

 

 

3.2.1.1.8     PER0AD

在mc9s12g128.h中的定义:

mct模块_mc9s12xs128单片机「建议收藏」

 

在datasheet中的定义:

mct模块_mc9s12xs128单片机「建议收藏」

 

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

如下:

mct模块_mc9s12xs128单片机「建议收藏」

 

3.2.1.2.1     PPST

在mc9s12g128.h中的定义:

mct模块_mc9s12xs128单片机「建议收藏」

 

在datasheet中的定义:

mct模块_mc9s12xs128单片机「建议收藏」

 

3.2.1.2.2     PPSS

在mc9s12g128.h中的定义:

mct模块_mc9s12xs128单片机「建议收藏」

 

在datasheet中的定义:

mct模块_mc9s12xs128单片机「建议收藏」

mct模块_mc9s12xs128单片机「建议收藏」

 

 

3.2.1.2.3     PPSM

在mc9s12g128.h中的定义:

mct模块_mc9s12xs128单片机「建议收藏」

 

在datasheet中的定义:

mct模块_mc9s12xs128单片机「建议收藏」

 

3.2.1.2.4     PPSP

在mc9s12g128.h中的定义:

mct模块_mc9s12xs128单片机「建议收藏」

 

在datasheet中的定义:

mct模块_mc9s12xs128单片机「建议收藏」

 

3.2.1.2.5     PPSJ

在mc9s12g128.h中的定义:

mct模块_mc9s12xs128单片机「建议收藏」

 

在datasheet中的定义:

mct模块_mc9s12xs128单片机「建议收藏」

 

3.2.1.2.6     PPS1AD

在mc9s12g128.h中的定义:

mct模块_mc9s12xs128单片机「建议收藏」

 

在datasheet中的定义:

mct模块_mc9s12xs128单片机「建议收藏」

 

3.2.1.2.7     PPS0AD

在mc9s12g128.h中的定义:

mct模块_mc9s12xs128单片机「建议收藏」

 

在datasheet中的定义:

mct模块_mc9s12xs128单片机「建议收藏」

 

3.2.2         drio_cfg.h

3.2.2.1          声明extern

mct模块_mc9s12xs128单片机「建议收藏」

 

3.2.3         drio.c

change log:

mct模块_mc9s12xs128单片机「建议收藏」

 

3.2.3.1          新增drio_set_pin_pull

变动如下:

mct模块_mc9s12xs128单片机「建议收藏」

 

除了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:

mct模块_mc9s12xs128单片机「建议收藏」

 

3.3.1.1          增加MdIoPullType上拉类型枚举

mct模块_mc9s12xs128单片机「建议收藏」

 

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

统一命名规范。

mct模块_mc9s12xs128单片机「建议收藏」

 

3.3.1.3          修改MdIoInputCfgStruct

1.       增加上下拉选择;

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

mct模块_mc9s12xs128单片机「建议收藏」

 

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

1.       修改名字为MdIoInputDataStruct;

2.       增加debouncecounter计数器;

mct模块_mc9s12xs128单片机「建议收藏」

 

3.3.1.5          修改IOInputCfg_NULL

mct模块_mc9s12xs128单片机「建议收藏」

 

3.3.2         mdio_cfg.c

change log:

mct模块_mc9s12xs128单片机「建议收藏」

 

3.3.2.1          修改mdio_input_cfg[]

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

 

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

key

SW丝印标号

PIN

key1

SW4

PJ4

key2

SW5

PJ5

key3

SW6

PJ6

key4

SW3

PJ7

mct模块_mc9s12xs128单片机「建议收藏」

mct模块_mc9s12xs128单片机「建议收藏」

mct模块_mc9s12xs128单片机「建议收藏」

 

 

 

3.3.3         mdio.c

change log:

mct模块_mc9s12xs128单片机「建议收藏」

 

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

mct模块_mc9s12xs128单片机「建议收藏」

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

3.3.3.2          io初始化函数mdio_init优化

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

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

mct模块_mc9s12xs128单片机「建议收藏」

 

3.3.3.3          mdio_input_info[]改名为mdio_input_data[]

mct模块_mc9s12xs128单片机「建议收藏」

 

3.3.3.4          增加三个input IO采样函数

1.       mdio_input_sample

2.       mdio_input_sample_opt

3.       mdio_input_sample_opt2

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

mct模块_mc9s12xs128单片机「建议收藏」

 

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层的初始化函数。

mct模块_mc9s12xs128单片机「建议收藏」

 

3.4    应用层

3.4.1         apl_key.c

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

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

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

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

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

mct模块_mc9s12xs128单片机「建议收藏」

 

3.4.2         apl_key.h

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

mct模块_mc9s12xs128单片机「建议收藏」

 

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之前归零。

mct模块_mc9s12xs128单片机「建议收藏」

 

3.5.3         apl_task()APP任务

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

mct模块_mc9s12xs128单片机「建议收藏」

 

3.5.4         main

1.      调用初始化函数;

2.      调用周期任务;

mct模块_mc9s12xs128单片机「建议收藏」

 

4       软件测试及调试

4.1    PORTJ验证代码

mct模块_mc9s12xs128单片机「建议收藏」

 

4.2    MCU register

4.2.1         DDR数据方向寄存器

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

mct模块_mc9s12xs128单片机「建议收藏」

 

4.2.2         Data Register数据寄存器

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

mct模块_mc9s12xs128单片机「建议收藏」

 

此时按下KEY2:

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

mct模块_mc9s12xs128单片机「建议收藏」

 

4.3    raw_value测试

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

mct模块_mc9s12xs128单片机「建议收藏」

 

4.4     debounce测试

没有按键按下时:

mct模块_mc9s12xs128单片机「建议收藏」

 

当按下KEY2时:

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

mct模块_mc9s12xs128单片机「建议收藏」

 

今天的文章mct模块_mc9s12xs128单片机「建议收藏」分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/85297.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注