S3C2440 开发板实战(3):编译概念 + LED点亮闪烁

基于我原先有STM32等单片机的基础,内容是结合我所新学习到的知识进行书写,所以基础知识可能不会涉及到请见谅。

一、LED点亮

我们直接通过C程序对寄存器进行操作(汇编语言使用尽量少),通过原理图可看出开发板上的LED对应的GPIO口为GPF4、5、6,所以这里首先以GPF4对应的LED进行点亮,从芯片手册寻找GPF4对应的寄存器(I/O port 章节),就可以看到S3C2440芯片控制IO口对应的寄存器为下图所示:

GPIO寄存器
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;
}

烧入程序运行现象为两个灯轮流闪烁。可以动手试试改为单个灯闪烁。太晚了在这里我就不试了。

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值