打印

各位高手,44B0初级问题呀.

[复制链接]
2652|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ewq_022|  楼主 | 2007-1-2 11:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这个程序怎么有这样的运行效果 ????

环境是ADS1.2 PE口接了几个LED;
我是初学者,想从最基本的开始,
44B0板我就写一个短短的程序就让一个LED闪烁,就遇到这么多问题.我不用外部RAM,用内部8K的RAM.在编译之前是不是得改一下RO BASE 中的内容?改在内部RAM的地址 ?这个内容对MAKE有什么影响?烧FLASH时也要添RAM的起使地址,又有什么用 ?我把下面的程序烧进去之后灯就闪烁了,但是复位之后闪烁的就慢了,不象刚烧进去闪烁那么快.是由于从FLASH中读程序再执行引起的吗 ?

还有一个问题就是把主函数中的延时程序用delay()代替之后,灯就不闪了,这是怎么了 ?

init.s 

IMPORT Main
AREA    Init,CODE,READONLY
ENTRY 
LDR R0, =0x01c00000 
LDR R1, =0x01 ;
STR R1, [R0] 
LDR SP, =0x10000000 ;

LDR R0, =0x01c00000 
STMFD R13!,{R0}
LDR R0, =0x01c00156 ;刚开始没有初始化SP,怀疑是堆栈的问题,这里测试堆栈.
LDMFD R13!,{R0}
CMP R0,#0x01c00000

BLEQ Main
B .
END


下面是led.c

#define rPCONE  (*(volatile unsigned *)0x1d20028)
#define rPDATE  (*(volatile unsigned *)0x1d2002c)
#define rPUPE  (*(volatile unsigned *)0x1d20030)
void Delay(void);
int Main()
{
unsigned long LED,j,i,k;
rPCONE=0x00005555; //将IO口置为输出模式

for(;;){
rPDATE=0xfe;
for(i=0;i<=5;i++)
for(j=0;j<0x0ff;j++)
for(k=0;k<0x0ff;k++);

rPDATE=0xff;

for(i=0;i<=5;i++)
for(j=0;j<0x0ff;j++)
for(k=0;k<0x0ff;k++);
}
return(0); 
}
void Delay()
{
unsigned int i,j,k;
for(i=0;i<=5;i++)
for(j=0;j<0x0ff;j++)
for(k=0;k<0x0ff;k++);
}

相关帖子

沙发
xieqin| | 2007-1-2 12:32 | 只看该作者

...

Ro-BASE设置为0x0

程序boot的时候,要把静态变量拷贝到内部的RAM里,那样才可能读写操作.

烧程序的时候也要添加RAM,这是供下载缓冲用.

烧程序的时候,估计是起用了PLL,而你的代码中没有起用PLL,所以复位后会感觉变慢

改用delay后,灯不闪,估计是因你没有拷贝RW+ZI段,所以进栈的时候,系统就死掉了!

使用特权

评论回复
板凳
ewq_022|  楼主 | 2007-1-2 13:09 | 只看该作者

感谢2楼

Ro-BASE设置为0x0 ?看有写资料上说这个设置不是要在RAM的位置上吗 ?

程序boot的时候,要把静态变量拷贝到内部的RAM里,那样才可能读写操作.这个步骤是自己的程序实现的还是编译器实现的 ??


拷贝RW+ZI段又是怎么实现的 ??

小弟新手!!赐教!!
有没有从零开始学的教程呀,建议有高手可以写一个从最基本的开始讲解,让我们新手可以站在肩膀上呀

使用特权

评论回复
地板
ewq_022|  楼主 | 2007-1-2 17:10 | 只看该作者

再次呼唤高手

使用特权

评论回复
5
coreykong| | 2007-1-3 02:09 | 只看该作者

编译的时候有问题不

我也是菜鸟,你编译的时候是不是有很多警告,说有的函数无法调用?

使用特权

评论回复
6
js_wawayu| | 2007-1-3 09:29 | 只看该作者

程序肯定是要烧到FLASH里的

你想在内部RAM里跑,那只能在程序运行时把代码拷贝到那里。你现在这个能闪的程序的RO-BASE设置的是什么值?

使用特权

评论回复
7
ewq_022|  楼主 | 2007-1-3 14:50 | 只看该作者

中间怎么还要插广告呀!!

程序没有5楼说的那种警告,程序是烧到了FLASH中了,以前把RO-BASE 设到了RAM中了0X10000100.后来改成了0X0.效果一样,是不是ARM编程就这么一个小程序也要带上好多启动代码呀,以前玩51,PIC ,AVR都不用这么麻烦的.刚涉足这个领域就遇到这么多麻烦.

使用特权

评论回复
8
ewq_022|  楼主 | 2007-1-3 18:53 | 只看该作者

dd

大哥们呀,急呀.谁有最简单的点亮LED的程序呀,就是不用的硬件一律不初始化那种最简单的..就是想知道最简单的程序要写多少!!

使用特权

评论回复
9
zj3515| | 2007-3-4 14:28 | 只看该作者

同情啊

有没有大侠来帮忙指点啊

使用特权

评论回复
10
jimsboy| | 2007-3-6 00:13 | 只看该作者

和单片机一样

上电后,指令从0000处开始
第一条是跳转。跳开前面的中断入口。
第二条是设置GPIO口为输出口。
第三条是给IO口设置电平,灯就可以亮或灭了
为了能让程序自己跑。所以你得加点延时什么的。并弄成死循环。这样它就会不停地从flash(它从0000处开始)读指令并一条一条地执行。于是一个最最简单的流水灯就做成了。

使用特权

评论回复
11
jimsboy| | 2007-3-6 00:38 | 只看该作者

复杂一点的

上面的程序只要用专用的软件把它写入flash就OK了。和一般的单片机的程序思路一样。这时的特点是程序就在flash里执行,最高速度也只有10M的样子。而44B0刚上电时它对flash的读取程序比这个值更低,性能当然也很差。
RAM的访问速度要远高于flash,而44B0是可以支持好几种RAM,最常用的就是SRAM和SDRAM了,实际上使用的RAM一般都是SDRAM。SDRAM工作与SRAM比起来要的条件更多,它要不断地对内存中的数据进行刷新。44B0虽然能支持SDRAM,但它不是默认的,要你设置相关寄存器才行。所以程序要有几下的内容
1、初始化SDRAM控制器,把SEG6(0x0c000000开始)设置为SDRAM,再把SDRAM控制器的参数设好,SDRAM就工作了。
2、中断入口那一堆反正都是很死板的,直接拷来,放着,爱用不用
3、把程序搬到SDRAM中,哪些数据搬到哪里等玩一段时间再回来看
下面的程序一般就可以用C语言写了。一个b main。让程序进入C语言天下
在C语言中先把CPU的频率调到一个比较高的样子一般都是调成60M或64M。然后就可以初始化IO口了,一般同时还会初始化一个串口用于调试。设定波特率就可以和电脑串口通信了。
到些基本初始化工作就结束了,下面就是程序了。如果高兴,你就是让这部分程序是一个操作系统。那就是后话了,说实话,我也不怎么明白……
初你成功!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

54

帖子

1

粉丝