代码合成过程代码合成过程.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
代码合成过程代码合成过程

代码合成过程: 首先要进行配置文件的改写。为了使代码更加清晰,内存安排更加合理,我在配置文件中的第二段新开了一段DATAS,专门用于保存数据,如循环缓冲区、AD初始化数据等等。配置文件具体如下: -m ad.map -o ad.out -e resets MEMORY { PAGE 0: VEC:origin=0x1c00, length=0x0080 PROG:origin=0x1d00,length=0x1000 PAGE 1: STACKS:origin=0x0200, length=0x0300 DATAS:origin=0x0500, length=0x0500 } SECTIONS { vectors: {}VEC PAGE 0 prog: {}PROG PAGE 0 stack_section: {}STACKS PAGE 1 firdata: {}DATAS PAGE 1 } 其中PAGE0专门存放代码,PAGE1专门存放数据。 步骤2:写好配置文件之后,就要开始写中断向量表了。只要把中断向量表中的定时中断改写成: B jump Nop Nop 并且将第一项AD中断改成: Rete Nop Nop Nop 即可 将中断向量表保存在名为int的文件中,后缀名为.asm。 步骤3:配置文件中,-e resets表示从resets标号开始执行程序。starts标号所指向的代码和jump指向的中断服务程序都保存在timer.asm文件中。在timer文件中,首先进行了常量的定义,只要把原滤波实验中FIR滤波的缓冲区的定义和中断试验中中断向量地址定义和AD初始化状态字定义拼在一起即可。 FIR滤波器中只需保存输入数据向量,所以只用开辟一个buferdatax而不需要原来代码中的buferdatay。由于对AD初始化要用端口写指令portw,而portw的源操作数必须是内存数,所以要开辟两个空间保存AD初始化状态字。最终滤波之后的DA输出数据也要用portw指令,所以也要分配一个空间保存输出数据。D_temp用于保存临时读入数据,将在关闭AD使能时从任意其他地址读入的数据(数据本身无意义)保存在这个内存单元中。 分配完空间后,就要进行代码的拼接和改写。首先进行寄存器的重命名: .asg ar5,ORIGIN ;将AD输出,即采样值对应的寄存器设为原始数据 .asg ar3,INPUT ;保存输入信号 .asg ar4,OUTPUT ;保存用于输出的信号 这样寄存器名字有实际意义,便于进行使用。 然后,将中断实验中的中断向量表设置、开中断、AD初始化、定时器初始化拼接在一起组成主程序,随后进入死循环,等待中断。 将中断程序拼在以上程序的后面。一旦产生中断,在允许中断的情况下,就会进入中断服务程序。 整个代码合成过程中,我并没有遇到太大的问题,只是在合成的过程中,特别注意了有些被改名了的变量。而且最开始,我并没对寄存器进行重命名,所以在改写代码的时候特别麻烦。为了简便和可读性,我将ar3到ar5都重新命名。然后要调整循环缓冲区的大小,并且特别注意不要忘记缓冲区长度的设置(也就是BK的值),否则可能会导致程序跑飞。 软件流程和硬件描述以及核心代码叙述: (1)软件流程如下: (2)硬件描述: 定时器: 定时器状态寄存器:寄存器0-15位总共16位。第三位是时钟中断屏蔽位。要将此位屏蔽关闭。 定时器硬件构成: PRD是一个4位寄存器,TDDR是一个16为寄存器。两个寄存器都用于存放分频比。每次向计时器状态寄存器写入开始计时指令后,TDDR就会被装入新的值,并且将此值装入到减法计数器PSC中。每来一个CPU时钟时(只要计时器没有停止工作),就把PSC自减1.当PSC减到0时,就会想TIM高位产生借位信号,使之自减1,同时重新装载TDDR中的数值。而TIM的初值是由PRD设置的,当TIM被减到0时,就会通过TINT产生定时中断 2、AD: AD的地址为7FFFFH,也就是只要地址线上出现这个地址,CS就会变成低电平,AD被选中。REFP是AD参考电压,也就是AD的量程。AIN进行模拟信号输入,AD内部对其采样保持,然后进行模数转换。当转换完成后,就会从INT端口发出中断。这时,由于RD接XF,而XF由CPU中状态寄存器的一位是相同的,所以要想读使能,就必须用软件将XF置成低电平。这样,再发出读信号,就可以从数据线上读出AD数据。而读完后要软件关闭RD。 核心代码叙述: 首先要进行配置文件的改

文档评论(0)

cduutang + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档