- 1、本文档共3页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
串行外设接口模块(SPI)
第9章 串行外设接口模块(SPI)
9.4.2 软件设计
2 MAX5121与DSP的SPI软件实现
源程序代码:
(1)所需的复位和中断向量定义文件“vectors.asm”
// 该文件利用汇编语言代码定义了复位和中断向量
.title vectors.asm
.ref _c_int0,_nothing
.sect .vectors
reset: b _c_int0
int1: b _nothing
int2: b _nothing
int3: b _nothing
int4: b _nothing
int5: b _nothing
int6: b _nothing
(2)主程序
//该程序利用LF2407的SPI模块向MAX5121芯片发送数据用于D/A转换,MAX5121的模拟输出端输出一个三角波
//用C语言编写
#include register.h
int GPR3;
int flag1;
int flag;
initial()
{
asm( setc INTM); //屏蔽中断
WSGR=0X00; //禁止所有的等待状态
asm( CLRC SXM);
asm( CLRC OVM);
asm( CLRC CNF);//B0被配置为数据空间
*SCSR1=0X81FE; //CLKIN=6M,CLKOUT=24M ,并且使能到SPI模块的时钟
*WDCR=0X0E8; //不使能看门狗
}
//SPI模块初始化子程序
int SPIINITIAL()
{
*SPICCR=0X004F; //16 char bits ,在SPICLK的下降沿发送数据,与MAX5121在
//上升沿接收数据配合
*SPICTL=0X0006; //使能主动模式,一般的时钟方式,使能TALK
*SPIBRR=0X0007; //SPI的波特率为3M,CLKOUT=24M
*MCRB=0X003C; //设置通用引脚为SPI功能的引脚
*MCRC=*MCRC0X0FFFE; //设置IOPE0脚为通用引脚
*SPICCR=*SPICCR|0X0080; //使SPI退出复位状态
}
//SPI发送数据子程序,需要发送的数据存放在GPR3寄存器中
int SPITRANS()
{
*PEDATDIR=(*PEDATDIR|0X0100)0X0FFFE;//设置IOPE0为输出,且输出低电平,
//以选中MAX5121芯片
*SPITXBUF=GPR3; //向SPI的发送缓冲器写一个发送数据
while(1)
{
flag=*SPISTS0x40; //flag=SPI的中断标志
if(flag==0x40) break; //如果SPI的中断标志的中断标志为1,则证
//明SPI已经发送成功,则停止等待
}
*SPIRXBUF=*SPIRXBUF; //虚读SPIRXBUF寄存器,以清除SPI中断标志
*PEDATDIR=*PEDATDIR|0x01; //发送完毕,则IOPE0输出高,使发送的数据输
//出到MAX5121的输入寄存器和DAC寄存器中
}
//主程序
main()
{
initial(); //系统初始化
SPIINITIAL(); //SPI初始化
GPR3=0x4000; //根据MAX5121的格式写一个数据,使其输出的模
//拟量为0,具体的数据格式请参照表9.5
flag1=0x00; //三角波上升沿、下降沿标志,当flag1=0时,为上
//升沿,当flag1=1时,为下降沿
while(1)
{
if(flag1==0x00) GPR3=GPR3+2; //因为数据从倒数第2位开始,故要使数据加1,则
//需要在实际的寄存器中加2,此操作对应三角波的
//上升沿
else GPR3=GPR3-2; //因为数据从倒数第2位开始,故要使数据减1,则
//需要在实际的寄存器中减2,此操作对应三角波的
//下降沿
if(GPR3==0x5FFE) flag1=0x01; //若需要转换的数据到FFFH,则开始下降沿
if(GPR3==0x4000) flag1=0x00; //若需要转换的数据到00H,则开始上升沿
SPITRANS(); //调用SPI发送数据子程序
}
}
//当发生干扰中断时,执行此中断服务程序
文档评论(0)