打印

ADS下关于ARM程序的问题,望大家指教

[复制链接]
1981|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jdwang001|  楼主 | 2012-11-29 13:40 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 jdwang001 于 2012-11-29 14:02 编辑

自己有单片机开发的经验,用过51,AVR。最近买了块友善之臂的的MINI2440开发板,打算开始学习ARM。已经有一个星期了,感觉还是不得其门而入,参照了许多书籍,可是一一对照还是没有完成想要的操作,真有王国维说的 “昨夜西风凋碧树,独上高楼,望尽天涯路”的感觉。在入门过程中发现不少问题,望大家指教一二。首先说ADS1.2的开发,买到板子后,就想先进行裸奔来玩点小实验,就依照最简单的对LED流水灯的操作开始吧,对IDE各个参数的配置见图。
引用代码:
#include "def.h"
#include "option.h"
#include "2440addr.h"
#include "2440lib.h"
#include "2440slib.h"
//================================

void dely(U32 tt)
{
U32 i;
for(;tt>0;tt--)
{
for(i=0;i<10000;i++){}
}
}


int Main(int argc, char **argv)
{
int i;
U8 key;
U32 mpll_val=0;
int data;

mpll_val = (92<<12)|(1<<4)|(1);

//init FCLK=400M, so change MPLL first


ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);
ChangeClockDivider(key, 12);


//MMU_EnableICache();
//MMU_EnableDCache();

MMU_DisableICache();
MMU_DisableDCache();

rGPBCON = 0x155555;


data = 0x06;
while(1)
{

rGPBDAT = (data<<5);
dely(120);
data =~data;
}

return 0;
}

ChangeClockDivider(key, 12); 这段语句注释后,系统程序不能正常运行,而根据数据手册来说,时钟若是开始没有设置的话,应该直接是外部时钟输入也就是板子上的12MHz,在2440init.s中发现操作MPLLCON的也只有这段:
 [ PLL_ON_START
; Added for confirm clock divide. for 2440.
; Setting value Fclk:Hclkclk
ldr        r0,=CLKDIVN
ldr        r1,=CLKDIV_VAL         ; 0=1:1:1, 1=1:1:2, 2=1:2:2, 3=1:2:4, 4=1:4:4, 5=1:4:8, 6=1:3:3, 7=1:3:6.
str        r1,[r0]

;Configure UPLL
ldr        r0,=UPLLCON
ldr        r1,=((U_MDIV<<12)+(U_PDIV<<4)+U_SDIV)
str        r1,[r0]

nop        ; Caution: After UPLL setting, at least 7-clocks delay must be inserted for setting hardware be completed.
nop
nop
nop
nop
nop
nop
;Configure MPLL
ldr        r0,=MPLLCON
ldr        r1,=((M_MDIV<<12)+(M_PDIV<<4)+M_SDIV)
str        r1,[r0]
]

大家能解释下是什么原因吗?我感觉程序只需要包含必要的启动文件和头文件后,只需要在主函数中设置下端口输出电平就可以正常操作led的啊。关于keil调试ARM的方法也请大家帮忙指点下,我找的教程已经是很详细了但是依旧没有完成想要的操作。程序编译生成bin都没问题,可是软件仿真时就已经通不过。

板子主要参数SDRAM地址0x30000000大小为64M。
nond flash为256M,板载nor flash 2M。
也想大家推荐下快速入门的书,最好有实例教程解释的。
也打算直接开始学习linux系统,可是这底层没有非常熟悉,心里没底。感觉不好啊。

相关帖子

沙发
阿南| | 2012-11-29 14:27 | 只看该作者
系统程序不能正常运行,是指什么?是程序直接死机了,还是没有得到你想得到结果。

使用特权

评论回复
板凳
jdwang001|  楼主 | 2012-11-29 14:51 | 只看该作者
2# 阿南 针对于ADS1.2编译器,将ChangeClockDivider(key, 12); 注释后,程序并没有按照自己想要的结果运行。增加上正常。

使用特权

评论回复
地板
jlass| | 2012-11-29 15:26 | 只看该作者
将ChangeClockDivider(key, 12); 注释后,程序并没有按照自己想要的结果运行。

看上去像是配置时钟分频比的,应该不能随便去掉吧

使用特权

评论回复
5
jdwang001|  楼主 | 2012-11-29 15:40 | 只看该作者
是啊,可是数据手册上显示不应该有这个问题的。

使用特权

评论回复
6
dlliulu| | 2012-11-29 16:09 | 只看该作者
普遍存在这个问题,建议lz还是先把初始化程序那部分代码了解了解吧

使用特权

评论回复
7
阿南| | 2012-11-29 18:10 | 只看该作者
6楼说的有道理,要去深入理解时钟改了之后为什么引起你的那部分问题。
其实时钟改了之后,什么情况都有可能发生的,主要是看到底改成什么样了。

使用特权

评论回复
8
jdwang001|  楼主 | 2012-11-29 19:38 | 只看该作者
初始化部分就是按照数据手册上的推荐的方式来进行时钟的修改。
问题的话,等我把电脑并口弄好了仿真下看看,等我学会了ARM就写点小教程。和大家分享啊。

使用特权

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

本版积分规则

5

主题

316

帖子

1

粉丝