这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 瑞萨建立数据表格及查表指令求助

共4条 1/1 1 跳转至

瑞萨建立数据表格及查表指令求助

助工
2009-03-04 15:41:46     打赏
    想问一下,瑞萨怎样建立数据表格,比如建立三相正弦脉宽数据表,将其按一定的格式存入RAM中,建立好数据指针,以便按一定的寻址方式查询。我不知道用什么指令(觉得应该是哪条伪指令吧),还有在程序中查这个表格的时候又应该用什么指令,请大家指点,我用的是芯片是M16C/60,程序是用汇编写的。



关键词: 瑞萨     建立     数据     表格     查表     指令     求助    

助工
2009-03-09 15:56:42     打赏
2楼
具体对楼主要求不是很了解,推荐使用SMOVB,SMOVF指令比较方便:
SMOVB.size 按地址减小的方向,依次将一段内存的数据逐个传送到另一段内存中。其中,被传送数据的源地址为由R1H和A0构成的20位地址,目的地址在A1中,传送次数存在R3中
SMOVF.size 按地址增加的方向,依次将一段内存的数据逐个传送到另一段内存中。其中,被传送数据的源地址为由R1H和A0构成的20位地址,目的地址在A1中,传送次数存在R3中

菜鸟
2009-03-09 21:00:55     打赏
3楼

先想想下面的问题:
数据为什么要放在RAM中呢?一般来说RAM的资源比ROM更稀缺,如果是固定数据,最好放在ROM中,如果希望提高访问速度,那就放在地址 < 10000H德Data Flash中。只是因为在同样的情况下,使用MOV(64K以内的寻址)指令的时间 < 使用LDE(>64K的寻址)指令。

好吧,假设你的数据需要随时修改,并且要求速度快,那么就放在RAM中吧。

那么现在来看第二个问题(先不管你是使用C还是汇编,呵呵):
如何把ROM的数据放在RAM中。
1 假设你只是在初始化的时候放数据。那就简单了,因为初始化不需要考虑时间。直接用C更直观。 for ( i = 0; i < 1000; i ++ )  * RAM ++ = * ROM ++;
2 假设你需要在程序中常常完成搬运。那么你有3种方案。
  a 和1一样,这种方案的特点是速度慢,但是由于其优先基低没有什么其他限制,非常方便。
  b 使用SMOVF和SMOVB指令,特点是速度快,缺点也很明显,需要使用汇编语言,这对于C的构架很麻烦,不过幸好,瑞萨的编译器提供这2个汇编语句的宏函数!但是在这个过程会被中断终止。所以需要屏蔽中断先。
  c 如果你觉得速度很重要而中断又不能被屏蔽。那么没有办法,你只能用DMA了。这个优点就多了,速度快,优先级高,比中断和CPU都高。缺点是需要占用DMA,初始化麻烦。

好了,现在假设你已经把数据放在乐RAM中,为了叙述方便,放在400H处吧。(特别注意,为了尽可能的提高速度,请放在偶数地址。没办法,M16C/60是16位机!)那么如何快速查表呢?

为了快速查表,我们需要把表的位置等信息映射在CPU内部,但是CPU的寄存器在正常程序中也要使用,这个时候使用第二组寄存器就体现优势了(M16C有2组CPU寄存器)。

先初始化: 
FSET   B               ;切换寄存器组
MOV.W #0,  A0    ;A0指向数组表起始
MOV.W #XXX,A1 ;A1指向目的地址

好了,如果需要查表,就如下写。
FSET B
MOV.W  #400[A0], [A1]
FCLR B


助工
2009-03-13 20:12:27     打赏
4楼
        谢谢两位工程师的细心解答啊,我的数据表格是放在ROM的(因为现在才考虑清楚),看了后思路清楚多了,我再理一下,思考一下。

共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]