MAXQ架构的表操作
[09-13 17:04:17] 来源:http://www.88dzw.com 控制技术 阅读:8503次
文章摘要:摘要:MAXQ微控制器采用Harvard结构。然而,不应该认为MAXQ微控制器也沿袭了Harvard结构通常所具有的局限性—不能访问存储于代码空间的常量。相反,嵌入在每个MAXQ器件中的工具使得这样的查找表更加容易实现。该应用笔记详细阐述了如何在MAXQ微控制器内有效地执行表操作。 简介MAXQ架构是一种基于标准Harvard结构、功能强大的单周期RISC微控制器。Harvard结构与常见的Von Neumann结构相比,其不同之处在于重要的设计结构方面:Harvard结构的指令与数据在不同的总线上传输。由于不存在单条数据总线的冲突问题,MAXQ指令的执行时间仅需要单个周期。而传统的Von N
MAXQ架构的表操作,标签:计算机控制技术,工厂电气控制技术,http://www.88dzw.com摘要:MAXQ微控制器采用Harvard结构。然而,不应该认为MAXQ微控制器也沿袭了Harvard结构通常所具有的局限性—不能访问存储于代码空间的常量。相反,嵌入在每个MAXQ器件中的工具使得这样的查找表更加容易实现。该应用笔记详细阐述了如何在MAXQ微控制器内有效地执行表操作。
简介
MAXQ架构是一种基于标准Harvard结构、功能强大的单周期RISC微控制器。Harvard结构与常见的Von Neumann结构相比,其不同之处在于重要的设计结构方面:Harvard结构的指令与数据在不同的总线上传输。由于不存在单条数据总线的冲突问题,MAXQ指令的执行时间仅需要单个周期。而传统的Von Neumann架构完成相同的操作则需要多个周期。然而,Harvard结构中数据与代码的严格分离也带来了一系列的挑战。Von Neumann结构的一项通用技术就是可以在代码空间存储数据表,这对于标准Harvard结构来说是很难实现的。在给定总线上,单个指令周期内只能进行一个操作,因此在同一周期内,CPU核不可能既从代码存储器总线上取指令,又从代码空间的数据表中取出存储器操作数。
有人可能会认为采用Harvard结构的MAXQ微控制器也不能在代码空间内存储数据。实际上,每一款MAXQ器件都内嵌了ROM工具,因此很容易实现表项查找操作。
代码空间的表查找
从代码空间的MAXQ表中读取一个数值看似简单,然而对于不熟悉MAXQ架构的编程人员来说,第一次尝试该操作时通常会失败。IncorrectTableLookup: move dp[0], #w:StartOfTable move acc, @dp[0] . . . ret . . . StartOfTable: dc16 01234h dc16 05678h dc16 098abh dc16 0cdefh上述代码能很顺利地完成汇编,但是执行完第二条指令之后,累加器的值几乎不可能是0x1234。原因很简单,Von Neumann结构只有一个单独的存储空间,一条指令根据操作的需要可能花费多个指令周期,而MAXQ与此不同,其move <reg>, @dp[0]指令在单个周期内隐含地访问数据空间并完成指令操作,即从代码空间取指令,并从数据空间读取数据。装载到累加器中的数值是存储于数据空间的数据,只不过该数据的偏移量和代码空间的StartOfTable相同。
这个问题刚开始似乎很难解决。毕竟,访问代码空间需要一定的时间;CPU核不能将两次存储器访问压缩在一个时钟周期内完成,即使架构允许这样。然而,如果我们了解了MAXQ架构的微控制器如何将物理存储模块映射到不同存储空间的一些细节信息,并借助于固定用途ROM中的一些程序,就可以解决这一问题。
首先,在MAXQ架构中,将物理存储模块映射至代码空间和数据空间的方式不是固定的,而是取决于正在访问的物理存储模块。编程人员为大多数MAXQ微控制器所编写的代码都运行于闪存空间内,通常他们将其软件连接到代码空间的地址0处。编程人员会认为RAM也是从数据空间的地址0开始的,事实也的确如此。
但是,MAXQ微控制器还有另一块物理存储器,即固定用途ROM。所有MAXQ微控制器的固定用途ROM都位于代码空间的地址0x8000。用户代码可以调用固定用途ROM中0x8000页面的程序,执行特定的函数。并且,只要执行固定用途ROM中的程序,用户代码存储器即被重新映射到数据空间的一个新地址上。
开始执行固定用途ROM的程序后,可以继续访问数据空间以地址0x0000开始的数据RAM,而代码存储器却被重新映射到数据空间以地址0x8000开始的位置。因为代码闪存映射到了数据空间,运行的固定用途ROM代码可以像访问数据一样访问存储于用户代码中的数据信息。通过固定用途ROM函数,可简单地通过指针寄存器间接读取数据并返回结果。
因此,将上面给出的程序稍作改动后得到:
BetterTableLookup: move dp[0], #w:StartOfTable + 08000h call UtilityROMGetDP0 . . . ret . . . StartOfTable: dc16 01234h dc16 05678h dc16 098abh dc16 0cdefh在本例程中,调整待读取的地址,以反映执行固定用途ROM程序时闪存的映射地址,然后将其装入DP[0]。这里采用了调用固定用途ROM程序的方法,而不是直接读取数据。当然,直接读取数据只占用一个指令周期,而这一操作则占用了四个指令周期:2个周期用于长调用,1个周期用于读取数据,1个周期用于返回操作。
Tag:控制技术,计算机控制技术,工厂电气控制技术,控制技术
《MAXQ架构的表操作》相关文章
- › MAXQ7665评估板快速入门
- › MAX6951/MAX6950 LED显示驱动器与MAXQ2
- › Rowley CrossWorks和MAXQ2000评估板入
- › MAXQ微控制器的中断编程
- › 在应用编程MAXQ微控制器中可分区擦除的程序和数据闪存
- › 利用液晶的MAXQ微控制器-Using an LCD wit
- 在百度中搜索相关文章:MAXQ架构的表操作
- 在谷歌中搜索相关文章:MAXQ架构的表操作
- 在soso中搜索相关文章:MAXQ架构的表操作
- 在搜狗中搜索相关文章:MAXQ架构的表操作
分类导航
最新更新