历史上的今天
返回首页

历史上的今天

今天是:2025年07月16日(星期三)

正在发生

2021年07月16日 | MC9S12G128模块化分层化软件架构之四——LED

2021-07-16 来源:eefocus

1 overview

1.1 目的

本文档用于起点开发板的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 LED分析

3.1 原理图

 

起点开发板共计8个LED。

image.png?imageView2/2/w/550

3.2     PORT和PIN的处理

以PORTT为例:


从《MC9S12G128模块化分层化软件架构之二——IO驱动》中可知,方向寄存器DDR可以存储在drio_cfg.c的drio_dir_reg数组中,

PP2~PP7、PT6和PT7引脚设置为输出:


BYTEOP_BIT_CLEAR_AT(*drio_dir_reg[port],pin);


4 软件实现

4.1 CodingRule

具体可在源码的 .MC9S12G128_LEDSourcescode_rules.txt中可见。

4.2 driver层

4.2.1 drio.c

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


① 引脚输出设置;


② 引脚输入设置;


③ 引脚上拉下拉使能设置;


④ 引脚下拉下拉选择;


4.2.1.1 引脚输出设置修改

形参:


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


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


使用位操作

4.2.1.2 引脚输入设置

形参:


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


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


使用位操作

4.2.1.3 设置引脚输出值

形参:


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


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


bit_val:引脚要输出的电平值;


4.2.2 drio.h

函数声明

4.3 中间件module层

4.3.1 mdio_cfg.c

该文件与MCU原理图紧密关联,根据原理图,文件中应当定义有哪些port的哪些PIN是输出的,哪些port的哪些PIN是输入的,输入的引脚是否需要上拉还是下拉,是否需要debounce,debounce的时长是多少,debounce方式是什么?


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

4.3.1.1 引脚输出配置


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


* port


* pin


* open drain(可省略)


* 初始化引脚电平


 * 进入睡眠模式的引脚电平(在实际应用中,MCU进入睡眠模式后需要明确输出脚的电平。)


增加输出port和pin:

数组化配置,更有利于实现平台化配置,方便产品的迭代和多样化。


4.3.1.2 引脚输入配置

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


* port


* pin


* deb_type(debounce type)


* deb_ctr(debounce counter)


4.3.1.3  输出输入数组大小定义


设置数组中配置元素大小的意义在于可以在mdio_init初始化中确定需要初始化的个数,在input IO采样的任务中,可以明确采样的个数。

4.3.2 mdio_cfg.h

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

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

4.3.2.3  debounce方式枚举定义

4.3.2.4  无效值定义

4.3.3 mdio.c

4.3.3.1 io初始化函数


codeing rule:


① 使用指针指向mdio_output_cfg和mdio_input_cfg,不直接操作全局数组;


② 对port和pin的范围有效性判断;

4.3.4 mdio.h

函数声明:

4.3.5 apl_led.h

在应用层中,应该只调用中间层——module层。


① 首先要确定的是每个LED的在mdio_cfg.c中的mdio_output_cfg[]中的index是多少;


② 使用宏给应用层提供LED_ON和LED_OFF的接口,然后宏替换为中间层的接口;

代码如下:

4.3.6 apl_led.c

暂时使用apl_led.h中的宏提供LED_ON和LED_OFF,后期需要在apl_led.c中添加LED闪烁和PWM调节LED光亮。


4.3.7 main.c

4.3.7.1 时间片基准


在main函数中使用delay_1ms模拟1毫秒时间片,为main提供时间片基准。

4.3.7.2 LED500ms周期闪烁


LED闪烁周期LED_TASK_PERIOD为500,tick_ctr当做计时器,计满清零。


注意:tick_ctr最大为65536,但是不能让tick_ctr自动的加满至65536后溢出归零。

5 软件测试及调试

5.1 MCU register

5.1.1 DDR数据方向寄存器

从图中可以看出,我们需要PP2~PP7的DDR为1,即output,PPT6和PPT7的DDR为1,即output,正确无误。

5.1.2 Data Register数据寄存器

5.1.2.1 LEDOFF


在LED_OFF出打断点,LED OFF需要输出高电平,即数据寄存器为1,从图中可见,当程序运行出LED_OFF的代码后,PTT的PTT6和PTT7,PTP的PTP2~PTP7数据寄存器都为1。

5.1.2.2 LED ON


在LED_ON处打断点,LED ON需要输出高电平,即数据寄存器为0,从图中可见,当程序运行到LED_ON的代码后,PTT的PTT6和PTT7,PTP的PTP2~PTP7数据寄存器都为0。(注LED8对应的PIN为PTT6,还未运行完APL_LED8_ON,所以PTT6还是1.)

5.2 tick_ctr循环周期

从图中可以见看出,当进入LED_ON时,tick_ctr为7000,可以整除LED_TASK_PERIOD(500)。

5.3 tick_ctr归零

在tick_ctr归零处打断点,当tick_ctr大于等于(65535 – 65535 % 500)时,tick_ctr归零,开始新的循环。

5.4 实物展示

推荐阅读

史海拾趣

广东华裕(GDHY)公司的发展小趣事

机顶盒,全称为数字视频变换盒,是现代家庭娱乐中不可或缺的重要设备。从广义上讲,凡是与电视机连接的网络终端设备均可称为机顶盒,其发展历程涵盖了从模拟频道增补器到数字卫星、有线及IPTV机顶盒等多种形态。其核心功能在于接收并转换数字电视信号,使之能在传统或智能电视上播放,极大地丰富了用户的观看体验。

机顶盒不仅支持高清、4K乃至更高分辨率的视频播放,还具备强大的网络交互能力。用户可通过机顶盒接入互联网,享受在线购物、视频点播、游戏娱乐、社交媒体互动等多种服务。此外,部分机顶盒还集成了智能语音助手、家庭影院功能及存储能力,让家庭娱乐更加便捷、个性化。

随着科技的进步,机顶盒正朝着高清化、智能化、多功能化方向发展。高清及超高清技术的普及,使得画面更加细腻逼真;人工智能技术的应用,则让机顶盒具备了更强大的内容推荐和交互能力。同时,市场竞争的加剧也促使厂商不断创新,推出更多符合用户需求的产品和服务。

总之,机顶盒作为连接电视与互联网的桥梁,其重要性日益凸显。在未来,随着技术的不断进步和市场的持续扩大,机顶盒将继续为用户带来更加丰富、便捷、智能的观影体验。

Hayashi Denko Co Ltd公司的发展小趣事

HARTING公司自1945年成立以来,在电子行业里经历了多个重要的发展阶段,以下是五个与HARTING公司发展相关的事实性故事:

1. 创立与初期发展

创立背景:1945年,Wilhelm和Marie Harting在德国创立了HARTING公司,起初以生产日常所需的设备为主,如节能灯泡、电炉等。随着德国工业的发展,他们逐渐意识到新兴行业对技术产品的需求,于是将公司转向开发和生产电气连接器及连接系统。这一转变标志着HARTING正式进入电子行业,并为其后续发展奠定了基础。

初期产品:早期,HARTING开发的Han®连接器在市场上取得了巨大成功,该连接器以其坚固耐用、易于操作的特点,迅速成为行业内的标准产品,为HARTING在电子行业树立了良好的口碑。

2. 技术创新与全球化拓展

技术创新:HARTING始终致力于技术创新,不断推出新产品以满足市场需求。例如,他们研发的矩形连接器在1965年问世后,迅速替代了传统的圆形军用规格连接器,成为工业连接的新标准。此外,HARTING还在数据通信、网络技术、芯片卡、多媒体技术等领域取得了显著成就。

全球化拓展:随着业务的不断发展,HARTING开始在全球范围内设立子公司和生产工厂。目前,HARTING已在40多个国家设立了附属公司,生产工厂遍布德国、英国、瑞士、美国、罗马尼亚及中国等7个国家。这种全球化布局不仅提升了HARTING的市场占有率,还使其能够更好地服务全球客户。

3. 进入中国市场

中国市场布局:1988年,HARTING正式进入中国市场,并在珠海投资兴建了生产基地。这一举措标志着HARTING对中国市场的重视和承诺。随着在中国市场的不断深耕,HARTING已在中国设立了多个销售和服务中心,覆盖了包括香港、珠海、深圳、广州在内的多个城市。

本地化生产与服务:为了更好地服务中国客户,HARTING在中国实现了本地化生产和服务。他们不仅提供高质量的产品,还为客户提供设计咨询、系统集成、定制化解决方案等一系列专业服务。这些举措使HARTING在中国市场赢得了广泛认可。

4. 工业4.0与数字化转型

工业4.0引领者:面对工业4.0和数字化转型的浪潮,HARTING积极投入研发和创新,推出了多款面向未来的产品和技术。例如,HARTING MICA®是一款将工业4.0功能引入现有机器和设备的工业边缘网关,它能够帮助企业实现生产过程的智能化和自动化。

数字化转型服务:除了产品创新外,HARTING还为客户提供数字化转型的解决方案和服务。他们利用自身在连接技术领域的优势,帮助企业构建高效、可靠的数字化生产体系,提升生产效率和产品质量。

5. 定制化解决方案与行业应用

定制化解决方案:HARTING深知不同行业对连接技术的不同需求,因此他们始终致力于为客户提供定制化的解决方案。无论是电力、通信、自动化还是航空、汽车等行业,HARTING都能根据客户的具体需求,提供最适合的连接技术和产品。

行业应用案例:在多个行业领域,HARTING的产品和技术都得到了广泛应用。例如,在汽车行业,HARTING的3D-MID技术帮助客户将复杂的电子设备集成到汽车中,提高了汽车的安全性和舒适性;在轨道交通行业,HARTING的连接器产品被广泛应用于信号传输和电源分配等领域,确保了轨道交通的安全运行。

通过以上五个故事,我们可以看出HARTING公司在电子行业里的发展历程和成就。从创立初期的艰难探索到如今的全球化布局和技术创新,HARTING始终保持着对技术的热爱和追求,为客户提供高质量的产品和服务。

Axon' Cable公司的发展小趣事

在快速发展的同时,Axon' Cable公司始终关注环保问题。公司积极采用环保材料和工艺,减少生产过程中的污染排放。此外,Axon' Cable还投入大量资源研发环保型产品,为推动电子行业的可持续发展做出了积极贡献。这些环保举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实的基础。

DAESAN公司的发展小趣事

在电子行业中,技术创新是企业发展的核心驱动力。DAESAN公司深知这一点,因此一直致力于技术研发和创新。他们投入大量资金和资源,引进先进的生产设备和技术人才,不断推出具有竞争力的新产品。其中,一款高性能的电子芯片引起了行业的广泛关注。这款芯片采用了最新的纳米技术和低功耗设计,不仅性能卓越,而且节能环保。DAESAN公司凭借这一技术创新,成功打开了高端电子市场的大门。

Global Navigation Systems公司的发展小趣事
减少远程无线防盗报警系统的误报率可以从以下几个方面入手:首先,选择合适的探测器和安装位置,避免将探测器安装在易受干扰或误触发的位置;其次,合理设置探测器的灵敏度和报警阈值,避免过度敏感导致误报;最后,定期对系统进行维护和检查,及时发现并排除潜在的故障和隐患。
Aavid Thermalloy公司的发展小趣事
调试远程无线防盗报警系统时,需要按照说明书或专业人员的指导进行。首先,检查各个部件的连接是否牢固可靠,确保没有短路或断路现象。然后,进行功能测试,包括探测器灵敏度测试、发射机信号强度测试以及接收控制器报警功能测试等。在测试过程中,需要注意观察系统的反应速度和准确性,以及是否存在误报或漏报等情况。如果发现问题,需要及时进行排查和解决。

问答坊 | AI 解惑

LC46芯片用何种设备能够读写

我是一只菜鸟。遇到一个问题,烦请大侠帮忙解决。有一个喷墨墨盒,上有一芯片,记录打印次数,如果超过限制,就不让使用,想解开此芯片,把新墨盒的数据写到老墨盒上,在灌上代用墨汁,就不用买原装的了。本菜鸟在很偏僻的树林(沈阳)没有找到办法 ...…

查看全部问答>

PCB设计的可测试性概念

产品设计的可测试性(De sign For Testability. OFT) 也是产品可制造性的主要内容从生产角度考虑也是设计的工艺性之一.它是指在设计时考虑产品性能能够检测的难易程度,也就是说设计产品时应考虑如何以最简单的方法对产品的性能和加工质量进行检测, ...…

查看全部问答>

DEBUGMSG(ZONE_TRACE, (TEXT("XXXX\r\n")));这样的语句在驱动里面怎么打印到调试串口?

DEBUGMSG(ZONE_TRACE, (TEXT(\"XXXX\\r\\n\")));这样的语句在驱动里面怎么打印到调试串口? …

查看全部问答>

想找个师父!指导下我嵌入式系统开发!

近期对嵌入式系统开发很有兴趣,像微软的WM,谷歌的android,苹果的iphone OS 本身我学习计算机语言就是想涉足计算机系统开发,但是开始学了C#,被微软的VS小黑盒子式编程给洗脑了...感觉编程好像比画图还简单!好想学了C#跟没学似地, 所以现在觉 ...…

查看全部问答>

请教2407与2812区别

请教一下TMS320LF2407A与TMS320F2812功能上与硬件上区别 才开始学习  很多不懂  请各位多多帮忙  谢谢了!!!…

查看全部问答>

MSP430与SHT温湿度传感器程序报错

程序的目的是把采集的温度通过串口显示,现在做的程度是我把硬件连接好后,用MSP430仿真器查看温湿度的数值不正确,比如humi_val.i用quick  watch查看value为62850这样的数据,单片机的txd用示波器观察没有波形,可能程序存在很大问题,现在比 ...…

查看全部问答>

赛灵思FPGA培训资料汇总,免费提供,欢迎索要

我这里有从各个研讨会搜集来的赛灵思大量FPGA的培训资料,如有需要请将您的邮箱发到:779861433,我会发到您的邮箱,谢谢!…

查看全部问答>

MSP430F477的SD16_A中断打开后单片机复位。

我把所有的程序都只注释掉了,只留IO初始化,SD16_A初始化,和一些延时子程序。 一运行到SD16_A初始化完成 中断允许后 单片机就复位了。这是什么情况 坐等高人解惑~~~~…

查看全部问答>

BB Black 入门基础之Eclipse C++ 控制LED灯(中)

本帖最后由 lonerzf 于 2014-1-13 10:57 编辑 接着上一篇。之前的地方设置是有问题的,先不讲可能是哪,大家帮忙给查个错呗。谢谢啦{:soso_e100:} 补充下,如果用 SSH Only方式进行远程部署,则在某些情况下方便得多。 还是在编译好之后选择绿 ...…

查看全部问答>