基于我原先有STM32等单片机的基础,内容是结合我所新学习到的知识进行书写,所以基础知识可能不会涉及到请见谅。
一、LED点亮
我们直接通过C程序对寄存器进行操作(汇编语言使用尽量少),通过原理图可看出开发板上的LED对应的GPIO口为GPF4、5、6,所以这里首先以GPF4对应的LED进行点亮,从芯片手册寻找GPF4对应的寄存器(I/O port 章节),就可以看到S3C2440芯片控制IO口对应的寄存器为下图所示:
GPIO寄存器
然后就是和单片机操作一样,对他进行一一设置,对于LED的电量只要利用GPFCON和GPFDAT寄存器这两就行,
1. 首先对GPFCON进行设置,查找GPFCON表找到GPF4,如下所示:
很简单,我们的IO口只是要做输出,所以我们设置为01=output:
GPFCON &= ~(3 << 8); // 初始化 00
GPFCON |= (1 << 8); // 设置GPF4的GPFCON寄存器 01 输出
其中GPFCON为宏定义,代表GPFCON的地址,以及其他寄存器的定义类似如下所示
#defind GPFCON *(volatile unsigned int *)(0x56000050)
2、接着设置GPFDAT,由于我们使用的是输出引脚,所以对应的位应该置1,这从芯片手册上简介就可以看出
不做过多的解释,看就行了,然后配置他
GPFDAT &= ~(7 << 4);
GPFDAT |= (6 << 4); // GPF4对应的位 置0
最后来看下LED点亮的main程序
#define GPFCON *(volatile unsigned int *)(0x56000050)
#define GPFDAT *(volatile unsigned int *)(0x56000054)
int main(void)
{
GPFCON &= ~(3 << 8); // 初始化 00
GPFCON |= (1 << 8); // 设置GPF4的GPFCON寄存器 01 输出
GPFDAT &= ~(7 << 4); // 全部IO口初始化不输出
GPFDAT |= (6 << 4); // GPF4对应的位 置1
return 0;
}
然后配套上章节中的Strat.S文件,在程序的结尾上引用该main函数就可以实现LED的点亮了
二、LED流水灯
在单片机中的流水灯是通过delay函数(在函数中疯狂循环)。所以通过小小的改动即可实现流水灯操作
#include "s3c2440_soc.h"
void my_delay(volatile int d)
{
while(d--);
}
int main(void)
{
uart0_init();
int val =0x0001;
GPFCON &= ~((3 << 8) | (3 << 10) | (3 << 12));
GPFCON |= ((1 << 8) | (1 << 10) | (1 << 12));
while(1)
{
GPFDAT &= ~(7 << 4);
GPFDAT |= (val << 4);
val = val << 1;
if(val == 0x8)
val = 0x0001;
my_delay(300000);
}
return 0;
}
烧入程序运行现象为两个灯轮流闪烁。可以动手试试改为单个灯闪烁。太晚了在这里我就不试了。
上一篇:S3C2440 开发板实战(5):定时器中断
下一篇:S3C2440 开发板实战(2):start.S初认识 + SDRAM配置 + 重定位
推荐阅读最新更新时间:2024-11-01 20:20
设计资源 培训 开发板 精华推荐
- 使用 CAT4106 6W 四通道 DC/DC LED 驱动器的一串 LED 应用电路
- MIC69101YML EV 评估板,用于低输入电压、低输出电压、1A LDO 稳压器
- 使用 ROHM Semiconductor 的 BU4939 的参考设计
- LTC2272IUJ 演示板,16 位,65Msps 串行 ADC,1MHz
- 使用 Analog Devices 的 LT1247CS8 的参考设计
- 开源CNC控制器,原理图和PCB
- 使用 Analog Devices 的 AD9834BRU 的参考设计
- LTC3631EMS8E、5V、100mA 降压转换器的典型应用电路
- 【训练营】物联网时钟_592780A
- LTC4367IMS8 过压电源控制器的典型应用