天嵌 ARM开发社区

 找回密码
 注册
查看: 2435|回复: 6

2440的启动代码疑惑

[复制链接]
albert 发表于 2010-11-29 16:45:48 | 显示全部楼层 |阅读模式
我对启动代码中2440init.s  中关联的2440addr.h 和2440addr.inc 有点弄糊涂了,这两个文件有什么区别呢?主要是2440addr.inc 不太理解。

我在本论坛看到有一个关于流水灯的简单代码,其中 main函数为:
#include <stdio.h>
#define GPBCON (*(volatile unsigned *)0x56000
#define GPBDAT (*(volatile unsigned *)0x56000014)
010)
void delay()
{
        int i=90000;
        for(i;i>=0;i--);       
}
int main()
{
        GPBCON=0x155500;       
        while(1)
        {
                GPBDAT=0x1c0;
                delay();
                GPBDAT=0x1a0;
                delay();
                GPBDAT=0x160;
                delay();
                GPBDAT=0xe0;
                delay();
        }
}
2440init.s文件内容为:
WTCON EQU 0x53000000
GPBCON EQU 0x56000010
GPBDAT EQU 0x56000014

        IMPORT main

        CODE32
        AREA Init,CODE,READONLY
       
        ;ENTRY
       
        ldr r0,=WTCON
        ldr r1,=0x00
        str r1,[r0]
       
        b main
这主要问题是我在TQ2440开发板看到的2440addr.inc 与2440addr.h所定义的符号是不同的,
如 在2440addr.inc 中:BWSCON     EQU   0x48000000  
而在2440addr.h 为:#define rBWSCON    (*(volatile unsigned *)0x48000000)

而上面的流水灯的宏定义的符号都相同的,即#define GPBCON (*(volatile unsigned *)0x56000中的“GPBCON” 与 GPBCON EQU 0x56000010中的“GPBCON”,
下载到板能看到流水灯,这是巧合吧,还是真的没问题?
吕氏春秋8266 发表于 2010-11-29 17:43:53 | 显示全部楼层
一个用于汇编,一个用于C
 楼主| albert 发表于 2010-11-30 09:20:00 | 显示全部楼层
那么如果他们宏定义的符号都相同,是错误的,还是正确的呢?我认为是错误的
天嵌_support1 发表于 2010-11-30 12:31:05 | 显示全部楼层
1# albert



没有问题的,各有个的调用。访问的寄存器地址是一样的
freenl 发表于 2011-1-5 23:31:32 | 显示全部楼层
3# albert


用的符号不一样啊……
.h的以r开头,.inc的没有r
天嵌_support1 发表于 2011-1-6 10:59:44 | 显示全部楼层
:)
mydream0110 发表于 2011-12-19 20:44:25 | 显示全部楼层
学习了,以前没有想到这.让我想起汇编中有这个: ldr r0,=标号,这个应该就是寄存器地址在汇编中使用的方法吧.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-21 05:14 , Processed in 1.046875 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表