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

[复制链接]
3719|10
 楼主| ewq_022 发表于 2007-1-2 11:35 | 显示全部楼层 |阅读模式
这个程序怎么有这样的运行效果&nbsp;????<br /><br />环境是ADS1.2&nbsp;PE口接了几个LED;<br />我是初学者,想从最基本的开始,<br />44B0板我就写一个短短的程序就让一个LED闪烁,就遇到这么多问题.我不用外部RAM,用内部8K的RAM.在编译之前是不是得改一下RO&nbsp;BASE&nbsp;中的内容?改在内部RAM的地址&nbsp;?这个内容对MAKE有什么影响?烧FLASH时也要添RAM的起使地址,又有什么用&nbsp;?我把下面的程序烧进去之后灯就闪烁了,但是复位之后闪烁的就慢了,不象刚烧进去闪烁那么快.是由于从FLASH中读程序再执行引起的吗&nbsp;?<br /><br />还有一个问题就是把主函数中的延时程序用delay()代替之后,灯就不闪了,这是怎么了&nbsp;?<br /><br />init.s&nbsp;<br /><br />IMPORT&nbsp;Main<br />AREA&nbsp;&nbsp;&nbsp;&nbsp;Init,CODE,READONLY<br />ENTRY&nbsp;<br />LDR&nbsp;R0,&nbsp;=0x01c00000&nbsp;<br />LDR&nbsp;R1,&nbsp;=0x01&nbsp;;<br />STR&nbsp;R1,&nbsp;[R0]&nbsp;<br />LDR&nbsp;SP,&nbsp;=0x10000000&nbsp;;<br /><br />LDR&nbsp;R0,&nbsp;=0x01c00000&nbsp;<br />STMFD&nbsp;R13!,{R0}<br />LDR&nbsp;R0,&nbsp;=0x01c00156&nbsp;;刚开始没有初始化SP,怀疑是堆栈的问题,这里测试堆栈.<br />LDMFD&nbsp;R13!,{R0}<br />CMP&nbsp;R0,#0x01c00000<br /><br />BLEQ&nbsp;Main<br />B&nbsp;.<br />END<br /><br /><br />下面是led.c<br /><br />#define&nbsp;rPCONE&nbsp;&nbsp;(*(volatile&nbsp;unsigned&nbsp;*)0x1d20028)<br />#define&nbsp;rPDATE&nbsp;&nbsp;(*(volatile&nbsp;unsigned&nbsp;*)0x1d2002c)<br />#define&nbsp;rPUPE&nbsp;&nbsp;(*(volatile&nbsp;unsigned&nbsp;*)0x1d20030)<br />void&nbsp;Delay(void);<br />int&nbsp;Main()<br />{<br />unsigned&nbsp;long&nbsp;LED,j,i,k;<br />rPCONE=0x00005555;&nbsp;//将IO口置为输出模式<br /><br />for(;;){<br />rPDATE=0xfe;<br />for(i=0;i&lt=5;i++)<br />for(j=0;j&lt0x0ff;j++)<br />for(k=0;k&lt0x0ff;k++);<br /><br />rPDATE=0xff;<br /><br />for(i=0;i&lt=5;i++)<br />for(j=0;j&lt0x0ff;j++)<br />for(k=0;k&lt0x0ff;k++);<br />}<br />return(0);&nbsp;<br />}<br />void&nbsp;Delay()<br />{<br />unsigned&nbsp;int&nbsp;i,j,k;<br />for(i=0;i&lt=5;i++)<br />for(j=0;j&lt0x0ff;j++)<br />for(k=0;k&lt0x0ff;k++);<br />}<br /><br />
xieqin 发表于 2007-1-2 12:32 | 显示全部楼层

...

Ro-BASE设置为0x0<br /><br />程序boot的时候,要把静态变量拷贝到内部的RAM里,那样才可能读写操作.<br /><br />烧程序的时候也要添加RAM,这是供下载缓冲用.<br /><br />烧程序的时候,估计是起用了PLL,而你的代码中没有起用PLL,所以复位后会感觉变慢<br /><br />改用delay后,灯不闪,估计是因你没有拷贝RW+ZI段,所以进栈的时候,系统就死掉了!<br /><br />
 楼主| ewq_022 发表于 2007-1-2 13:09 | 显示全部楼层

感谢2楼

Ro-BASE设置为0x0&nbsp;?看有写资料上说这个设置不是要在RAM的位置上吗&nbsp;?<br /><br />程序boot的时候,要把静态变量拷贝到内部的RAM里,那样才可能读写操作.这个步骤是自己的程序实现的还是编译器实现的&nbsp;??<br /><br /><br />拷贝RW+ZI段又是怎么实现的&nbsp;??<br /><br />小弟新手!!赐教!!<br />有没有从零开始学的教程呀,建议有高手可以写一个从最基本的开始讲解,让我们新手可以站在肩膀上呀
 楼主| ewq_022 发表于 2007-1-2 17:10 | 显示全部楼层

再次呼唤高手

  
coreykong 发表于 2007-1-3 02:09 | 显示全部楼层

编译的时候有问题不

我也是菜鸟,你编译的时候是不是有很多警告,说有的函数无法调用?
js_wawayu 发表于 2007-1-3 09:29 | 显示全部楼层

程序肯定是要烧到FLASH里的

你想在内部RAM里跑,那只能在程序运行时把代码拷贝到那里。你现在这个能闪的程序的RO-BASE设置的是什么值?
 楼主| ewq_022 发表于 2007-1-3 14:50 | 显示全部楼层

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

程序没有5楼说的那种警告,程序是烧到了FLASH中了,以前把RO-BASE&nbsp;设到了RAM中了0X10000100.后来改成了0X0.效果一样,是不是ARM编程就这么一个小程序也要带上好多启动代码呀,以前玩51,PIC&nbsp;,AVR都不用这么麻烦的.刚涉足这个领域就遇到这么多麻烦.
 楼主| ewq_022 发表于 2007-1-3 18:53 | 显示全部楼层

dd

大哥们呀,急呀.谁有最简单的点亮LED的程序呀,就是不用的硬件一律不初始化那种最简单的..就是想知道最简单的程序要写多少!!
zj3515 发表于 2007-3-4 14:28 | 显示全部楼层

同情啊

有没有大侠来帮忙指点啊
jimsboy 发表于 2007-3-6 00:13 | 显示全部楼层

和单片机一样

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

复杂一点的

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

本版积分规则

2

主题

54

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部