Linux—GPIO
来源:互联网 发布:程序员开发工具网 编辑:程序博客网 时间:2024/06/07 07:09
- 查看原理图,我的JZ2440开发板连接图是
LED1: nLED_1 –> GPF4
LED2: nLED_2 –> GPF5
LED3: nLED_4 –> GPF6
S1: EINT0–> GPF0
S2: EINT2 –> GPF2
S3: EINT11 –> GPG3
2. 查看S3C2440手册
控制GPF口的寄存器如下:
GPFCOND寄存器控制I/O口的功能(输入/输出/中断)。
GPFDAT寄存器存放I/O口的状态(高电平/低电平)
GPFUP寄存器控制I/O口是否使能上拉
电路图里LED和Key都接有上拉电阻,不用内部上拉。
控制GPG口的寄存器也类似。
3. 编写代码
@************************************************************
@ File:crt0.S
@ 功能:通过它转入C程序
@************************************************************
.text.global _start @代码开始地址定义个标记_start: ldr r0, =0x53000000 @ WATCHDOG寄存器地址 mov r1, #0x0 @给r1 赋值0x0 str r1, [r0] @ 写入0,禁止WATCHDOG,否则CPU会不断重启 ldr sp, =1024*4 @ 设置堆栈,注意:不能大于4k, 因为现在可用的内存只有4K @ nand flash中的代码在复位后会移到内部ram中,此ram只有4K @调用C函数前要先设置堆栈 bl main @调用C程序中的main函数,并将下一条指令地址定义为返回地址halt_loop: b halt_loop @死循环
/*************************************************************
File:key_led.c
功能:实现按键控制LED灯的亮灭
*************************************************************/
#define GPFCON (*(volatile unsigned long *)0x56000050) //设置GPFCON地址 #define GPFDAT (*(volatile unsigned long *)0x56000054) //设置GFPDAT地址 #define GPGCON (*(volatile unsigned long *)0x56000060) //设置GPGCON地址 #define GPGDAT (*(volatile unsigned long *)0x56000064) //设置GPFDAT地址 #define GPF4_out (1<<(4*2)) // 0000 0001 0000 0000 #define GPF5_out (1<<(5*2)) // 0000 0100 0000 0000 #define GPF6_out (1<<(6*2)) // 0001 0000 0000 0000 #define GPF4_msk (3<<(4*2)) // 0000 0011 0000 0000 #define GPF5_msk (3<<(5*2)) // 0000 1100 0000 0000 #define GPF6_msk (3<<(6*2)) // 0011 0000 0000 0000 #define GPF0_in (0<<(0*2)) #define GPF2_in (0<<(2*2)) #define GPG3_in (0<<(3*2)) #define GPF0_msk (3<<(0*2)) #define GPF2_msk (3<<(2*2)) #define GPG3_msk (3<<(3*2))int main() { unsigned long dwDat; // LED1,LED2,LED4对应的3根引脚设为输出 GPFCON & = ~(GPF4_msk | GPF5_msk | GPF6_msk) ; //将GPF4-6设置为输入 //0011 1111 0000 0000 取反 1100 0000 1111 1111 GPFCON |= GPF4_out | GPF5_out | GPF6_out ; //将GPF4-6设置为输出 //0001 0101 0000 0000 // S2,S3对应的2根引脚设为输入 GPFCON &= ~(GPF0_msk | GPF2_msk); GPFCON |= GPF0_in | GPF2_in; // S4对应的引脚设为输入 GPGCON &= ~GPG3_msk; GPGCON |= GPG3_in; while(1) { //若Kn为0(表示按下),则令LEDn为0(表示点亮) dwDat = GPFDAT; // 读取GPF管脚电平状态 if (dwDat & (1<<0)) // S2没有按下 GPFDAT |= (1<<4); // LED1熄灭 else GPFDAT &= ~(1<<4); // LED1点亮 if (dwDat & (1<<2)) // S3没有按下 GPFDAT |= (1<<5); // LED2熄灭 else GPFDAT &= ~(1<<5); // LED2点亮 dwDat = GPGDAT; // 读取GPG管脚电平状态 if (dwDat & (1<<3)) // S4没有按下 GPFDAT |= (1<<6); // LED3熄灭 else GPFDAT &= ~(1<<6); // LED3点亮 } return 0;}
之后编写makefile文件,即可生成可执行文件烧录到开发板。
编译和烧录过程http://blog.csdn.net/owhfg/article/details/62226849
0 0
- Linux—GPIO
- Linux GPIO
- Linux-GPIO
- GPIO的驱动模型——linux
- linux 标准GPIO 驱动模型—version1
- linux 标准GPIO 驱动模型—version1
- linux 标准GPIO 驱动模型—version1
- 【linux】 linux gpio操作
- Linux GPIO驱动 - GPIO通用层
- GPIO Linux内核编程
- gpio linux 实现模型
- gpio linux 实现模型
- gpio linux 实现模型
- gpio linux 实现模型
- 转:linux GPIO驱动
- gpio linux 实现模型
- linux gpio模拟i2c
- armlab:GPIO(Linux+mini2440)
- Caffe-Miscoroft无训练日志解决方法
- Spring架构详解之Ioc容器的扩展点
- MPAndroidChart开源图表库之折线图
- codeforces785C-bindary search,math
- java虚拟机随手笔记(1)内存分配
- Linux—GPIO
- 特征工程
- Sublime Text 2 实用快捷键
- Search a 2D Matrix II
- Spring架构详解之动态代理的实现原理
- tomcat7.0.55配置单向和双向HTTPS连接(二)
- postgre删除数据表重复数据
- 芯片封装详细介绍
- 为什么选择嵌入式方向