SCI模块要点.docVIP

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

SCI模块SCI即一种通用异步通信接口UART,SCI采用异步通信方式,只需要发送和接收两根线,通信双方微处理器使用各自的时钟,适用于对另外的设备长距离的低速率通信。在DSP中,SCI就是UART通信所谓的FIFO就是先进先出的意思。SCI工作在FIFO模式下一般是因为所传输的信息并不是以一个帧为单位,而是以多个帧组成的一个包为信息单位的在中断中,你读FIFO接收寄存器读到的数据是首先接收到的数据,再读一次的话读到的是接收到的第二个数据。而16深度的话就是最多能保存最近的16个接收数据,如果接收数据超过16个的话会产生相应的溢出查询等待的方式在发送一个字节的过程中会占用一个周期中的1ms时间(这是波特率为9600bps时候的情况),要等待一个字节完全的发送出去才能够进行其它模块的工作,这样的话是非常耗用时间和DSP的资源利用率的,而且其它模块的时间根本得不到保证而方式则基本不占用系统的周期等待时间,直接往Buf里面写数据就会自动的往外发送。?对于FIFO堆栈深度的设定只影响中断产生事件的频率FIFO深度是指有多少数据存入到FIFO中时会产生中断请求事件,FIFO的深度设定时当然要大于所定义的数据格式的位数,数据位数一定的情况下,深度越大所发生的中断请求频率越低。FIFO队列接收有一个缺点就是,接收的数据包格式的帧数不能改变,如果是5个字节就必须都是5个字节。如果一会是5个字节,一会是3个字节。那3个字节的数据包会和下一个数据包的前两个字节产生一次中断,由于不同数据包的信息不同这样软件不易处理 SCI FIFO中断标志和使能逻辑位 程序: 初始化程序: void InitSci(Uint16 num,Uint16 bps) { volatile struct SCI_REGS *Scireg; //定义结构体变量 Uint16 BRR_val; Uint16 data=0; if(num==0) Scireg=ScibRegs; //设置num变量来确定使用哪个SCI模块 else Scireg=ScicRegs; Scireg-SCICCR.all =0x0007; 字节长度为8位,选择空闲线模式。屏蔽自测模式 Scireg-SCICTL1.all =0x0003; 接收使能,发送使能 //RxErrInt:SCI接收中断使能位; 非SLEEP;TXWAKE:1:发送模式唤醒,空闲线模式或地址位模式 0:不唤醒,在空闲线模式下,向该位写1然后写数据到SCITXBUF产生一个11位数据长度的空闲时间。 BRR_val = bps/8)-1; //设置波特率 BRR=(LSPCLK/SCI异步波特率/8)-1; Scireg-SCIHBAUD =(BRR_val8); Scireg-SCILBAUD =(BRR_val); Scireg-SCICTL2.all =0x0003; //使能RXRDY/BRKDT中断,使能TXRDY中断; Scireg-SCICTL2.bit.RXBKINTENA=1; //接收缓冲/抑制中断使能 Scireg-SCICTL2.bit.TXINTENA =0; //屏蔽TXRDY中断 Scireg-SCICTL1.all =0x0023; 0010 0011 //接收使能,发送使能,非睡眠状态,软件复位无效 while(Scireg-SCIRXST.bit.RXRDY == 1) //SCI接收就绪标志位 1:新数据可读,0:没有新数据可读 data = Scireg-SCIRXBUF.all; //数据接收缓冲寄存器赋值给data; } 发送数据程序 void UartSndByte(Uint16 num,Uint16 data) //单字节查询发送 { if(num==0) //num用来判断哪个SCI模块使能 { while(ScibRegs.SCICTL2.bit.TXRDY==0); //等待发送缓冲寄存器准备就绪 ScibRegs.SCITXBUF=data; while(ScibRegs.SCICTL2.bit.TXRDY==0); } else if(num==1) { while(ScicRegs.SCICTL2.bit.TXRDY==0); ScicRegs.SCITXBUF=data; while(ScicRegs.SCICTL2.bit.TXRDY==0); } } 3.接收数据程序 Uint16 UartRcvByte(Uin

文档评论(0)

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

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

1亿VIP精品文档

相关文档