- 1、本文档共8页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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。
核心代码叙述:
首先要进行配置文件的改
您可能关注的文档
- 仓库管理系统论文11仓库管理系统论文11.doc
- 他们需要关爱.他们需要关爱..doc
- 他们需要更多的爱他们需要更多的爱.doc
- 他山之石 可以攻玉他山之石 可以攻玉.doc
- 他就是贝律铭他就是贝律铭.doc
- 他汀类药物的介绍他汀类药物的介绍.doc
- 他达那非片剂说明书他达那非片剂说明书.doc
- 付出即是责任付出即是责任.doc
- 付平凡,古代文学 2付平凡,古代文学 2.doc
- 付岚岚实习报告付岚岚实习报告.doc
- 第18讲 第17课 西晋的短暂统一和北方各族的内迁.docx
- 第15讲 第14课 沟通中外文明的“丝绸之路”.docx
- 第13课时 中东 欧洲西部.doc
- 第17讲 第16 课三国鼎立.docx
- 第17讲 第16课 三国鼎立 带解析.docx
- 2024_2025年新教材高中历史课时检测9近代西方的法律与教化含解析新人教版选择性必修1.doc
- 2024_2025学年高二数学下学期期末备考试卷文含解析.docx
- 山西版2024高考政治一轮复习第二单元生产劳动与经营第5课时企业与劳动者教案.docx
- 第16讲 第15课 两汉的科技和文化 带解析.docx
- 第13课 宋元时期的科技与中外交通.docx
文档评论(0)