历史上的今天
今天是:2024年10月14日(星期一)
2018年10月14日 | JZ2440裸板之GPIO操作启动分析
2018-10-14 来源:eefocus
启动文件crt0.S源码:
//******************************************************************************
// File:crt0.S
// 功能:通过它转入C程序
//******************************************************************************
.text
.global _start
_start:
ldr r0, =0x53000000 // WATCHDOG寄存器地址
mov r1, #0x0
str r1, [r0] // 写入0,禁止WATCHDOG,否则CPU会不断重启
// 其实复位之后,CPU就处于管理模式(svc)
ldr sp, =1024*4 // 设置堆栈,注意:不能大于4k, 因为现在可用的内存只有4K
// nand flash中的代码在复位后会移到内部ram中,此ram只有4K
bl main // 调用C程序中的main函数
halt_loop:
b halt_loop
=====================================================================
leds.c源码:
#define GPFCON (*(volatile unsigned long *)0x56000050)
#define GPFDAT (*(volatile unsigned long *)0x56000054)
#define GPF4_out (1<<(4*2))
#define GPF5_out (1<<(5*2))
#define GPF6_out (1<<(6*2))
void wait(volatile unsigned long dly)
{
for(; dly > 0; dly--);
}
int main(void)
{
unsigned long i = 0;
GPFCON = GPF4_out|GPF5_out|GPF6_out; // 将LED1,2,4对应的GPF4/5/6三个引脚设为输出
while(1){
wait(30000);
GPFDAT = (~(i<<4)); // 根据i的值,点亮LED1,2,4
if(++i == 8)
i = 0;
}
return 0;
}
====================================================================
Makefile文件:
CFLAGS := -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -ffreestanding
leds.bin : crt0.S leds.c
arm-linux-gcc $(CFLAGS) -c -o crt0.o crt0.S //-c只编译不链接
arm-linux-gcc $(CFLAGS) -c -o leds.o leds.c
#arm-linux-ld -Ttext 0x0000000 crt0.o leds.o -o leds_elf //直接指定代码段链接地址为0
arm-linux-ld -Tleds.lds crt0.o leds.o -o leds_elf //使用leds.lds链接文件
arm-linux-objcopy -O binary -S leds_elf leds.bin //编译出二进制文件
arm-linux-objdump -D -m arm leds_elf > leds.dis //反汇编出leds.dis,-m机器类型arm板
clean:
rm -f leds.dis leds.bin leds_elf *.o
=====================================================================
链接文件leds.lds:
SECTIONS {
. = 0x00; //链接地址为0,注意此处"."和"="之间必须有空格隔开,否则编译出错
.text : { *(.text) } //先存放代码段
.rodata ALIGN(4) : {*(.rodata)} //再存放只读数据段
.data ALIGN(4) : { *(.data) } //数据段
.bss ALIGN(4) : { *(.bss) *(COMMON) } //bss段
}
====================================================================
测试:
把程序放到服务器上直接执行make指令进行编译,把编译出来的leds.bin文件烧写到开发板的nand flash上面即可运行看结果。
启动nor/nand flash上的u-boot,在u-boot界面输入n,用dnw工具把.bin文件烧写到nand flash上的0地址处即可;也可以在u-boot启动时用命令nfs、tftp命令把.bin文件烧写到内存0x30000000处,再用bootm命令跳转过去运行,但是此方法重启后代码消失。
史海拾趣
|
本帖最后由 paulhyde 于 2014-9-15 09:09 编辑 比赛时会用到的 [ 本帖最后由 燕子宝贝 于 2009-9-1 21:01 编辑 ] … 查看全部问答> |
|
.Net Compact Framework 1.1中有没有获得当前线程ID的方法? .Net Compact Framework 1.1中有没有获得当前线程ID的方法? 完全版中倒是有AppDomain.GetCurrentThreadID() coredll.dll中有没有我也不知道。 哪位大虾帮帮我啊~… 查看全部问答> |
|
大家好,刚刚学习nucleus plus 操作系统,不知道从何开始,请大家指点或给点nucleus plus操作系统资料,谢谢!我的邮箱 wlh1211@126.com QQ:276765591… 查看全部问答> |
|
使用EP2C35 FPGA 设计了多个串口工作,出现了几个问题. 第一次, 由于内核电源1.2V 供电不是完整平面,而是带状线供电,EP2C35 在代码容量大的情况下,而且输入FPGA 信号变换频繁, 造成整个EP2C35 所有的D触发器停止翻转. 经过多次验证, 只要输入 ...… 查看全部问答> |
|
前言 LED(发光二极管)是目前发展最为迅猛的产业之一,其高亮度、低能耗、长寿命的特点在各领域广泛应用,也被认为最有前途的产业之一。但是LED的光电学特性差异经常导致多个LED组合(LED屏)出现亮度和颜色不一致,破坏白平衡,降低显示质 ...… 查看全部问答> |
|
问题有点白痴。。。不好意思去问老师,特地在此求助。 实例程序编译通过了,但调试会提示USB FET找不到。。不知哪里出了问题。。usb选的是左下角的,可是连上电脑后电脑都没反应,只有供电的作用。。。求帮忙啊,,,… 查看全部问答> |
|
又来送书啦!一本《精通开关电源设计(中文版)》续2 这本虽不是最最流行的开关电源设计的书,但做为普及了解开关电源的原理和基础知识,绝对是一本值得看的书,,大家收藏吧,, … 查看全部问答> |
|
这首先登录网站http://www.ti.com.cn/lsds/ti_zh/analog/webench/overview.page 填写你需要的一些设计条件 1.进入TI主页,输入相关参数 点击开始设计,选择compare all 2、选择其中一款IC的方案 3、查看BOM表 4、查看整个设计的图标 ...… 查看全部问答> |




