网站导航: 首页 > 设计参考 > 正文 文章搜索
S3c2410软件调试总结
 
文章编号:
090104164004
文章分类: 单片机 ARM
点 击:
...
关 键 词: S3c2410,软件调试
文章来源:
网络
摘 要:

C B 具体含义
0 0 无cache,无写缓冲,任何对memory的读写都反映到ASB总线上。

对 memory 的操作过程中CPU需要等待。
0 1 无cache,有写缓冲,读操作直接反映到ASB总线上。写操作CPU将数据写

入 到写缓冲后继续运行,由写缓冲进行ASB操作。
1 0 有cache,写通模式,读操作首先考虑cache hit;写操作时直接将数据写入

写缓冲,如果同时出现cache hit,那么也更新cache。
1 1 有cache,写回模式,读操作首先考虑cache hit;写操作也首先考虑cache,

如果hit,则只修改cache,并将cache对应半行的dirty比特置位;如果miss,

则写入写缓冲,触发ASB总线操作。

在我的程序中内存空间的分配统一采用了文末的MEMORY图。虽然MMU只是使用了逻辑地址到物理地址的linear transfer(值不改变),但是由于MMU能够引入cache&write buffer,因此系统性能有很大的提高!

配置时钟比、重新设置PLL
2410内部有三个时钟:FCLK、HCLK、PCLK,分别供CPU、AHB总线和APB总线使用,为了降低功耗,一般都选择周期比为1:2:4的合理配置。 同时将PLL配置为运行环境时钟,一般都达到最高202M。

IO初始化
将IO口配置为对应的功能选项,同时一般会点亮相应的LED灯。

中断初始化
2410的内存空间没有remap的机制,应该中断入口时钟位于零地址。因此中断服务机制可以描述如下:
首先,不管使用那种启动方式,必须确保一下代码段位于内存的0x0地址:
b ResetHandler
b HandlerUndef ;handler for Undefined mode
b HandlerSWI ;handler for SWI interrupt
b HandlerPabort ;handler for PAbort
b HandlerDabort ;handler for DAbort
b . ;reserved
b HandlerIRQ ;handler for IRQ interrupt
b HandlerFIQ ;handler for FIQ interrupt
除ResetHandler外,其余各项都是由如下的宏定义的一段代码:
HandlerFIQ HANDLER HandleFIQ
MACRO
$HandlerLabel HANDLER $HandleLabel
$HandlerLabel
sub sp,sp,#4 ;decrement sp(to store jump address)
stmfd sp!,{r0} ;PUSH the work register to stack
ldr r0,=$HandleLabel ;load the address of HandleXXX to r0
ldr r0,[r0] ;load the contents
str r0,[sp,#4] ;store the contents(ISR) of HandleXXX to stack
ldmfd sp!,{r0,pc} ;POP the work register and pc(jump to ISR)
MEND
这段代码的含义是通过堆栈将中断向量表中的内容赋给PC指针(如HandleFIQ是存放着FIQ服务程序入口地址的地址),自然程序就跳到相应的入口地址。
可见,中断向量表存放的是各个中断服务程序的入口地址,它是用来被加载的,而并不是可执行代码。为了统一,所有示例程序都将中断向量表放在0x33ffff00开始的地址,并根据入口地址依次排列。
需要注意的是如果各种模式的服务程序用C语言定义,那么类型必须用__irq定义,以保证能够正确返回。

初始化串口
串口统一选用UART0,模式采用115200、1bit STOP、No Parity。

最后跳转到我们自己的应用程序!

附:我得程序所使用的地址空间结构以及MMU中C、B的设置:

Blank Area: RW_FAULT 0x5b000000 ~ 0xffffffff

Sram & SFR: NCNB 0x40000000 ~ 0x4affffff

Blank Area: RW_FAULT 0x34000000 ~ 0x3fffffff

Int_Vec, Stack, MTT: CNB 0x33f00000 ~ 0x33ffffff

SDRAM Download: NCNB 0x31000000 ~ 0x33efffff

SDRAM Exec RW: CB 0x30800000 ~ 0x30ffffff

SDRAM Exec R CNB 0x30000000 ~ 0x307fffff

Bank5, FPGA: NCNB 0x28000000 ~ 0x2fffffff

Bank4, FPGA: NCNB 0x20000000 ~ 0x27ffffff

Bank3, Bottom NIC: NCNB 0x18000000 ~ 0x1fffffff

Bank2, Bottom Flash: CNB 0x10000000 ~ 0x17ffffff

Bank1, Bottom Sram: CNB 0x08000000 ~ 0x0fffffff

Bank0, Flash or Sram: CNB 0x00000000 ~ 0x07ffffff


Nor Flash Bootloader

这是我着手写的第一个程序,我的想法是让这个程序同时支持通过串口对Nand 和 Nor FLASH的烧写,如果不进行任何烧写,那么就跳到Nor Flash的第二个section启动应用程序,这样一来,即使脱离JTGA,我也可以使用串口进行盲调。

由于有现成的初始化文件和flash烧写的示例程序,开发起来还比较快。当然也遇到了一些问题,一开始连flash的device ID都读不出来,后来发现我指针没有定义成volatile类型,flash的操作时序被编译器优化了;再者,在对Nor Flash进行操作时,bank0在MMU中的类型一定要设为NCNB,这样比较保险。

遇到最大的问题就是下面的了,一开始我用jtag把程序下载到0x30000000的地方运行,对Nor Flash的烧写完全正常,但是当把程序下载到Nor Flash中启动运行后,再对Nor Flash的section 2进行烧写时,就出现了问题。所幸没多久我就意识到了问题,将程序放在Nor Flash中运行,同时有对同一片flash进行操作,那么操作时序势必会被CPU的指令读取时序所破坏,因此程序必须搬运到SDRAM中运行。

但是启动地址有必须是零地址,所以我采用了前文提到的scatter文件的方法,将非必要的代码全部搬到sdram中运行,scf文件格式就是前文中的那个。当然采用了__main的入口,调用了ADS的链接库,让它帮忙建立程序的运行环境。

至此,Nor Flash Bootloader可以顺畅无忧的实现其功能了。

S3c2410软件调试总结(后记&特别感谢)

后记 & 特别感谢

第一次写这么洋洋洒洒的文章,想必垃圾成分一定很高,不过能有那么一点点有用的东西,我也就很高兴了。毕竟自己这么一路走过来,真的是满有感触的。

在此,特别要感谢版上twentyone朋友对我的大力帮助,在高人的指点下,我长进不小,另外我用的他开发的JTAG代理软件XJTAG,个人觉得性能相当不错,各位在用简易JTAG口的,强烈推荐大家尝试:http://www.twentyone.blogchina.com/

走到这一步,我只能说精彩的生活刚刚开始,接下来我会在linux和FPGA上作一些文章,这两方面的工作我都刚刚开始,远不够深入啊!非常乐意和大家一起探讨、学习、交流,让我们一起进步!

 
相关文章:
s3c2410 Timer工作原理[图]
虚拟SPI时序在TC77与S3C2410通信中的应用[图]
s3c2410 MMU(存储器管理单元)讲解[图]
s3c2410 CACHES,WRITE BUFFER讲解[图]
S3C2410中的脉宽调制定时器(PWM)
S3C2410 中断程序的实现
s3c2410 watchdog详解
s3c2410 中断异常处理[图]
基于ARM9芯片S3C2410a的GPRS数据终端设计
ARM系统中DMA方式在数据采集中的应用[图]
AD7888与S3C2410的SPI接口及Linux下嵌入式驱动的实现[图]
基于s3c2410的ARMer9开发平台的使用
ARM S3C2410硬件手册重点
基于ARM S3C2410与TMS320C6416的接口设计[图]
S3C2410上Jffs2的移植
ARM S3C2410驱动TFT-LCD的研究[图]
MINIGUI在S3C2410开发板的移植
mplayer在S3C2410上的移植
在S3C2410上移植yaffs2文件系统
S3C2410 bootloader(vivi)阅读笔记
s3c2410 LCD图片显示
S3C2410 LCD 驱动程序移植及GUI程序编写[图]
S3C2410X开发总结及心得
U-Boot在S3C2410开发板上的移植
S3C2410初始化
S3C2410通过IIS总线与音频芯片UDA1380进行通信
在S3C2410上移植bluetooth(蓝牙)
S3C2410上触摸屏的应用实例
S3c2410的触摸屏及模数转换
S3C2410的快速启动技术
基于嵌入式linux和s3c2410平台的视频采集
S3c2410 LCD驱动学习心得
s3c2410移植MPlayer到linux2.6

上一页 12
 
最新开源项目
 
 
  查看更多...  
 
本站相关产品   淘宝网店
 




 
  查看更多...  

 

本站程序由百合电子工作室开发和维护
Copyright @ baihe electric studio
渝ICP备09006681号-4