博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
i.mx53 linux led driver
阅读量:4059 次
发布时间:2019-05-25

本文共 1862 字,大约阅读时间需要 6 分钟。

LED驱动

这个简单,因为是直接接在I/O上,所以就是写寄存器控制输出10。因为电路图上是这样做的,I/O->LED->Resistor->GND。所以I/O输入1点亮,输出0熄灭。

管脚对应如下

C5          KEY_COL0           ARM_LED1          ALT1             GPIO4_GPIO[6]

B3          KEY_ROW0         ARM_LED2          ALT1             GPIO4_GPIO[7]

E7          KEY_COL1           ARM_LED3          ALT 1            GPIO4_GPIO[8]

D6          KEY_ROW1         ARM_LED4          ALT1             GPIO4_GPIO[9]

C4          KEY_COL2           ARM_LED5          ALT1             GPIO4_GPIO[10]

F6          KEY_COL3           ARM_LED6          ALT1             GPIO4_GPIO[12]

因为i.mx53PIN可以接到内部不同的功能模块上通过多路选择器IOMUX,所以必须要使用配置IOMUXC使I/O接到普通的GPIO模块上。

官方手册GPIO写模式

1.      配置IOMUXC寄存器选择引脚为GPIO模式

2.      配置GPIO_GDR方向寄存器为输出

3.      GPIO_DR数据寄存器,控制输出01

 

一、I/O模式设置

ARM_LED1:

IOMUXC_KEY_COL0Address 0x53FA_8000 base + 0x24offset=0x53FA_8024

当该寄存器[2:0]=001时,ALT1该引脚被配置成GPIO4功能模块的GPIO[6]引脚,即GPIO4_GPIO[6]

ARM_LED2:

IOMUXC_KEY_ROW0Address 0x53FA_8000 base + 0x28offset=0x53FA_8028

当该寄存器[2:0]=001时,ALT1该引脚被配置成GPIO4功能模块的GPIO[7]引脚,即GPIO4_GPIO[7]

ARM_LED3:

IOMUXC_KEY_COL1,Address 0x53FA_8000 base +0x2c offset= 0x53FA_802c

当该寄存器[2:0]=001时,ALT1该引脚被配置成GPIO4功能模块的GPIO[8]引脚,即GPIO4_GPIO[8]

ARM_LED4:

IOMUXC_KEY_ROW1, Address 0x53FA_8000 base +0x30 offset=0x53FA_8030

当该寄存器[2:0]=001时,ALT1该引脚被配置成GPIO4功能模块的GPIO[9]引脚,即GPIO4_GPIO[9]

ARM_LED5:

IOMUXC_KEY_COL2,Address 0x53FA_8000 base +0x34 offset=0x53FA_8034

当该寄存器[2:0]=001时,ALT1该引脚被配置成GPIO4功能模块的GPIO[10]引脚,即GPIO4_GPIO[10]

ARM_LED6:

IOMUXC_KEY_COL3,Address 0x53FA_8000 base+0x3coffset=0x53FA_803c

当该寄存器[2:0]=001时,ALT1该引脚被配置成GPIO4功能模块的GPIO[12]引脚,即GPIO4_GPIO[12]

 

 

二、I/O方向设置

GPIO-4_GDIR is 0x53F9_0000 base + 0x4offset = 0x53F9_0004

这个寄存器是32-bit的,决定了引脚的方向。写0配置成输入,写1配置成输出。此处明显可见需要将GPIO4_GDIR[6,7,8,9,10,12]位写1

三、I/O输出设置

GPIO-4_DR is 0x53F9_0000 base +0x0offset=0x53F9_0000

这个寄存器是32-bit的,决定了引脚的电压。写1输出高电平,写0输出低电平。此时为使6LED都亮,故应该将GPIO4_DR[6,7,8,9,10,12]位写1

 

到此,硬件分析已经完成了。下面就是套用linux下的驱动框架了,为了在内核空间访问硬件地址,就必须将物理地址映射成虚拟地址才能访问。本来我想直接使用ioremap映射一下读写寄存器就完事了。可这个Freescale提供的BSP直接将整个SOC的资源采用静态映射了。这样如果我再映射的话,内核就会失败。这块资源已经被占用了。所以我就不能使用ioremap,我必须要飞思提供的BSP中找到映射后的虚拟地址,直接读写这个虚拟地址。

必须要找到!!!!

 

转载地址:http://tjzji.baihongyu.com/

你可能感兴趣的文章
内存池
查看>>
linux 驱动开发 头文件
查看>>
ipconfig,ifconfig,iwconfig
查看>>
opensuse12.2 PL2303 minicom
查看>>
网络视频服务器移植
查看>>
Encoding Schemes
查看>>
移植QT
查看>>
如此调用
查看>>
计算机的发展史
查看>>
带WiringPi库的交叉编译如何处理一
查看>>
带WiringPi库的交叉笔译如何处理二之软链接概念
查看>>
Spring事务的七种传播行为
查看>>
ES写入找不到主节点问题排查
查看>>
Java8 HashMap集合解析
查看>>
欢迎使用CSDN-markdown编辑器
查看>>
Android计算器实现源码分析
查看>>
Android系统构架
查看>>
Android 跨应用程序访问窗口知识点总结
查看>>
各种排序算法的分析及java实现
查看>>
SSH框架总结(框架分析+环境搭建+实例源码下载)
查看>>