"); //-->
By Toradex 秦海
1). 简介
GPIO的中断功能对于嵌入式设备是一个基本功能,本文就基于WinCE系统演示GPIO中断功能使用,所采用的嵌入式系统为Toradex Colibri iMX6S ARM计算机模块配合Colibri Eva Board开发载板。
2). 准备
a). Toradex Colibri iMX6S (基于NXP iMX6 Solo SoC) 计算机模块配合Colibri Eva Board开发载板。
b). WinCE 使用Toradex发布的最新版WEC7镜像V1.1Beta4版本。
c). 调试中断及GPIO所需的Library使用Toradex官方发布的CE iMX6 library 版本。
d). 测试所使用的基准GPIO demo来自于上述library文件中的libdemo目录。
e). 测试所使用的基准Interrupt demo请从这里下载。
3). 通过按键测试中断应用
a). 首先通过按键输入测试中断,按照Interrupt demo配置,还需要一个GPIO输出在接收到中断后改变其所驱动的LED等状态。在选择GPIO的时候,请配合Colibri iMX6 手册来选定未被系统默认功能占用的引脚,如果一定要一些被CE占用但对于产品并未使用功能的引脚,需要现在WinCE注册表中禁止该功能驱动来释放对应管脚,否则会产生冲突,而是中断程序获取中断统计异常,或者GPIO输出被干扰。这里为了演示,就选择模块SODIMM Pin 49和43两个管脚,默认被SD/MMC接口占用,49管脚作为中断输入,43管脚作为GPIO输出驱动LED。
b). 硬件连接,将Colibri Eva载板X10连接器 SODIMM_49 和X21连接器 SW6连接,并去掉对应的X11 跳线帽;将X10连接器 SODIMM_43 和X21连接器 LED1连接,并去掉对应的X11 跳线帽。
c). iMX6 WEC7系统中如下方式在注册表中关闭SD驱动,然后保存注册表并重启模块。
----------------------------
[HKLM\Drivers\BuiltIn\SDBusDriver]
“Dll” = “_SDBus.dll
----------------------------
d). 在VS2008中打开Interrupt demo程序,如下修改“interruptdemo.c”文件,中断方式保持上升沿方式,只添加按键抖动过滤以及中断次数统计代码。同时由于下载的demo中自带的库版本较老,请使用最新版本的库文件替换”inc”和”libs“目录的文件。
----------------------------
#define INTERRUPT_PIN 49 ///< constant interrupt pin
#define OUTPUT_PIN 43 ///< constant output pin
…
BOOL pinLevelint = FALSE; ///< Variable to get irq pin current level
int intCounter = 0; ///< Variable to count irq numbers
…
if (retVal == WAIT_OBJECT_0)
{
Sleep(10); ///< eliminate button jitter
pinLevelint = Gpio_GetLevel(hGpio, interruptPin);
if(pinLevelint == TRUE)
{
if (pinLevel == TRUE)
{
Gpio_SetLevel(hGpio, outputPin, ioLow); ///< Set output pin(SODIMM 135) to low
pinLevel = FALSE;
}
else
{
Gpio_SetLevel(hGpio, outputPin, ioHigh); ///< Set output pin(SODIMM 135) to high
pinLevel = TRUE;
}
intCounter = intCounter++; ///< count interrupt triggered numbers
printf("\nInterrupt counter : %d", intCounter);
Int_InterruptDone(hIntr, systemInterrupt);
}
else
/*if (MessageBox(NULL, L"Interrupt Event Detected, continue Waiting?", L"Interrupt", MB_YESNO) == IDNO)
{
break;
}*/
{
Int_InterruptDone(hIntr, systemInterrupt);
}
…
----------------------------
e). 编译并部署程序并执行,结果如下,每按键一次SW6,会记录并打印一次中断,同时LED1也会变换状态。
4). 通过PWM输入测试中断输入
a). 在上面测试的基础上,选择SODIMM Pin 133作为PWM输出GPIO,在Colibri Eva载板上面通过X10连接器将SODIMM_133和SODIMM_49互连。
b). 在VS2008中打开Gpio demo程序,修改Gpio_Demo.c,设置pin为133,同时做周期为40ms的PWM波输出。
----------------------------
…
uIo io1 = {133, ioColibriPin};
…
for(int i=0;i<20;i++)
{
Gpio_SetLevel (hGpio, io1, ioHigh);
Sleep(20);
Gpio_SetLevel (hGpio, io1, ioLow);
Sleep(20);
}
…
----------------------------
c). 编译部署gpio demo到imx6核心板,先运行上面的interrupt demo,然后运行gpio demo,可以看到如下结果捕获了20次中断。
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
瑞萨电子强化高层管理,刘芳任瑞萨电子中国总裁
负责任的人工智能迫在眉睫,而一切始于芯片层面
[转贴]《一位浙大教授的激情演讲》
webserve1.0-- Webserver for ARM7
2026年广州国际智能制造技术与装备展览会下周盛大开幕 特色展区赋能创新,多元论坛引领行业新方向
visualedit
摩根士丹利下调评级后,新思科技股价周一迎考验
汽车存储器新突破:8nm128Mb嵌入式MRAM的研发
调节情绪八大技术
自制手持式频率合成数字调谐式调频收音机电路
光连接技术进一步接近融入芯片设计
LatticeECP3 CPRI 解决方案
助听、收音两用机电路
DDR5价格飙涨,实测更便宜的中国产内存
采用TA2111F袖珍调频立体声收音机电路
电调谐调频收音机电路
usb转串口电路图
usb查看工具
LatticeECP3 FPGA低功耗视频
RISC‑V在人工智能、机器学习与嵌入式系统中的优势
用于消费电子产品的ispMACH 4000ZE CPLD系列
值得一读的<中国社会各阶层分析
TI DC/DC 转换器TPS54620 简单易用的负载点设计
电力电子中物理人工智能(PAI)与机器学习(ML)的区别
猪八戒的最后一篇情书
关于诸葛亮职称申请报告的回函
把大模型刻进芯片,可行吗?
采用UIaN3839A单片收音机电路
vxworks_network_ds
BQ3060:符合 SBS 1.1 的电量监测计和保护器