GPIO
 通用型输入输出,GPIO可以控制连接在其引脚实现信号的输入和输出
 芯片的引脚和外部设备相连从而实现与外部硬件的通讯,控制,信号采集的功能。

 控制CHG_COK引脚输出为高电平,LED亮,输出为低电平,LED熄灭。
 查找CHG_COK引脚由GPX2_7控制器控制。
 
 接着查询怎么控制GPX2_7寄存器
 
 第28-32位控制GPX2_7是输入/输出模式,不能控制发出的是高电平还是低电平

 当配置为输出端口时,引脚状态应该与相应的位相同。
 也就是说第7位设置为1,那么GPX2_7引脚输出即为1高电平
 使用汇编语言控制寄存器
.text
_start:MAIN:BL LED_CONFIG
LOOP:BL LED_ONBL DELAYBL LED_OFFBL DELAYB LOOPLED_CONFIG:LDR R2,=0x11000c40LDR R1,=0x10000000STR R1,[R2]MOV PC,LRLED_ON:LDR R2,=0x11000c44LDR R1,=0x00000080STR R1,[R2]MOV PC,LRLED_OFF:LDR R2,=0x11000c44LDR R1,=0x00000000STR R1,[R2]MOV PC,LRDELAY:LDR R1,=1000000000
L:SUB R1,R1,#1CMP R1,#0BNE LMOV PC,LRSTOP:B STOP
.end
/*
- 一.汇编语言访问存储器
- 1.读存储器
-  LDR R1,[R2]
- 2.写存储器
-  STR R1,[R2]
- 二.C语言访问存储器
- 1.读存储器
-  data = *ADDR
- 2.写存储器
-  *ADDR = data
*/
 
 使用C语言控制寄存器
void Delay(unsigned int Time)
{while(Time --);
}#if 0
int main()
{/*通过设置GPX2CON寄存器来将GPX2_7引脚设置成输出功能*/*(unsigned int *)0x11000c40 = 0x10000000;while(1){/*点亮LED2*/*(unsigned int *)0x11000c44 = 0x00000080;/*延时*/Delay(1000000);/*熄灭LED2*/*(unsigned int *)0x11000c44 = 0x00000000;/*延时*/Delay(1000000);}return 0;
}
#endif#if 0
#define GPX2CON (*(unsigned int *)0x11000c40)
#define GPX2DAT (*(unsigned int *)0x11000c44)int main()
{GPX2CON = 0x10000000;while(1){/*点亮LED2*/GPX2DAT = 0x00000080;/*延时*/Delay(1000000);/*熄灭LED2*/GPX2DAT = 0x00000000;/*延时*/Delay(1000000);}return 0;
}
#endif#if 0
typedef struct
{unsigned int CON;unsigned int DAT;unsigned int PUD;unsigned int DRV;
}gpx2;#define GPX2 (*(gpx2 *)0x11000c40)int main()
{GPX2.CON = 0x10000000;while(1){/*点亮LED2*/GPX2.DAT = 0x00000080;/*延时*/Delay(1000000);/*熄灭LED2*/GPX2.DAT = 0x00000000;/*延时*/Delay(1000000);}return 0;
}
#endif#if 0
#include "exynos_4412.h"int main()
{GPX2.CON = 0x10000000;while(1){/*点亮LED2*/GPX2.DAT = 0x00000080;/*延时*/Delay(1000000);/*熄灭LED2*/GPX2.DAT = 0x00000000;/*延时*/Delay(1000000);}return 0;
}
#endif#include "exynos_4412.h"int main()
{GPX2.CON = GPX2.CON & (~(0xF << 28)) | (0x1 << 28);while(1){/*点亮LED2*/GPX2.DAT = GPX2.DAT | (1 << 7);/*延时*/Delay(1000000);/*熄灭LED2*/GPX2.DAT = GPX2.DAT & (~(1 << 7));/*延时*/Delay(1000000);}return 0;
}
Tips:
/** 1.unsigned int a; 将a的第3位置1,其他位保持不变* 	******** ******** ******** ********* 	******** ******** ******** ****1**** 	00000000 00000000 00000000 00001000** 	a = a | (1 << 3);** 2.unsigned int a; 将a的第3位置0,其他位保持不变* 	******** ******** ******** ********* 	******** ******** ******** ****0**** 	11111111 11111111 11111111 11110111** 	a = a & (~(1 << 3));** 	3.unsigned int a; 将a的第[7:4]位置为0101,其他位保持不变* 	******** ******** ******** ********* 	******** ******** ******** 0101****** 	1).先清零* 	11111111 11111111 11111111 00001111* 	00000000 00000000 00000000 11110000*  00000000 00000000 00000000 00001111** 	a = a & (~(0xF << 4));** 	2).再置位* 	00000000 00000000 00000000 01010000* 	00000000 00000000 00000000 00000101** 	a = a | (0x5 << 4);** 	=> a = a & (~(0xF << 4)) | (0x5 << 4);*/