S5P4418裸机开发(二):LED点灯

板子型号:友善之臂Smart4418
板子原理图:Smart-1608
S5P4418芯片手册:Pi2_SOC_DS_0.1.pdf


查看原理图:

PDF中搜LED;
这里写图片描述
这里写图片描述
以LED1为例,连接引脚是W24(GPIOB12),低电平点亮;


芯片手册

第15.3.2节,对引脚输出模式的描述;
这里写图片描述
大致意思是

  • 配置GPIOx. Alternate Function Select register(GPIOxALTFN0 or GPIOxALTFN1) 寄存器来选择引脚的功能;
  • GPIOx Output Enable register(GPIOxOUTENB) 寄存器使能输出;
  • GPIOx Output Register (GPIOxOUT) 寄存器控制引脚输出高低电平;
  • 第三段还不太懂,开漏输出模式的几个引脚只有在GPIOxOUT设置为0时才起作用,即使GPIOxOUTENB使能为输入;

第2.3节,I/O功能描述
这里写图片描述
选择Alternate Function 2(交错函数2?)才当做普通io口GPIOB12使用,参考32里面的复用功能;

第15.4.1.8节,寄存器GPIOxALTFN0的说明:
这里写图片描述
这里写图片描述
这里写图片描述
寄存器地址描述的有点小模糊;比如GPIOxALTFN0,按手册的说法应该是0xC001B000 + 0xB020 = 0xC0026020,但正确的应该是0xC001B020(0xC0010000 + 0xB020);
GPIOxALTFN0[25:24] 配置为10;
 
 
GPIOxOUTENB寄存器说明:
这里写图片描述

GPIOxOUT寄存器说明:
这里写图片描述

敲代码

三个文件;

//main.c 主程序

#define uint            unsigned int
#define GPIOBAddr       0xC0010000

#define GPIOBALTFN0     (*(volatile uint *)(GPIOBAddr + 0xB020))
#define GPIOBALTFN1     (*(volatile uint *)(GPIOBAddr + 0xB024))

#define GPIOBOUTENB     (*(volatile uint *)(GPIOBAddr + 0xB004))
#define GPIOBOUT        (*(volatile uint *)(GPIOBAddr + 0xB000))


void init(){
    GPIOBALTFN0 |= (2 << 24);
    GPIOBOUTENB |= (1 << 12);
    GPIOBOUT |= (1 << 12);
}

void led_on(){
    GPIOBOUT &= ~(1 << 12);
}

void led_off(){
    GPIOBOUT |= (1 << 12);
}

void delay(uint t){
    while(t--);
}

int main(){
    init();

    while(1){
        led_on();
        delay(2000000);
        led_off();
        delay(2000000);
    }
    return 0;
}
//start.s 启动文件

.text
.global _start

_start:
    b start

    start:
        b main
//Makefile

default:
    arm-linux-gcc -c start.s -o start.o
    arm-linux-gcc -c main.c -o main.o
    arm-linux-ld -Ttext=0x42C00000 start.o main.o -o main.elf
    arm-linux-objcopy -I elf32-littlearm -Obinary main.elf main.bin

clean:
    rm *.bin *.o *.elf

ld 链接地址为0x42C00000;这个地址有点小讲究;
make后生成的main.bin文件就是我们要的裸机程序;

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值