FL2440裸机开发之LED

12 篇文章 0 订阅
5 篇文章 0 订阅

由于是开发裸机下LED程序,所以首先查找开发板手册,手册上并没有提到,所以接着查找到开发板底板原理图,找到了相应的led连接图。

             

之后在开发板核心板芯片S3C2440手册上找到与之对应的引脚描述

继续往下翻,找到了对应的寄存器映射址

  










 


这样一些基础的工作就准备好了,接下来就是编程了

#define GPBCON   (*(unsigned long volatile *)0x56000010)
#define GPBDAT   (*(unsigned long volatile *)0x56000014)
#define GPBUP    (*(unsigned long volatile *)0x56000018)

#define LED0     5    /*LED0 use GPB5*/
#define LED1     6    /*LED1 use GPB6*/
#define LED2     8    /*LED2 use GPB8*/
#define LED3     10   /*LED3 use GPB10*/

#define DELAY_TIME   20000000

static inline void delay (unsigned long loops)
{
    __asm__ volatile ("1:\n"
        "subs %0, %1, #1\n"
        "bne 1b":"=r" (loops):"0" (loops));
}

int main(void)
{
    /*  Set GPB5,GPB6,GPB8,GPB10 as GPIO mode(0x01) */ 
    GPBCON = (GPBCON|0x333C00)&0x111400;
    GPBUP = (GPBUP | 0x560);

    while(1)
    {
        /* Set GPB5,GPB6,GPB8,GPB10 as high level, to turn LED0,LED1,LED2,LED3 off */
        GPBDAT = (GPBDAT | 0x560);
        delay(DELAY_TIME);

        /* Turn LED0 on */
        GPBDAT = (GPBDAT & (~(1<<LED0)) );
        delay(DELAY_TIME);

        /* Turn LED1 on */
        GPBDAT = (GPBDAT & (~(1<<LED1)) );
        delay(DELAY_TIME);

        /* Turn LED2 on */
        GPBDAT = (GPBDAT & (~(1<<LED2)) );
        delay(DELAY_TIME);

        /* Turn LED3 on */
        GPBDAT = (GPBDAT & (~(1<<LED3)) );
        delay(DELAY_TIME);
    }
}

在linux下编译的文件为.elf文件,而作为裸机的fl240并不会识别出来,所以需要转成二进制可执行文件。

所以这里需要连接脚本.lds文件:

OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(main)

SECTIONS{
    . = 0x33000000;
    .text : {
        *(.text)
        *(.rodata)
    }

    .data ALIGN(4): {
        *(.data)
    }

    .bss ALIGN(4): {
        *(.bss)
    }
}

当然makefile也少不了的


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值