arm mini2440的led灯总结

led灯例子
一、led电路图

-----------------------------------------
二、手册说明
这里对应s3c2440文档,第9章io部分的文档找到GPB部分





GPBCON
GPB0-10用于设置输入、输出、和其他特殊属性

GPBDAT
这里的11位对应GPB0-10 用于控制高低电平

GPBUP
是端口上拉寄存器 端口上拉寄存器控制着每个端口组的上拉寄存器的使能或禁止,当对应bit为0,这个引脚的上拉寄存器是允许的,当为1时,上拉寄存器是禁止的。
=====================
三、分析代码
/*
* 功能:实现LED1灯循环亮灭
* LED1--GPB5
* LED2--GPB6
* LED3--GPB7
* LED4--GPB8
*/
#define rGPBCON (*(volatile unsigned long*)0x56000010)
#define rGPBDAT (*(volatile unsigned long*)0x56000014)
#define Led1_On ~(1<<5)
#define Led1_Off (1<<5)

void Led_Port_Init(void);
void delay(int i);

int main(void) {
Led_Port_Init();
while (1) {
  //Led1亮
  rGPBDAT &= Led1_On;
  delay(10000);
  //Led1灭
  rGPBDAT |= Led1_Off;
  delay(10000);
}
}
/*
* 函数名称:Led_Port_Init()
* 全局变量:无
* 参 数:无
* 返 回 值:无
* 说 明:实现Led1灯的寄存器初始化
*/
void Led_Port_Init(void) {
//设置GPB5为输出端口
rGPBCON &= ~(3 << 10);
rGPBCON |= (1 << 10);
}
/*
* 函数名称:delay(int t)
* 全局变量:无
* 参 数:t
* 返 回 值:无
* 说 明:延时函数
*/
void delay(int t) {
int a, b;
for (a = 0; a <= i; a++)
  for (b = 0; b <= 100; b++)
   ;
}
------------------------------------
分析
1、*(volatile unsigned long*)0x56000010
volatile unsigned long *表示将后面跟的内容转化成一个指针,并且是指向一个易变的无符号整数。
左边再加个*,表示取该指针指向地址的内容

#define rGPBCON (*(volatile unsigned long*)0x56000010)
#define rGPBDAT (*(volatile unsigned long*)0x56000014)
这个宏用于定义GPBCON,GPBDAT地址(值对应手册中的值)
---------
这个方法用于初始化
void Led_Port_Init(void) {
//设置GPB5为输出端口
     rGPBCON &= ~(3 << 10);    //这个设置为输入

     rGPBCON |= (1 << 10);        //这个设置为输出

}
---------
#define Led1_On ~(1<<5)    //因为是GBP5所以左移5位
#define Led1_Off (1<<5)
while (1) {
  //Led1亮
  rGPBDAT &= Led1_On;
  delay(10000);
  //Led1灭
  rGPBDAT |= Led1_Off;
  delay(10000);
}
这里修改GPBDAT来控制灯的开启和关闭

=====================

你可能感兴趣的:(c,ARM,s3c2440手册,led,mini2440)