linux的GPIO应用实例
来源:互联网 发布:阿拉伯语自学软件 编辑:程序博客网 时间:2024/04/29 21:56
需求描述:
主板上的状态灯应能正确显示ONU模块的连通状态,即当光节点模块插到主板插槽之后,状态灯应亮,移掉之后应灭。
硬件接口:
When SFP module is plugged in, the GPIO[2] status will change from high to low automatically.
When SW detect the change, just make the GPIO[18] to generate low signal (default is high), the ONU led will be lighted.
以上为接任务时的信息。于是开始寻找解决问题的信息。
GPIO的背景信息?
即通用输入输出。把CPU针脚不通过总线或控制器直接连到外设上来进行控制的工业标准,比如连一个针脚到LED上,通过置一个bit的0/1就可以控制该LED得亮灭。
硬件的结构是怎样的? 找schematics看一看:
1.右边是CPU,左边是pin脚连的东西,“>>”,“<<”表示输入的方向
2.对应第一张图,左边是灯,右边是连到的CPU的GPIO接口
3.对应第一张图,左边是CPU
软件的方案?
有2种实现方法,一种是对GPIO[2]的电位进行轮询,一种是让GPIO[2]的电位变化产生中断。
找到一个当前主板上的别人使用GPIO的例子,该例子的功能是:按下硬件重启按钮后会向CPU的GPIO针脚发使主板重启。
此例子是用中断实现的,准备也用中断的方式来实现。
那么,怎么让GPIO的[2]的电位变化产生中断呢?
在现在的设备上看看,列出已经被占用的中断号:
root:/proc# cat interrupts
CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6
0: 526 83 11 4 1423 164 355 MIPS SMTC_IPI
2: 0 0 0 0 0 40 MIPS pmcmsp_tsmac
3: 0 0 3 0 0 00 MIPS pmcmsp_tsmac
4: 0 0 0 0 0 00 MIPS ehci_hcd:usb1, ehci_hcd:usb2
5: 0 0 0 0 13 00 MIPS pmcmsp_tsmac
6: 0 0 0 0 0 00 MIPS CIC cascade
8: 0 0 0 0 0 00 MSP_CIC Softreset button
21: 0 0 0 0 0 00 MSP_CIC PER cascade
25: 5853436 1664 28 4 0 00 MSP_CIC timer
27: 3575 0 0 0 0 00 MSP_CIC serial
34: 0 0 0 0 5851128 138 30 MSP_CIC VPE1 local timer
46: 1 0 0 0 0 00 MSP_PER pmcmsptwi
ERR: 1
现有按钮的硬件是怎么连的?
现有按钮的中断是怎么实现的?
在上图中可以看到GPIO21针脚同时连到了按钮与IRQ0(Interrupt Request 0)。查看代码
现在的问题?
在此CPU中,GPIO0-15可以配置产生内部中断,GPIO16及其以上不能通过配置产生;上面的例子用的是GPIO21,不能通过配置产生中断,所以才要接到IRQ0
要实现的LED灯的GPIO的脚不像按钮的例子,是没有接到外部中断的,但要求对LED的GPIO2进行电位判断,在GPIO0-15的范围内,是可以通过配置CPU来产生中断的。
但是如何进行配置的文档CPU厂商不提供,另外CPU的SDK现在也不支持对GPIO中断进行配置。
小结:以能获取的硬件与软件,无法使GPIO2产生中断。
那么只能走轮询的路了。代码如下:
ok.
- linux的GPIO应用实例
- linux设备树的gpio和gpio中断应用实例
- 10 linux设备树的gpio和gpio中断应用实例
- 我的内核学习笔记11:linux leds-gpio驱动应用实例
- 我的内核学习笔记12:linux i2c-gpio驱动应用实例
- 09 linux设备树里的gpio应用
- linux的GPIO驱动
- Linux GPIO的使用
- Linux GPIO - gpio.c(GPIO各个接口的实现)
- linux list的应用实例
- linux内核GPIO模拟I2C实例
- linux内核GPIO模拟I2C实例
- LINUX应用层操作GPIO口
- Linux gpio 中断应用(转载)
- Linux应用层直接操作GPIO
- Linux应用层直接操作GPIO
- Linux 驱动---------gpio配置和基本应用
- 嵌入式Linux基于Qt开发GPIO应用
- 生什么病,吃什么水果
- VC6打开文件时错误
- Berkeley DB 1.8.6源代码学习(八)
- 详析VC中坐标系的建立
- 堆和栈
- linux的GPIO应用实例
- POJ2386 Lake Counting
- DBhelper有些不懂,请各位指教
- 根文件系统制作 busybox移植
- INSERT INTO 语句 中的 引号问题
- 解析动态联编
- Javascript验证练习。请求师兄修改bug 。出错时候为什么不能显示 “确定”按钮??
- Firefox下拖拽客户端文件到浏览器达到上传效果的实现(java例)
- js屏蔽按键