搜索
bottom↓
楼主: xiangyuan_122

ARM从零开始学--点灯^_^

[复制链接]

出0入0汤圆

发表于 2009-1-31 20:11:33 | 显示全部楼层
很支持楼主的点灯的这种先驱精神!

我也很希望能像楼主一样,带领我们协会一起前进,可有时却感到力不从心,毕竟大家都是自学遇到困难也很多。。



希望能一直看到你点的灯,也希望有更多人加入你的行列!



arm其实不难,贵在坚持!



我在学习uc/os-2,希望以后多交流!

我的qq:824340139

出0入0汤圆

发表于 2009-2-20 00:12:06 | 显示全部楼层
不错,值得学习。

出0入0汤圆

 楼主| 发表于 2009-2-20 16:28:39 | 显示全部楼层
丢了好多 附件也还有 不知还能不能恢复

出0入0汤圆

发表于 2009-2-24 16:19:00 | 显示全部楼层
顶一下,不错的东东。

出0入0汤圆

发表于 2009-2-24 16:30:59 | 显示全部楼层
楼主,期盼你的再次到来,呵呵。
能不能详细解释一下启动文件!!!

IMPORT    |Image$$ZI$$Base|
IMPORT    |Image$$ZI$$Limit|
这是什么语法啊?
ZI区是怎么定义的呢?

出0入0汤圆

发表于 2009-3-7 14:38:56 | 显示全部楼层
学习中

出0入0汤圆

发表于 2009-3-20 22:17:40 | 显示全部楼层
....学习

出0入0汤圆

发表于 2009-3-24 21:36:44 | 显示全部楼层
呵呵,很低幼的说

帮顶

要是2440点灯这么简单多好啊

出0入0汤圆

发表于 2009-3-26 10:11:26 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-3-26 10:33:23 | 显示全部楼层
MARK

出0入0汤圆

发表于 2009-3-31 23:25:05 | 显示全部楼层
记号先,顶楼主

出0入0汤圆

发表于 2009-4-1 00:49:17 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-4-2 15:02:38 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-4-7 17:20:04 | 显示全部楼层
终于找到适合新手学习的程序了

出0入0汤圆

发表于 2009-4-10 11:44:15 | 显示全部楼层
楼主:
   可以在config.h和LPC2124.两个头文件中作一些批注吗?在代码后面加一些批注。因为我ARM还没入门,所以看不懂这些ARM的头文件。

出0入0汤圆

发表于 2009-4-10 11:46:00 | 显示全部楼层
最好 在C语言的代码里加。汇编不懂

出0入0汤圆

发表于 2009-4-11 17:20:48 | 显示全部楼层
我proteus有正面问题  1。   1.8V Vore'(0.00v)is outside specified range(1.65v-1.95v)
2.                         3.3v VDD (5.00v)is outside specified range(3v-3.6v)
如何在这里面修改电源电压值??

出0入0汤圆

发表于 2009-4-14 08:40:25 | 显示全部楼层
向楼主学习

出0入0汤圆

发表于 2009-4-15 20:30:54 | 显示全部楼层
支持

出0入0汤圆

 楼主| 发表于 2009-4-16 10:51:56 | 显示全部楼层
【104楼】 dgdzor
积分:15
派别:
等级:------
来自:
楼主,期盼你的再次到来,呵呵。
能不能详细解释一下启动文件!!!

IMPORT    |Image$$ZI$$Base|
IMPORT    |Image$$ZI$$Limit|
这是什么语法啊?
ZI区是怎么定义的呢?  
---------------------------------------------------------------
IMPORT是个导入的指令 和C语言的include 差不多 ZI是区时初始化为0的存储区域 如果有 跟在RW后面的 详细点的可以看看 杜云海 的 ARM映像文件及执行机理  

映象文件及执行机理-杜云海ourdev_436802.pdf(文件大小:2.34M) (原文件名:ARMtLoader.pdf)

【107楼】 csformat
积分:121
派别:
等级:------
来自:
呵呵,很低幼的说

帮顶

要是2440点灯这么简单多好啊  
-------------------------------------------------------------------
呵呵 是比较低幼 2440点灯也这就这么简单
你将程序烧进NOR FLASH 选择重NOR启动 一样的 当然 你IO口的端口地址要做相应的改变 还有 编译选项要注意


【116楼】 wuyingsheng
积分:10
派别:
等级:------
来自:
我proteus有正面问题  1。   1.8V Vore'(0.00v)is outside specified range(1.65v-1.95v)
2.                         3.3v VDD (5.00v)is outside specified range(3v-3.6v)
如何在这里面修改电源电压值??
-------------------------------------------------------------------------------------------------
  这个估计是你接的电源有点问题 双击电源上面的数字可以改电源值 正电源要加个+号前面哦

   config.h和LPC2124.h 如果看不懂 就多看看书吧

出0入0汤圆

发表于 2009-4-16 13:52:56 | 显示全部楼层
太感谢你了。。。

出0入0汤圆

发表于 2009-4-16 15:05:14 | 显示全部楼层
现在大家用keil的很多,以至于普遍教材上都是ads的情况下入门有点麻烦。。。

出0入0汤圆

发表于 2009-4-16 16:00:50 | 显示全部楼层
DELAY     
    MOV R0,#100
0
    MOV R1,#1000
1
    SUBS R1,R1,#1
    BNE %B1
    SUBS R0,R0,#1
    BNE %B0
     
    MOV PC,LR

这段delay函数里第三行那个0和第四行那个1是什么意思?还有那个%b1,%b0是什么意思。请指教以下,谢谢啦!!

出0入0汤圆

 楼主| 发表于 2009-4-17 09:37:51 | 显示全部楼层
【122楼】 squallssck
积分:3
派别:
等级:------
来自:
DELAY      
    MOV R0,#100  
0  
    MOV R1,#1000  
1  
    SUBS R1,R1,#1  
    BNE %B1  
    SUBS R0,R0,#1  
    BNE %B0  
      
    MOV PC,LR  

这段delay函数里第三行那个0和第四行那个1是什么意思?还有那个%b1,%b0是什么意思。请指教以下,谢谢啦!!  
----------------------------------------------------------------------------------------------------------
局部标号
*主要有两部分组成:开头时一个0~99之间的数字。后面紧跟一个通常表示
该局部变量作用范围的符号。
*局部标号的作用范围通常为当前段,也可用伪操作ROUT来定义局部变量的
作用范围。
语法格式:
N{routname}
*N为0~99之间的数字。
*routname为符号,通常为该变量作用范围的名称(用ROUT伪操作定义的)。
局部变量引用的语法格式如下:
%{F|B}{A|T} N{routname}
其中:
routname为当前作用范围的名称(用ROUT伪操作定义的)。
%表示引用操作。
F指示编译器只向前搜索。
B指示编译器只向后搜索。
A指示编译器搜索宏的所有嵌套层次。
T指示编译器搜索宏的当前层次。
*如果F和B都没有指定,编译器先向前搜索,再向后搜索。
*如果F和T都没有指定,编译器搜索所有从当前层次到宏的最高层次,
比当前层次低的层次不再搜索。
*如果指定了routname,编译器向前搜索最近的ROUT伪操作,若routname
与该ROUT伪操作定义的名称不匹配,编译器报错,汇编失败。

参考 ARM体系结构与编程4.3.1 ourdev_437246.pdf(文件大小:18.12M) (原文件名:ARM体系结构与编程.pdf)

出0入0汤圆

发表于 2009-4-20 16:33:58 | 显示全部楼层
楼主:本人也是ARM的爱好者,现在准备学习中,能否加下QQ,到时有问题请教下啊。438982473

出0入0汤圆

发表于 2009-4-20 18:49:56 | 显示全部楼层
留名贴。强。

出0入0汤圆

发表于 2009-4-21 16:32:34 | 显示全部楼层
强人

出0入0汤圆

发表于 2009-4-22 00:51:45 | 显示全部楼层
膜拜中

出0入0汤圆

发表于 2009-4-23 18:05:38 | 显示全部楼层
我是刚学的,我在Keil中都还不会用来编译ARM,我下来了楼主给的例子,就是点灯的,编译出现下面的错误,我不知道是什么原因,楼主能否帮我指点已而啊,谢谢啦!~!~!


(原文件名:01.JPG)

出0入0汤圆

 楼主| 发表于 2009-4-23 20:42:26 | 显示全部楼层
keil下点灯的工程文件ourdev_439181.rar(文件大小:78K) (原文件名:keilarm2.rar)
你看看这个 ADS下的程序转到KEIL有些变化

出0入0汤圆

 楼主| 发表于 2009-4-23 20:48:59 | 显示全部楼层
还是开始的点灯程序,最最简单的,全汇编的,不需要别的设置,直接拉过来用,编译通过,Proteus仿真,没问题,哈哈,以为好了呢,换C程序的,带个汇编的启动文件,问题来了,开始是error: L6236E: No section matches selector - no section to be FIRST/LAST. 什么原因呢,呵呵,原来是S文件里面的AREA    init,CODE,READONLY ;出问题了,由于选了分散加载文件,系统默认的模块是RESET,而这里是init,换掉,问题又来了 Error: L6238E: startup.o(RESET) contains invalid call from '~PRES8' function to 'REQ8' function main. 这个问题原来是(百度了一篇文章)

This RVDS/RVCT linker error is given where a stack alignment conflict is detected in object code. The "ABI for the ARM Architecture" demands that code maintains 8-byte stack alignment at its interfaces. This allows efficient use of

Symbols like '~PRES8' and 'REQ8' are "" of the objects.



This link error typically occurs in two cases:

where assembler code (that does not preserve 8-byte stack alignment) calls compiled C/C++ code (that requires 8-byte stack alignment), and
when attempting to link legacy SDT/ADS objects with RVCT 2.x objects. Legacy SDT/ADS objects that do not have these attributes are treated as '~PRES8', even if they do actually happen to preserve 8-byte alignment.
For example:


This means that there is a function in the object

A similar warning that may be encountered, where the address of an external symbol is being referred to, is:


Solutions
There are two possible approaches to dealing with this issue:

1) If you have access to all your source code and are allowed to rebuild it
In this case you should rebuild all your objects/libraries using the latest version of the compilation tools. Note that if you have any assembler files, you will need to:

i) check that all instructions preserve 8-byte stack alignment, and if necessary, correct them.
e.g. change:

to:

and:

ii) add the
e.g. change:

to:

        AREA Init, CODE, READONLY (the

2) If you cannot rebuild all of your source code
If you have any legacy objects/libraries that cannot be rebuilt, either because you do not have the source code, or because the old objects must not be rebuilt (e.g. for qualification/certification reasons), then you must inspect the legacy objects to check whether they preserve 8-byte alignment or not. Use "" to disassemble the object code. C/C++ code compiled with ADS 1.1 or later will normally preserve 8-byte alignment, but assembled code will not.

If your objects do indeed preserve 8-byte alignment, then the linker error If you are linking with legacy objects/libraries then you should also read the information on the option "" in the FAQ entry "Are legacy ADS objects/libraries compatible with RVCT 2.0 ?".

改了这个 又出现新问题了

Error: L6915E: Library reports error: scatter-load file declares no heap or stack regions and __user_initial_stackheap is not defined。由于我的S文件也是用的最简单的,堆栈指针就( LDR       SP,=0x40003F00     ; 设置堆栈指针)这样设置了,看来这样行不通了,取消分散加载选项

(原文件名:910008599706778538.jpg)
也就是Use Memory Layout from Target Dialog这个前面的勾去掉,删除Scatter File选项里的文件,就成下面的图了

(原文件名:886646176639981858.jpg)


看下面的Linker control string ,ro-base:0x00000000,entry 0x00000000 rw-base 0x40003000,就是我想要的嘛,编译,通过,哈哈,以为OK了,proteus仿真,问题来了,完全没反应啊,找原因,呵呵,还是和上次ADS的问题一样,需要在Misc controls里面写上 --first startup.o(init) ,只是设置方法不同而已,后面的startup就是S启动文件的名称啦,init是程序开始入口的模块名称,根据自己的换就是了,再编译,通过,仿真,哈哈,没问题啦

出0入0汤圆

发表于 2009-4-24 16:11:08 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-4-29 20:33:08 | 显示全部楼层
楼主我先膜拜下~能抽空帮我看个程序么?我的这个问题是程序一跑起来就进入外部中断,我设置的是下降沿触发~

#include "LPC21xx.h"


int  putchar(int p)
{
        if(p=='\n')
        {
                while(!(U0LSR & 0x20) )          ;
                return(U0THR = 0x0d)        ;
        }
        while(!(U0LSR & 0x20));
       
        return ( U0THR = p)        ;
}

void putstr(char *p)
{
       
        for(;*p!='\0';p++)
        {
                putchar(*p);
        }
/*        while(*p)
        putchar(*p++);                  */
}


void __irq IRQ_Eint1(void)
{
        int i,j;
        i = VICIRQStatus;
        putstr("DJwan\n");
       
         while((EXTINT&0x02)!=0)         
          {
                EXTINT=0x02;                 
        }
  
    VICVectAddr=0x00;
        VICVectAddr = 0;
}
int main()
{
        PINSEL0 = 0x20000005;
        VICIntSelect = 0x0;
        EXTMODE = 0x02;
        EXTPOLAR = 0x00;
        VICVectCntl1 = 0x2f;
        VICVectAddr1 = (int)IRQ_Eint1;
        U0LCR = 0x83;
        U0DLL = 97;
        U0LCR = 0x03;
       
        putstr("Hello123");
        VICIntEnable = 0x00008000;       
       
        /*for(i=0;i<15;i++)

                for(j=0;j<1000;j++);                 */
        while(1);                                                                               

  
}


Proteus 的电路图 (原文件名:未命名.jpg)

我还没有操作开关,也就是说根本没下降沿就进中断服务程序了~这是为什么啊~

出0入0汤圆

 楼主| 发表于 2009-4-30 11:11:26 | 显示全部楼层
【132楼】 djwan
积分:1
派别:
等级:------
来自:

你的程序没什么别的问题,波特率不知道你用的多少,你的U0DLL设置的97,Proteus里的串口终端默认好像是9600吧(这个可以改成对应的就行),我把这个改成0x12了。电路里 你那个和按钮串着接地的电阻100K太大了,100就可以了 不然按下也不会把IO口拉成低电平 触发不了中断
传个工程点击此处下载 ourdev_441066.rar(文件大小:59K) (原文件名:UART0.rar)

出0入0汤圆

发表于 2009-4-30 22:42:55 | 显示全部楼层
谢谢大虾这么快回复~不过咱俩的Protues版本貌似不一样,我的打不开你的dsn文件,另外,我用的是Keil编译的,我把那个电阻改成100欧了,但是还是一上来就进中断了,这个愁人啊~

出0入0汤圆

 楼主| 发表于 2009-5-1 08:31:46 | 显示全部楼层
这个不是你程序的问题吧 你的程序除了波特率设置的我改了下以对应串口终端 别的都没改  我仿真是正确的

出0入0汤圆

发表于 2009-5-1 09:17:08 | 显示全部楼层
太诡异了~Proteus里我把那个Button改成个switch就好使了~!
另外,大虾,再问个问题,这个波特率我觉得好奇怪,我在Protues里设置LPC2124的Clock是12M,我设置的U0DLL的值是按照别人的例子写的,那里面注释说VPB的频率是15M~对应的串口波特率就是9600,而如果我把LPC2124的频率改成12M,就不能正确执行了~这是为啥啊,Protues里设置的clock和Uart波特率究竟是什么关系呢?

出0入0汤圆

发表于 2009-5-2 12:04:44 | 显示全部楼层
开始学习arm了 mark

出0入0汤圆

发表于 2009-5-12 19:12:17 | 显示全部楼层
楼主 我想请教一下  看过你的程序  但是又点不解   为什么你在 Startup.s这个文件中没有用到BL        TargetResetInit这条指令
来初始化 硬件

出0入0汤圆

 楼主| 发表于 2009-5-12 20:09:49 | 显示全部楼层
......BL TargetResetInit并不是初始化硬件的指令啊 我这个硬件初始化的代码已经包含在了config.h里面 你说的这个只是周立功把硬件初始化的代码封装在这个函数里面的 叫了这个名字 并不是说这个就是初始化硬件的指令

出0入0汤圆

发表于 2009-5-20 17:08:38 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-5-21 09:46:38 | 显示全部楼层
从0地址开始放代码其实我觉得不太妥当。就算一般的51之类的单片机都会在0地址后保留中断向量地址。
在0地址放的一般是一条绝对跳转指令,跳转到真正复位程序的开始处。0x04地址后每隔一个字(4字节)存放一个中断向量,这些地址最好是保留给中断向量。不然你使用不了中断功能。
学ARM还是得先搞懂Bootloader,我也正在努力中。搞了块S3C2440的板子,刚刚学会装WINCE和LINUX.

出0入0汤圆

发表于 2009-6-1 12:19:54 | 显示全部楼层
标记一下

出0入0汤圆

发表于 2009-6-5 20:10:54 | 显示全部楼层
记号

出0入0汤圆

发表于 2009-6-12 13:49:49 | 显示全部楼层
请问楼主,最初的那个汇编程序在实际板子上跑过么?我用lpc2103的班子跑,怎么没有反应啊。
仿真是对的,用到实际中需要注意些什么?

出0入0汤圆

 楼主| 发表于 2009-6-12 14:22:44 | 显示全部楼层
我没有LPC的板子 但是有在44B0上跑过 http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=1530698&bbs_page_no=5&bbs_id=1032

出0入0汤圆

发表于 2009-6-12 14:27:10 | 显示全部楼层
这个肯定要标记

出0入0汤圆

发表于 2009-6-12 16:43:53 | 显示全部楼层
非常感谢楼主,能否加个qq?以后还要多请教。78306478

出0入0汤圆

发表于 2009-6-18 13:00:43 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-7-14 13:11:51 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-8-24 14:12:26 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-8-24 23:17:05 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-8-27 17:09:04 | 显示全部楼层
码一下

出0入0汤圆

发表于 2009-9-24 22:19:23 | 显示全部楼层
标记

出0入0汤圆

发表于 2009-9-24 22:27:31 | 显示全部楼层
学习,最近也在学ARM

出0入0汤圆

发表于 2009-10-5 20:47:04 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-10-7 21:36:15 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-10-11 11:07:49 | 显示全部楼层
标记个先

出0入0汤圆

发表于 2009-10-13 22:39:42 | 显示全部楼层
留个记号。。。

出0入198汤圆

发表于 2009-10-14 20:05:37 | 显示全部楼层
Mark~~~

出0入0汤圆

发表于 2009-10-16 23:35:33 | 显示全部楼层
留个记号。。。

出0入0汤圆

发表于 2009-10-20 21:25:15 | 显示全部楼层
MARK!

出0入0汤圆

发表于 2009-10-23 16:11:10 | 显示全部楼层
做个记号跟楼主学习

出0入0汤圆

发表于 2009-10-26 21:42:50 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-11-1 16:51:09 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-11-2 21:40:31 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-11-3 11:03:41 | 显示全部楼层

出0入0汤圆

发表于 2009-11-12 11:18:14 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-11-17 13:34:21 | 显示全部楼层
记号

出0入0汤圆

发表于 2009-11-23 16:57:11 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-11-24 17:30:01 | 显示全部楼层

出0入0汤圆

发表于 2009-11-28 00:41:06 | 显示全部楼层
楼主太伟大啦

出0入0汤圆

发表于 2009-12-1 10:24:38 | 显示全部楼层
谢谢楼主,学习了!

出0入0汤圆

发表于 2009-12-11 14:34:43 | 显示全部楼层
连载啊,我喜欢,mark

出0入0汤圆

发表于 2009-12-11 15:04:17 | 显示全部楼层
跟着楼主学一学!!

出0入0汤圆

发表于 2010-1-22 15:22:29 | 显示全部楼层
学习

出0入0汤圆

发表于 2010-3-23 12:05:52 | 显示全部楼层
谢谢楼主,学习了

出0入0汤圆

发表于 2010-3-23 12:36:53 | 显示全部楼层
学习。

出0入0汤圆

发表于 2010-3-23 13:26:40 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-3-23 14:27:49 | 显示全部楼层
菜鸟,学习了,最爱ourdev

出0入0汤圆

发表于 2010-3-23 16:25:46 | 显示全部楼层
刚开始学习啊,看了觉得清晰了很多,谢谢楼主!!

出0入0汤圆

发表于 2010-3-24 10:55:49 | 显示全部楼层
学习一下~

出0入0汤圆

发表于 2010-3-24 21:43:11 | 显示全部楼层
楼主继续哦

出0入0汤圆

发表于 2010-3-25 08:52:44 | 显示全部楼层
学习一下

出0入0汤圆

发表于 2010-3-27 00:11:58 | 显示全部楼层
太好了,楼主,我一直都想找个可以仿真的例子来学习arm谢谢了

出0入0汤圆

发表于 2010-3-27 00:34:14 | 显示全部楼层
楼主真的好强

出0入0汤圆

发表于 2010-3-29 16:18:47 | 显示全部楼层
有点意思

出0入0汤圆

发表于 2010-4-2 16:53:44 | 显示全部楼层
xiang 向LZ学习啊

出0入0汤圆

发表于 2010-4-3 14:04:44 | 显示全部楼层
最近也在学ARM

出0入0汤圆

发表于 2010-4-5 12:31:26 | 显示全部楼层

出0入0汤圆

发表于 2010-4-5 16:21:19 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-4-7 16:48:06 | 显示全部楼层
楼主继续哦,简单易学

出0入0汤圆

发表于 2010-4-16 17:10:14 | 显示全部楼层
阿南的ARM入门调试笔记

出0入0汤圆

发表于 2010-4-17 10:39:06 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-4-18 10:17:02 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-4-20 18:53:35 | 显示全部楼层

出0入0汤圆

发表于 2010-4-23 15:03:27 | 显示全部楼层
我也是刚刚开始学,先做个标记

出0入0汤圆

发表于 2010-4-23 17:00:12 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-4-24 10:12:03 | 显示全部楼层
好办法

出0入0汤圆

发表于 2010-4-26 10:24:53 | 显示全部楼层
做个记号,学习!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-6 22:52

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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