跳至主要内容

【转】H-JTAG+AXD 调试S3C2440

1.设置好H-JTAG后准备调试简单的测试代码了,首先要在ADS的开发环境中设置"DebugRel Setting"的一些参数:

    a:"Target Settings" Linker=ARM Linker Post-linker=ARM FfromELF。

    b:"Language Settings=>ARM Asssembler" Target=ARM920T Byte order=Little endian;"Language Settings=>ARM C compiler"进行相同设定。

    c:"ARM Linker"Output=>Linktype=Simple RO Base=0x3000000(关键)。(对于一个加载时域和运行时域相同的映像文件来说,RO段基地址实际上就是该映像文件在存储空间的起始地址,根据S3C2440的SDRAM应该是在地址0x30000000的。所以此处应该设置为0x3000000。另外可以在窗口下方的命令行中输入"-map -list list.txt"字段(不包括引号),这样可以在编译完以后看到内存的具体分布情况。

2.用H-JTAG调试时单步和全速的时候发现程序虽然执行到"b   ResetHandler"处,但是再往下执行时,程序并不是跳转到0x30000000而是0x2fabe844处,一路空操作,也就是程序跑飞了。但是使用ARMUL仿真时,程序却能程序设计的步骤执行,折腾到晚上睡觉也没解决。第二天上网查资料得到的解释是:"因为2440带MMU,wince起来后,会打开MMU并对MMU进行相应的设置。所以,在板子上电后,如果WINCE起来后,地址0x30000000并不一定是SDRAM的地址。"而在ARMUL里软仿真的话,是默认已经设置好了SDRAM,相当于FPGA里的功能仿真,只验证程序的执行过程但不保证实际运行会不会出现问题。所以问题的解决办法是要对SDRAM进行初始化。因为在上电时,SDRAM是没有被初始化的,所谓初始化SDRAM,就是要设置处理器的SDRAM空间以及读写SDRAM的时序参数,因而SDRAM在初始化之前是不能进行读写操作的。而在设置SDRAM的方法有两种:

    a:在AXD里面通过命令窗口重新配置一下SDRAM;例如"setmem 0x48000000 0xac9 32"的含义就是将常数0xac9保存到地址为0x48000000的字中(一个字32bit)。这样可使用3~4条setmem命令初始化SDRAM,之后就可以正确地将映像文件加载到SDRAM中运行了。关于使用ob命令自动初始化SDRAM:由于每次上电后往SDRAM加载映像时都需要对其进行初始化,手工输入多条命令有时是很繁琐的。这时,可以把初始化SDRAM的命令序列保存在一个*.ini文本文件中(也可以是*.txt文件),每条命令占一行。然后在AXD命令行窗口使用obey命令调用该*.ini文件,就可以将文件中的命令顺序执行,继而完成SDRAM的初始化。例如,将SDRAM初始化命令序列保存在2440.ini件中,执行命令:ob PATH/2440.ini   就可自动执行初始化SDRAM的命令。其中,ob是obey的简写,$PATH是2440.ini的绝对路径。在硬件平台不变的情况下,在启动AXD时自动初始化SDRAM的一劳永逸的办法:初始化SDRAM的命令序列保存为一个*.txt文本文件(可以直接将上述的*.ini文件后缀改为.txt),然后在AXD的主窗口下选择菜单Options->Configure Interface...,在Session File一页中选择"Run Configuration Script",将该.txt文本文件作为一个脚本加进来,确定。这样以后每次启动AXD时,就会自动运行该脚本来完成对SDRAM的初始化。

    b:打开H-JTAG的Script=>Init Script菜单,在其中输入对应的设置参数,有几个寄存器要设置就添加几个,添加完毕后选中窗口的左下方"Enable Auto Init",即可自动配置SDRAM.

3.设置H-Flasher,a:选择板子对应的nor flash(AMD=>Am29LV160DB);b:Memory Config,Flash Bit Width= 08-bit Mode,Flash Start Address=0,RAM Start Address=0x30000000。

4.Enjoy!!!

评论

此博客中的热门博文

【转】AMBA、AHB、APB总线简介

AMBA 简介 随着深亚微米工艺技术日益成熟,集成电路芯片的规模越来越大。数字IC从基于时序驱动的设计方法,发展到基于IP复用的设计方法,并在SOC设计中得到了广泛应用。在基于IP复用的SoC设计中,片上总线设计是最关键的问题。为此,业界出现了很多片上总线标准。其中,由ARM公司推出的AMBA片上总线受到了广大IP开发商和SoC系统集成者的青睐,已成为一种流行的工业标准片上结构。AMBA规范主要包括了AHB(Advanced High performance Bus)系统总线和APB(Advanced Peripheral Bus)外围总线。   AMBA 片上总线        AMBA 2.0 规范包括四个部分:AHB、ASB、APB和Test Methodology。AHB的相互连接采用了传统的带有主模块和从模块的共享总线,接口与互连功能分离,这对芯片上模块之间的互连具有重要意义。AMBA已不仅是一种总线,更是一种带有接口模块的互连体系。下面将简要介绍比较重要的AHB和APB总线。 基于 AMBA 的片上系统        一个典型的基于AMBA总线的系统框图如图3所示。        大多数挂在总线上的模块(包括处理器)只是单一属性的功能模块:主模块或者从模块。主模块是向从模块发出读写操作的模块,如CPU,DSP等;从模块是接受命令并做出反应的模块,如片上的RAM,AHB/APB 桥等。另外,还有一些模块同时具有两种属性,例如直接存储器存取(DMA)在被编程时是从模块,但在系统读传输数据时必须是主模块。如果总线上存在多个主模块,就需要仲裁器来决定如何控制各种主模块对总线的访问。虽然仲裁规范是AMBA总线规范中的一部分,但具体使用的算法由RTL设计工程师决定,其中两个最常用的算法是固定优先级算法和循环制算法。AHB总线上最多可以有16个主模块和任意多个从模块,如果主模块数目大于16,则需再加一层结构(具体参阅ARM公司推出的Multi-layer AHB规范)。APB 桥既是APB总线上唯一的主模块,也是AHB系统总线上的从模块。其主要功能是锁存来自AHB系统总...

搞笑

1.55岁的周润发宣布死后将捐出99%的财产,什么都不想带走。作家顾晓军评论道:千万不要捐到大陆来,不要害了无辜的官员。 2.发改委成立至今只做过两件事:1)涨价,2)替涨价辩护。 3.目前中国有效的反腐手段有:1夫妻反目;2家中被盗;3情人举报;4狗咬狗,5站错队 4.国外奶粉热销中国的原因:1没有三聚氰胺;2如果有,可以索赔巨款;3如果索赔不成,不会坐牢 5.1955年中国的人均收入是韩国的3.2倍,日本的1.1倍。但经过50多年翻天覆地的增长,2008年中国的人均收入是日本的3%,韩国7%,但韩国、日本从来没宣布自己经济怎么翻番,只有中国是天天说自己翻了很多番。 6.中国人固有一死,或死于地沟油,或死于石灰面粉,或死于结石奶粉,或死于毒疫苗,或死于危房,或死于拆迁,或死于躲猫猫,或死于日记,或死于酒色,或死于车轮下,或死于被自杀……死并不可怕,可怕的是你根本不知道自己是怎么死的! 7.中国不一定是和邻国土地争端最多的国家,但肯定是和本国公民土地争端最多的国家。 8.在谈所谓大国崛起之时,请扪心自问:你的收入崛起没有、你的住房面积崛起没有、你的护照免签国家数量崛起没有、你的食品安全崛起没有、你的医保社保崛起,你的国防力量增强了没有...如果都没有,那么大国再崛起关你P事。 9.日本人冈本真夜1997年的一首歌无耻地抄袭了我们2010年世博会的会歌,太可恶了!!? 10.什么是奇迹?我建了一座豆腐渣大楼,然后雇了150个短工装修,很多人说这房子容易塌,我充耳不闻。结果「哗啦」的塌了,把他们埋在废墟里整整八天八夜,我找人挖开塌坍时,有一百多人活着。这是个奇迹,更奇迹的是我他妈不但无罪,表彰会上我还成了救人的大英雄! 11.统计局宣布:中国城市人均月收入已突破9000人民币大关。拖祖国后腿的请自觉转发。 看到这个消息我不禁黯然神伤,仔细算算,我何止才拖了祖国的大腿,我都扒到祖国的臀部了,对不起,祖国---我是否扯到你的蛋了!! 

【转】select问题

问: 该串口初始化如下 ioctl(comm2Fd,FIOBAUDRATE,9600) ioctl(comm2Fd,FIOSETOPTIONS,OPT_RAW) 使用如下 FD_ZERO   (&readFds); FD_SET   (comm2Fd,   &readFds);   width   =   comm2Fd   +   1; FD_ISSET   (comm2Fd,   &readFds); FOREVER { if(timeoutvalue==0) { printf("\nselect   start!\n"); selectnum   =   select   (width,   &readFds,   NULL,   NULL,   NULL); printf("\nselect   over!\n"); }                                 ........... } 现在的状况是程序跑一段时间后会死机或这个串口通讯任务死掉,每次死机都是"select   start!"打印出来,而"select   over!"打印不出来,在仅这个串口通讯任务死掉的情况下,用comm1Fd超级终端登陆,查询任务状态,会发现tExcTask任务居然处于挂起状态??? 哪位大哥帮忙分析一下或给予一点提示,小弟不胜感激!! 答: sele...