原创 kinetis L系列的 NVIC 与实现(二)

2013-8-14 12:37 1381 16 18 分类: 消费电子

kinetis L系列的 NVIC 与实现(二)

 

[NMI PIN(PTA4)复用为 GPIO 后实现PIN中断的 Sample]
在我们熟悉了默认的 NMI Interrupt 后, Kinetis L Peripheral Module Quick Reference.pdf 给我们提供了一个非常稀奇的 sample, 也是 interrupt 的第一课, 使用 PIN interrupt.

(a) 之所以说稀奇的原因, 是这个 PIN 利用的又是 NMI PIN(PTA4), 其目的是复用 PTA4, 禁止 NMI interrupt PIN 功能, 使能 GPIO 功能后, 把 PTA4 当成普通的 GPIO, 实现 PIN Interrupt.

怀着复杂的心情, 我们学习着这个 sample, 至于为什么要偏偏复用 NMI GPIO(而默认NMI_b属于 ARM cortex-m0+ core 中断), 我们不知道, 文档说"因为边缘敏感的中断, 要优于电平敏感的中断, 保证每次按下 button 都只会触发一次中断"```

(b) 我们通过工程项目的经验, 一般都很敏感于各种说明和 samples 将说未说的言外之意. 那么这是否说明, Freescale 对设计的 NMI PIN 没有太多的信心, 在受到诸多 delta 版本发布给专业用户测试后, 得到评价是 NMI 作为 PIN interrupt 的不可靠而受到投诉?

(c) 我们已经决定在我们的将来设计中, 无论是否使用 PIN interrupt, 只要 NMI pin 的默认 NMI Interrupt 没有使用, 我们都打算在 init 阶段, 把 PTA4 复用为 GPIO, 而中止其默认 NMI Interrupt 功能.
-- 理由仅仅是因为一个 sample 带给我们的直觉``` 而我们已经打算忍受同行们对我们过份敏感的耻笑了```  ; (

(d) 如前所述, 我们将 PTA4 复用为 GPIO,
        // Configure the PTA4 pin for its GPIO function
        PORTA_PCR4 = PORT_PCR_MUX(0x1);


Note: 这个初始化动作, 我们必须在 open port clock 完成后才能进行. 否则我们将发现 hard fault 中断频繁出现, 甚至无法运行到 main() 函数入口点. 一旦完成该初始化, 则 NMI PIN 不再能触发 Interrupt. 并注意到, PTA4 复用为 GPIO 后, 仍然存在内部上拉.

(e) 建立 PTA4 的 rising edge interrupt, 见图例9:
[图例9: Blinky sample 中的使能 PTA4 上升沿中断]

9.jpg

 

匹配上对应 IRQ 的 isr 程序名, 我们很容易就实现了一个 PIN interrupt, 见图例10:
[图例10: 实现 PIN Interrupt 的代码片段]

10.jpg
 
[实验测试]
我们不晓得, 有多少同行验证过这 PTA4 停止 NMI Interrupt, 改写为 PIN rising interrupt 的sample.

我们的经验是, 中断触发行为非常古怪, 用镊子可以进入 ISR, 而直接短暂短接到 GND, 则时有时无. 我们用 10k 上拉后, 终于可能保证短暂短接到GND(模拟按下 push button) 可以进入到 ISR 了.但是, "rising edge interrupt 更好, 只会触发一次 ISR" 的说法我们一点也感觉不到, 照样经常触发两次中断.

如果排除实验步骤错误, 以及 KL25Z 开发板的相关PIN脚(特别是 NMI PIN)故障的因素, 我们的这个非常短暂的实验经验是,
 
无论是否内部上拉, 还是说PIN脚内部有滤波器, 如果我们项目中需要 PIN interrupt, 那么一个外部的上拉电阻看起来是必要的, 而一个小的外部滤波(比如加入电容之类)的电路或者也应该必要. 或者说, 我想干脆建议同行用timer延时过比如说 10ms 滤除抖动后实现一个模拟的"PIN interrupt".

如我有任何错误, 请提醒我.
 
 
[PS]
值得一提的是, 在简单调试中, 我们观察到一个 enable interrupt 的例程中, 反应出诸多代码的不足之处, 我犹豫是否将其写出来给大家共享```

总之, 这些 kinetis L series 的 sample code 看起来似乎代码质量不高, 或者可能有颇多疏漏之处, 一些代码风格, 类似一位初学者的水平(尽管我自己的水平不高),学习上述 sample code 的代码风格, 可能会容易误人子弟吧? 可能会 降低中国工程师的代码编程能力和代码欣赏水平?``` 与同行们商榷.

我们的建议是, 正在着手 Kinetis L 的亲爱同行, 是否应该尽量从 bare project 着手, 并反复检查从 sample 中copy 出来的代码片段, 认真测试我们的产品, 以免实际出货后造成不可预计之损失?
 
 
PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

allen_zhan_752827529 2013-8-15 12:33

Mike, cortex-m0+ 必将大行其道, 目前仅有两家 M0+ 之一的 Freescale 无疑已经站在市场先机. 但是就我们的学习感觉, Freescale 力推的 kinetis L series 确有入门不易之因素对推广产生影响. 但长远来看, 能效较高, 价格较低的 m0+ 未来数年内, 必将对整个 mcu 市场产生深远影响.

用户1277994 2013-8-15 09:24

Allen博主写了这么长,辛苦了啊! 希望做kinetis的同行朋友们看过来,跟博主交流探讨,帮助大家少走弯路。
相关推荐阅读
allen_zhan 2023-02-27 19:08
对"三极管"译名由来的探讨
想讨论一个有意思的话题:今天中国大陆的电子业界, 为何将 BJT 称呼为 "三极管"? 或因其象形, 前辈自行进行随意的不严谨定义么? 带着疑问我们做了一下延伸查阅, 或得出这样的结论, 即中译名"三...
allen_zhan 2023-02-19 18:15
对知乎提问"为何三极管的一个PN结工作在反偏"的回复
将这个回复, 也发表在博文中, 作为自己的一个学习笔记叭.知乎问题: "三极管里面的PN结相当于二极管,为什么里面PN结加反向电压也能导通?"我的回复:首先, 二极管的"反向"概念, 容易给初学者某种...
allen_zhan 2023-02-18 10:17
从肖特基二极管到PN结与三极管
最近数个工作日的兴趣是回顾电子基础器件的发明/发展历史, 期待夯实技术基础的底蕴. 在学习与搜索资料的过程中, 顺便对知乎的一个同学的基础问题, 进行了回复. 不小心回复一下就成了千字文, 觉得挺有趣...
allen_zhan 2023-01-28 11:53
微功率 ISM 频率探讨相关文档组总结
不知不觉, 自开启关于微功率频率的话题起, 即从第一份文章写就到今天总结之日, 已经接近 10 个工作日左右. 早先的想法是对工程界未来的微功率设备相关项目, 从项目规划开始, 对选择系统, 频率, ...
allen_zhan 2023-01-27 22:50
关于 LoRa 应用场景的讨论
说明: 本文中斜体部分表示来自公告文件的部分内容剪贴或合并整理.1. "第52号文" 对 470MHz 的约束引自 如下:(四)民用计量仪表限在建筑楼宇、住宅小区及村庄等小范围内组网应用,任意时刻限...
allen_zhan 2023-01-25 13:24
ISM 频段中 2.4G 与 5.8GHz 设备的使用与限制
说明: 本文中斜体部分表示来自公告文件的部分内容剪贴或合并整理.1. ISM 频段定义中的 2.4G 与 5.8GHz正如同 文中确定的, 2.4G, 5.8GHz 属于中国大陆 ISM 频段的定义...
我要评论
2
16
关闭 站长推荐上一条 /3 下一条