三星6818基于uboot的流水灯程序

查阅芯片资料获取寄存器信息

在这里插入图片描述

  1. 查看文档目录查找到gpio功能相应模块
    在这里插入图片描述
  2. 找到配置gpio的方法
    在这里插入图片描述
  3. 找到对应的寄存器配置地址
    1)这个是我们要用到的寄存器图表
    在这里插入图片描述
    2)这个是gpio复用功能寄存器,由两位比特位还选择不同的复用功能,至于功能0~3分别是什么还需查相关资料这里就不多解释了
    在这里插入图片描述
    3)这是我们的输出输入使能寄存器
    在这里插入图片描述
    4)这是我们要输出高低电平的寄存器
    在这里插入图片描述
    5)还要参考原理图
    在这里插入图片描述

编写源码

有了资料和配置方法,现在我们附上源码让D7灯亮起来~~

//1.定义寄存器
#define GPIOEOUT 		(*(volatile unsigned int *)0xC001E000)
#define GPIOEOUTENB 	(*(volatile unsigned int *)0xC001E004)
#define GPIOEOUTALTFN0 	(*(volatile unsigned int *)0xC001E020)
#define GPIOEOUTALTFN1 	(*(volatile unsigned int *)0xC001E024)

static void delay(void);

//2.c程序的入口,同时不使用标准的c库,因此入口函数名字为_start

void _start(void)
{
	
	//配置GPIOE13为输出模式
	GPIOEOUTALTFN0&=~(3<<26);	//GPIOE13的多功能配置[27:26]清零
	
	
	//允许GPIOE13输出电平
	GPIOEOUTENB|=1<<13;			
	
	while(1)
	{
		
		//点亮
		GPIOEOUT&=~(1<<13);
		
		//延时一会
		delay();
		
		//熄灭
		GPIOEOUT|=1<<13;
		
		//延时一会
		delay();
	}
}

void delay(void)
{
	//思考为什么要加volatile
	volatile unsigned int i=0x2000000;
	
	while(i--);
}
  1. 写完代码之后,我们就来编译,因为我们这个程序要在开发板运行,所以要用板子的交叉编译工具编译用gcc是不行的
1.检查ubuntu是否有交叉编译器。

jiba@ubuntu:~$ which arm-linux-gcc
/usr/local/arm/5.4.0/usr/bin/arm-linux-gcc

2.进入共享目录去编译led_demo1裸机程序。

1)将led.c编译为目标文件led.o,且不使用标准c的库
arm-linux-gcc -o led.o -c led.c -nostdlib

2)将led.o链接到内存地址0x40000000,输出新的执行程序为led.elf
arm-linux-ld -Ttext 0x40000000 -o led.elf led.o


3)由于uboot不是linux操作系统,它不具有运行应用程序的能力,需要转换为bin文件。
arm-linux-objcopy -O binary led.elf led.bin
  1. 完了之后呢我们用tftp把led.bin下载到uboot(开发板开机后用SecureCRT工具5秒内按任意键进入uboot,然后用ifconfig 192.168.1.110和setenv serverip 192.168.11.3命令修改你ip地址和服务器地址,知道你在开发板能用ping命令ping你电脑成功为止)
#tftp 文件名 内存地址
#tftp led.bin 0x40000000
//这里电脑端要用到个tftp工具可以找我拿(SecureCRT工具也可找我),微信:a812417530
  1. 执行某地址存在的二进制文件
 #go 内存地址
#go 0x40000000
##Starting application at 0x40000000 ...
  1. 结果
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

I&You

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值