2017/9/18
知识点:
参考手册->
(小小的举个例子 不完全 详细的查3SC2451的手册)
Register Address R/W Description
GPACON 0x56000000 R/W Configures the pins of port A
GPADAT 0x56000004 R/W The data register for port A
Reserved 0x56000008 − − −
Reserved 0x5600000c − − −
控制寄存器解释->
(小小的举个例子 不完全 详细的查3SC2451的手册)
GPACON 控制GPIO的输入/输出
GPADAT 控制输入/输出的是高/低电平
GPACON 1 bit控制一个管脚
GPBCON 2 bit控制一个管脚
我的S3C2451原理图上->
(小小的举个例子 不完全 详细的查3SC2451的原理图)
LED1/GPB5 输出 低电平导通
LED2/GPB6 输出 低电平导通
LED3/GPA25 输出 低电平导通
LDE4/GPA26 输出 低电平导通
代码如下:
封装->
S3C2451_led.h
#ifndef _S3C2451_LED_H
#define _S3C2451_LED_H
#define GPACON (*(volatile unsigned long*)0x56000000)
#define GPADAT (*(volatile unsigneong*)0x56000004)
#define GPBCON (*(volatile unsigned long*)0x56000010)
#define GPBDAT (*(volatile unsigned long*)0x56000014)
#define GPBUDP (*(volatile unsigned long*)0x56000018)
#define GPBSEL (*(volatile unsigned long*)0x5600001C)
#define LEDA_ON(i) GPADAT &=~(0x3<<i)
#define LEDA_OFF(i) GPADAT |=(0X3<<i)
#define LEDB_ON(i) GPBDAT &=~(0X3<<i)
#define LEDB_OFF(i) GPBDAT |=(0X3<<i)
extern void LED_INIT(void);
#endif
对上面封装代码的解释 ->
第一部分 宏定义GPA GPB的相关寄存器
第二部分 声明LED亮灭函数
第三部分 extern 表征着其他模块也可以使用void LED_INIT(void)函数
S3C2451_led.c
#include "s3c2451_led.h"
void LED_INIT(void)
{
GPACON &=~(0X3<<25);
GPBCON &=~(0Xf<<10);
GPBCON |= (0X5<<10);
}
main.c
#include "main.h"
void delay_ms(unsigned int xms)
{
unsigned int j;
for(;xms>0;xms--)
{
for(j=500;j>0;j--);
}
}
void Main(void)
{
LED_INIT();
while(1)
{
LEDA_ON(25);
delay_ms(500);
LEDA_OFF(26);
delay_ms(500);
LEDB_ON(5);
delay_ms(500);
LEDB_OFF(6);
delay_ms(500);
}
题目实践:
以上代码为 用arm9 s3c2451 实现四个led灯的点亮
请再实现 四个灯的循环点亮 -> 通过KEY1按键控制LED1亮灭 ->通过
收发信息 控制LED1亮灭