求助2410定时器步工作问题(软件仿真,已解决)?

[复制链接]
3108|6
 楼主| 叶魂 发表于 2008-9-14 17:49 | 显示全部楼层 |阅读模式
初学者,ADS软件仿真下timer仿真,设置两个rTCFG0,rTCFG1,rTCNTn,rTCMPn,rTCON,启动定时器后用程序读取rTCNTOn,读出来全是一样的数,也就是定时器没有工作,为什么?是因为没有设置系统时钟的问题吗,难道上电默认的不可以吗?
 楼主| 叶魂 发表于 2008-9-14 18:35 | 显示全部楼层

增加

在线等&nbsp;请高手指教啊&nbsp;现在吧时钟初始化放进去还是不工作<br />
twentyone 发表于 2008-9-14 20:11 | 显示全部楼层

re

不知道你指的软件仿真是什么?是指在ADS下用ARMULATOR来仿真?如果是的话,应该是不会工作的,因为ARMULATOR指提供最基本的软件指令仿真。
 楼主| 叶魂 发表于 2008-9-14 20:43 | 显示全部楼层

??

是这个仿真,但他自带example中就可以阿,不过是ARM7TDMI核的阿
 楼主| 叶魂 发表于 2008-9-14 22:23 | 显示全部楼层

是这个原因

ARMulator&nbsp;是一个在&nbsp;ARM&nbsp;公司推出的集成开发环境&nbsp;ADS&nbsp;(ARM&nbsp;Developer&nbsp;Suite)中提供的指令集模拟器。它与运行在通用计算机(通常是x86体系结构)上的调试器相连接,模拟&nbsp;ARM&nbsp;微处理器体系结构和指令集,提供了开发和调试&nbsp;ARM&nbsp;程序的软件仿真环境。ARMulator&nbsp;不仅可以仿真&nbsp;ARM&nbsp;处理器的体系结构和指令集,还可以仿真存储器和处理器外围设备,例如中断控制器和定时器等,这样就模拟了一个进行嵌入式开发的最小子系统,另外使用者还可以扩展添加自己的外设。&nbsp;<br />ARMulator&nbsp;同时支持全部的标准C库函数,这样所有的C程序都可以在仿真器上运行。ARMulator&nbsp;通过&nbsp;Semihosting&nbsp;方式来实现程序中输入/输出功能。Semihosting是指在&nbsp;ARM&nbsp;程序开发调试的过程中,目标系统还不具备输入/输出的功能,通过调试代理向调试器请求&nbsp;I/O。ARMulator&nbsp;就是这里所说的调试代理之一,其他还有&nbsp;Angel、Multi-ICE也通过类似的方式来实现&nbsp;I/O&nbsp;功能。&nbsp;<br />ARMulator&nbsp;在&nbsp;Windows&nbsp;平台上实现为动态链接库文件(.dll),在&nbsp;Linux&nbsp;或者&nbsp;Solaris&nbsp;系统上实现为共享库文件(.so)。前者的使用一般是通过&nbsp;ARM&nbsp;公司提供的图形界面调试器&nbsp;AXD&nbsp;中,选择目标系统为&nbsp;ARMulate.dll,这样就设置了&nbsp;ARMulator&nbsp;作为调试代理。用户在进行调试开发时,对于底层使用的调试代理是透明的。&nbsp;<br />2.ARMulator&nbsp;组成&nbsp;<br />ARMulator&nbsp;本身是由一系列的模块(module)组成的,其中最主要的模块包括:&nbsp;<br />?&nbsp;ARM&nbsp;处理器核心模块,用来仿真处理器的体系结构。&nbsp;<br />?&nbsp;处理器使用的存储器模块,用来仿真存储系统。&nbsp;<br />缺省的内存模型是&nbsp;flatmem&nbsp;,内存的大小不限制,理论上&nbsp;4G&nbsp;的地址空间都可以使用。&nbsp;<br />同时,ARMulator&nbsp;也包含了几种外设模块,用来仿真如下的外设模型:&nbsp;<br />?&nbsp;Interrupt&nbsp;controller(中断控制器)&nbsp;<br />用于中断控制,包含状态寄存器、使能寄存器、状态位清除寄存器等。&nbsp;<br />寄存器基址:Base=0x0a000000&nbsp;<br />?&nbsp;Timer(定时器)&nbsp;<br />ARMulator&nbsp;提供了两个定时器。包含控制寄存器、计数值寄存器、中断清除寄存器等。定时器支持&nbsp;free-running&nbsp;和&nbsp;periodic&nbsp;两种工作方式,前者计数器从0xFFFF递减,到“0”后计数器溢出发生中断。后者计数器从计数值寄存器中读取计数值,然后递减至“0”后溢出发生中断。&nbsp;<br />寄存器基址:Base=0x0a800000&nbsp;<br />?&nbsp;Watchdog(看门狗)&nbsp;<br />看门狗是为了防止用户程序出错导致系统死锁而采用的一种保护手段。一旦到了预定时间没有设置看门狗,看门狗就会停止ARMulator的运行,返回调试器中。看门狗使用2个定时器工作,第一个定时器在复位时启动,或者通过程序写入KeyValue&nbsp;寄存器预先设定好的值来启动,当过了一定时钟周期(WatchPeriod)后,第一个定时器产生&nbsp;IRQ&nbsp;中断,并启动第二个定时器;如果在规定时间(IRQPeriod)内程序没有写KeyValue寄存器,则看门狗将停止&nbsp;ARMulator&nbsp;,返回调试器中。&nbsp;<br />寄存器基址:Base=0xb0000000&nbsp;KeyValue=0x12345678&nbsp;<br />WatchPeriod=0x80000&nbsp;IRQPeriod=3000&nbsp;IntNumber=16&nbsp;<br />?&nbsp;Stack&nbsp;tracker(栈跟踪器)&nbsp;<br />栈跟踪器在每条指令执行后,检查栈指针(r13)寄存器的值。它记录下栈顶的最小值,从而可以计算出所用堆栈的最大长度。&nbsp;<br />栈底地址:StackBase=0x80000000&nbsp;栈空间限制:StackLimit=0x70000000&nbsp;<br />?&nbsp;Tube(显示管)&nbsp;<br />Tube&nbsp;实际上是一个寄存器,它用来显示输出。一旦写入这个寄存器某个可以显示的字符,则调试器将会把它显示在控制台&nbsp;Console&nbsp;下。这样用来显示对某个指定地址的写操作记录。&nbsp;<br />寄存器基址:Base=0x0d800020&nbsp;<br />使用者也可以根据一定的接口规范编写自己的外设模块,或者通过修改已有模块的方式来适合自己的需求。比如定制自己的存储系统等。&nbsp;<br />也就是说:ADS&nbsp;ARMulator并不是针对某一个ARM核的,谢谢三楼的回答<br />如果理解错误,请大家批评指正
 楼主| 叶魂 发表于 2008-9-14 23:59 | 显示全部楼层

??

一直在查关于ADS&nbsp;ARMulator的资料,很晕,哪位高手介绍一下阿
 楼主| 叶魂 发表于 2008-9-15 00:22 | 显示全部楼层

ADS ARMulator相关资料,问题明确

Setting&nbsp;up&nbsp;ARMulator&nbsp;介绍了默认情况下ARMulator的定时器,中断相关寄存器的Memory&nbsp;Map,&nbsp;下载地址为:http://twins.ee.nctu.edu.tw/courses/soclab_04/lab_hw_pdf/appendixA_Setup_ARMulator.pdf<br />网址http://www.cevx.com/bbs/dispbbs.asp?boardid=17&id=6821&nbsp;中罗列了其他相关文件和下载地址
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

7

帖子

0

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