i.mx53 linux led driver


分类: Linux驱动开发   38人阅读  评论(0)  收藏  举报

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中找到映射后的虚拟地址,直接读写这个虚拟地址。

必须要找到!!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值