数字信号处理技术_07(电压信号的输出)电压控制信号的输出
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MEMORY
{
PAGE 0:EPROM:origin=2000H,length=1000H
PAGE 1:DARAM:origin=3000H,length=1000H
}
SECTIONS
{
.text:> EPROMPAGE 0
.vectors:> EPROMPAGE 0
.data :> DARAMPAGE 1
//当flag1=0时为上升沿,当flag1=1时为下降沿
while(1)
{
if(flag1==0x00)GPR3=GPR3+2;
//因为操作码的位12~1对应12位DAC数据,所以,要使输出的模拟量
//加1,需要MAX5121的操作码加2。此操作对应三角波的上升沿
else GPR3=GPR3-2;//此操作对应三角波的下降沿
{
return;
}
7
1.SPI总线波特率的设置
2.MAX5121与LF2407的SPI软件实现
3.程序分析
7.6.3
MEMORY
{
PAGE 0:/*程序空间*/
VECS:origin=0000H,length=0040H/*中断向量存储空间*/
PVECS:origin=0044H,length=0100H/*外围中断向量*/
9.串行外设接口中断优先级控制寄存器(SPIPRI)
7.
7.
7.
7.
1.创建项目
2.新文件导入新项目
3.编译、汇编、链接新工程
7.5 CCS
7.5.1
MEMORY
{
PAGE 0:ROM:origin=2000H,length=1000H
PAGE 1:RAM:origin=200H,length=1000H
{
*SPICCR=0x004F;//位7=0,SPI软件复位。
//位6=1,在下降沿输出数据,在上升沿接收数据
//位3~0=1111,数据长度为16位
*SPICTL=0x0006;//位3=0,无延时时钟方式
//位2=1,使能主动工作方式
//位1=1,使能TALK,允许发送
//位0=0,禁止中断
*SPIBRR=0x0007;//SPI的波特率
PAGE 1:RAM:origin=200H,length=1000H
}
SECTIONS
{
.text:load = ROM
.bss:load = RAM
.data:>ROM
}
if(GPR3==0x5FFE)flag1=0x01;//需转换的数据到FFFH后开始下降沿
if(GPR3==0x4000)flag1=0x00;//需转换的数据到000H后开始上升沿
spitrans ();//调用SPI发送数据子程序
}
}
//当发生干扰中断时,执行此中断服务程序
void interrupt nothing()
PM:origin=0150H,length=7EB0H/*片内Flash存储空间*/
PAGE 1:/*数据空间*/
BLOCK_B2:origin=0060H,length=0020H/*块B2*/
BLOCK_B0:origin=0200H,length=0100H
/*块B0,若CNF=0,则分配为片内DARAM*/
spiinit ();//SPI初始化
GPR3=0x4000;//MAX5121接收到的操作码=0100 0000 0000 0000 B
//位15~13=010,数据同时移入输入和DAC寄存器
//位12~1=0000 0000 0000 B,MAX5121输出模拟量0
flag1=0x00;//三角波上升沿、下降沿标志
*PEDATDIR=*PEDATDIR&0x0FFFE;// IOPE0输出低电平,以选中MAX5121
*SPITXBUF=GPR3;//向SPI的发送缓冲器写一个发送数据
while(1)
{
flag=*SPISTS&0x40;//flag=SPI的中断标志
if(flag==0x40)break;//如果SPI的中断标志的中断标志为1,证明
*MCRB=0x003C;//设置通用引脚为SPI功能的引脚
*MCRC=*MCRC&0x0FFFE;//设置IOPE0脚为通用引脚
*SPICCR=*SPICCR|0x0080;//使SPI退出复位状态
}
//SPI发送数据子程序,需要发送的数据存放在GPR3寄存器中
int spitrans()
{
*PEDATDIR=*PEDATDIR|0x0100;//设置IOPE0为输出
2.串行外设接口操作控制寄存器(SPICTL)
3.串行外设接口状态寄存器(SPISTS)
4.串行外设接口波特率设置寄存器(SPIBRR)
5.串行外设接口仿真接收缓冲器寄存器(SPIRXEMU)
6.串行外设接口接收缓冲器寄存器(SPIRXBUF)
7.串行外设接口发送缓冲器寄存器(SPITXBUF)
8.串行外设接口发送/接收缓冲器寄存器(SPIDAT)
intGPR3;用于存放即将发送到MAX5121的数据
intflag1;
intflag;
//系统初始化子程序
initial()
{
asm(" setcINTM");//禁止所有中断
asm(" setcSXM");//抑制符号位扩展
asm(" clrcOVM");//累加器中结果正常溢出
asm(" clrcCNF");//B0被配置为数据存储空间
*SCSR1=0x81FE;//位11~9=000,CLKOUT=4*CLKIN
//位5=1,使能SPI模块的时钟
*WDCR=0x0E8;//不使能看门狗
*IMR=0x0000;//禁止所有中断
*IFR=0x0FFFF;//清除全部中断标志,"写1清0"
}
//SPI模块初始化子程序
int spiinit()
第
7
7
图7.1LF2407A电压输出接口电路
7
7
7
图7.2 MAX5121引脚排列
7
7
图7.3 MAX5121的SPI时序图
7
7
SPI模块共有4个相关的I/O引脚:
SPISOMI(SPI主动输入/从动输出引脚)
SPISIMO(SPI从动输入/主动输出引脚)
SPICLK(SPI时钟引脚)
SPISTE(SPI从动发送使能引脚)
7
1.主动方式
图7.4串行外设接口主控制器/从控制器的连接
2.从动方式
3.串行外设接口波特率设置
(1)当SPIBRR=3~127时:
SPI波特率=SYSCLK/(SPIBRR+1),SPIBRR=(SYSCLK/SPI波特率)-1
(2)当SPIBRR=0,1或2时:
SPI波特率=SYSCLK/4
7
1.串行外设接口配置控制寄存器(SPICCR)
//SPI已经发送成功,则停止等待
}
*SPIRXBUF=*SPIRXBUF;//虚读SPIRXBUF,以清除SPI中断标志
*PEDATDIR=*PEDATDIR|0x01;//发送完毕,IOPE0输出高平,使发送的数//据输出到MAX5121的输入寄存器和DAC寄存器中
}
//主程序
main()
{
initial();//系统初始化
int2:b_nothing
int3:b_nothing
int4:b_nothing
int5:b_nothing
int6:b_nothing
2.主程序Dyxhsc.c
//该程序利用LF2407的SPI模块wenku.baidu.comMAX5121芯片发送数据用于D/A转换
//MAX5121的模拟输出端输出一个三角波
#include "register.h"
.bss :> DARAMPAGE 1
}
7
7
1.所需的复位和中断向量定义文件“vectors.asm”
//该文件利用汇编语言代码定义了复位和中断向量
.title"vectors.asm"
.ref_c_int0,_nothing
.sect".vectors"
reset:b_c_int0
int1:b_nothing
}
SECTIONS
{
.text:load = ROM
.bss:load = RAM
.data:>ROM
}
7.5.2
1.段
(1).text
(2).data
(3).bss
(4).usect
(5).sect
2.在*.cmd文件里指定段存储空间
(1)MEMORY伪指令
(2)SECTIONS伪指令
(3)*.cmd文件里指定段存储空间
作业
7.1简述串行外设接口模块(SPI)的主、从两种操作方式的特点、工作过程。
7.3试画出串行外设接口模块(SPI)与MAX5121的典型连接方法,并说明TMS320LF2407作为主机通过MAX5121实现电压信号输出的过程。
7.6注释下面的命令文件:
MEMORY
{
PAGE 0:ROM:origin=2000H,length=1000H
BLOCK_B1:origin=0300H,length=0100H/*块B1*/
}
SECTIONS
{
.text:>PMPAGE 0
.vectors:>VECSPAGE 0
.pvectors:>PVECSPAGE 0
.data:>BLOCK_B0PAGE 1
.bss>BLOCK_B0PAGE 1
}
7.6.4 TMS320LF2407
{
PAGE 0:EPROM:origin=2000H,length=1000H
PAGE 1:DARAM:origin=3000H,length=1000H
}
SECTIONS
{
.text:> EPROMPAGE 0
.vectors:> EPROMPAGE 0
.data :> DARAMPAGE 1
//当flag1=0时为上升沿,当flag1=1时为下降沿
while(1)
{
if(flag1==0x00)GPR3=GPR3+2;
//因为操作码的位12~1对应12位DAC数据,所以,要使输出的模拟量
//加1,需要MAX5121的操作码加2。此操作对应三角波的上升沿
else GPR3=GPR3-2;//此操作对应三角波的下降沿
{
return;
}
7
1.SPI总线波特率的设置
2.MAX5121与LF2407的SPI软件实现
3.程序分析
7.6.3
MEMORY
{
PAGE 0:/*程序空间*/
VECS:origin=0000H,length=0040H/*中断向量存储空间*/
PVECS:origin=0044H,length=0100H/*外围中断向量*/
9.串行外设接口中断优先级控制寄存器(SPIPRI)
7.
7.
7.
7.
1.创建项目
2.新文件导入新项目
3.编译、汇编、链接新工程
7.5 CCS
7.5.1
MEMORY
{
PAGE 0:ROM:origin=2000H,length=1000H
PAGE 1:RAM:origin=200H,length=1000H
{
*SPICCR=0x004F;//位7=0,SPI软件复位。
//位6=1,在下降沿输出数据,在上升沿接收数据
//位3~0=1111,数据长度为16位
*SPICTL=0x0006;//位3=0,无延时时钟方式
//位2=1,使能主动工作方式
//位1=1,使能TALK,允许发送
//位0=0,禁止中断
*SPIBRR=0x0007;//SPI的波特率
PAGE 1:RAM:origin=200H,length=1000H
}
SECTIONS
{
.text:load = ROM
.bss:load = RAM
.data:>ROM
}
if(GPR3==0x5FFE)flag1=0x01;//需转换的数据到FFFH后开始下降沿
if(GPR3==0x4000)flag1=0x00;//需转换的数据到000H后开始上升沿
spitrans ();//调用SPI发送数据子程序
}
}
//当发生干扰中断时,执行此中断服务程序
void interrupt nothing()
PM:origin=0150H,length=7EB0H/*片内Flash存储空间*/
PAGE 1:/*数据空间*/
BLOCK_B2:origin=0060H,length=0020H/*块B2*/
BLOCK_B0:origin=0200H,length=0100H
/*块B0,若CNF=0,则分配为片内DARAM*/
spiinit ();//SPI初始化
GPR3=0x4000;//MAX5121接收到的操作码=0100 0000 0000 0000 B
//位15~13=010,数据同时移入输入和DAC寄存器
//位12~1=0000 0000 0000 B,MAX5121输出模拟量0
flag1=0x00;//三角波上升沿、下降沿标志
*PEDATDIR=*PEDATDIR&0x0FFFE;// IOPE0输出低电平,以选中MAX5121
*SPITXBUF=GPR3;//向SPI的发送缓冲器写一个发送数据
while(1)
{
flag=*SPISTS&0x40;//flag=SPI的中断标志
if(flag==0x40)break;//如果SPI的中断标志的中断标志为1,证明
*MCRB=0x003C;//设置通用引脚为SPI功能的引脚
*MCRC=*MCRC&0x0FFFE;//设置IOPE0脚为通用引脚
*SPICCR=*SPICCR|0x0080;//使SPI退出复位状态
}
//SPI发送数据子程序,需要发送的数据存放在GPR3寄存器中
int spitrans()
{
*PEDATDIR=*PEDATDIR|0x0100;//设置IOPE0为输出
2.串行外设接口操作控制寄存器(SPICTL)
3.串行外设接口状态寄存器(SPISTS)
4.串行外设接口波特率设置寄存器(SPIBRR)
5.串行外设接口仿真接收缓冲器寄存器(SPIRXEMU)
6.串行外设接口接收缓冲器寄存器(SPIRXBUF)
7.串行外设接口发送缓冲器寄存器(SPITXBUF)
8.串行外设接口发送/接收缓冲器寄存器(SPIDAT)
intGPR3;用于存放即将发送到MAX5121的数据
intflag1;
intflag;
//系统初始化子程序
initial()
{
asm(" setcINTM");//禁止所有中断
asm(" setcSXM");//抑制符号位扩展
asm(" clrcOVM");//累加器中结果正常溢出
asm(" clrcCNF");//B0被配置为数据存储空间
*SCSR1=0x81FE;//位11~9=000,CLKOUT=4*CLKIN
//位5=1,使能SPI模块的时钟
*WDCR=0x0E8;//不使能看门狗
*IMR=0x0000;//禁止所有中断
*IFR=0x0FFFF;//清除全部中断标志,"写1清0"
}
//SPI模块初始化子程序
int spiinit()
第
7
7
图7.1LF2407A电压输出接口电路
7
7
7
图7.2 MAX5121引脚排列
7
7
图7.3 MAX5121的SPI时序图
7
7
SPI模块共有4个相关的I/O引脚:
SPISOMI(SPI主动输入/从动输出引脚)
SPISIMO(SPI从动输入/主动输出引脚)
SPICLK(SPI时钟引脚)
SPISTE(SPI从动发送使能引脚)
7
1.主动方式
图7.4串行外设接口主控制器/从控制器的连接
2.从动方式
3.串行外设接口波特率设置
(1)当SPIBRR=3~127时:
SPI波特率=SYSCLK/(SPIBRR+1),SPIBRR=(SYSCLK/SPI波特率)-1
(2)当SPIBRR=0,1或2时:
SPI波特率=SYSCLK/4
7
1.串行外设接口配置控制寄存器(SPICCR)
//SPI已经发送成功,则停止等待
}
*SPIRXBUF=*SPIRXBUF;//虚读SPIRXBUF,以清除SPI中断标志
*PEDATDIR=*PEDATDIR|0x01;//发送完毕,IOPE0输出高平,使发送的数//据输出到MAX5121的输入寄存器和DAC寄存器中
}
//主程序
main()
{
initial();//系统初始化
int2:b_nothing
int3:b_nothing
int4:b_nothing
int5:b_nothing
int6:b_nothing
2.主程序Dyxhsc.c
//该程序利用LF2407的SPI模块wenku.baidu.comMAX5121芯片发送数据用于D/A转换
//MAX5121的模拟输出端输出一个三角波
#include "register.h"
.bss :> DARAMPAGE 1
}
7
7
1.所需的复位和中断向量定义文件“vectors.asm”
//该文件利用汇编语言代码定义了复位和中断向量
.title"vectors.asm"
.ref_c_int0,_nothing
.sect".vectors"
reset:b_c_int0
int1:b_nothing
}
SECTIONS
{
.text:load = ROM
.bss:load = RAM
.data:>ROM
}
7.5.2
1.段
(1).text
(2).data
(3).bss
(4).usect
(5).sect
2.在*.cmd文件里指定段存储空间
(1)MEMORY伪指令
(2)SECTIONS伪指令
(3)*.cmd文件里指定段存储空间
作业
7.1简述串行外设接口模块(SPI)的主、从两种操作方式的特点、工作过程。
7.3试画出串行外设接口模块(SPI)与MAX5121的典型连接方法,并说明TMS320LF2407作为主机通过MAX5121实现电压信号输出的过程。
7.6注释下面的命令文件:
MEMORY
{
PAGE 0:ROM:origin=2000H,length=1000H
BLOCK_B1:origin=0300H,length=0100H/*块B1*/
}
SECTIONS
{
.text:>PMPAGE 0
.vectors:>VECSPAGE 0
.pvectors:>PVECSPAGE 0
.data:>BLOCK_B0PAGE 1
.bss>BLOCK_B0PAGE 1
}
7.6.4 TMS320LF2407