网站大量收购独家精品文档,联系QQ:2885784924

串行外设接口模块(SPI).docVIP

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 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)

jgx3536 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档