《DSP控制器原理及应用技术》第6章通信类外设及其应用开发_第1页
《DSP控制器原理及应用技术》第6章通信类外设及其应用开发_第2页
《DSP控制器原理及应用技术》第6章通信类外设及其应用开发_第3页
《DSP控制器原理及应用技术》第6章通信类外设及其应用开发_第4页
《DSP控制器原理及应用技术》第6章通信类外设及其应用开发_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第六章通信类外设及其应用开发工信部十二五规划教材《DSP控制器原理与应用技术》编写组第6章通信类外设及其

应用开发6.1串行通信(SCI)模块6.2串行外设(SPI)模块6.3增强控制器局域网(eCAN)模块6.4多通道缓冲串口(McBSP)模块6.5I2C总线模块

一、结构与点-点通信原理6.1.1SCI模块的结构与工作原理6.1串行通讯接口模块(SCI)二、数据传输格式1.数据帧格式

NRZ(Non-return-to-zero)格式,每个数据(字符)均以相同的帧格式传送。起始位(Start):占用1位,为低表示数据的开始。数据位(Data):1-8位,由低位(LSB)开始传输。奇/偶校验位(Parity):1位,用于纠错停止位(Stop):1-2位,高电平,表示数据帧的结束。

二、数据传输格式2.异步通信格式

1位数据需8个内部SCICLK时钟周期,多数表决。可靠性高于普通单片机。3.电气和物理接口标准

RS232、RS422/RS485三、SCI操作控制1.SCI发送操作①使TXENA=1,允许发送器发送数据。②CPU将数据写入SCITXBUF,TXEMPTY为0。同时TXRDY=0。③数据从SCITXBUF加载到TXSHF,TXRDY高。

TXSHF中的数据逐一由引脚SCITXD上发送出去。④TXRDY变高后,CPU再将下一帧数据写入SCITXBUF。⑤第一帧数据发送完毕,第二帧传送到TXSHF,并开始发送。⑥当TXENA=0,将当前数据帧发送完毕后再停止。三、SCI操作控制2.SCI接收操作①令RXENA=1,允许接收器接收数据。②接收器检测到起始位(连续4个以上SCICLK低电平),将数据位、地址位、奇偶校验位依次移入RXSHF。③一帧接收完毕,将其传送到SCIRXBUF,并置位RXRDY标志。④读取SCIRXBUF数据后,RXRDY标志自动消除。⑤接收器继续接收下一帧数据。⑥若第二帧数据尚未接收完毕,RXENA=0,则将其接收完毕后再停止,但RXSHF中数据不传送到SCIRXBUF。三、SCI操作控制3.错误处理操作①数据帧错误:收不到期待的停止位,SCIRXST[FE]置位。②奇/偶校验错误:“1”的个数不符合,SCIRXST[PE]置位。③溢出错误:SCIRXBUF中数据被覆盖,SCIRXST[OE]置位。④间断错误:停止位后连续保持低电平10位以上,置位SCIRXST[BRKDT]。四种错误发生时,均可申请中断。4.中断操作

数据发送完毕、接收到数据及接收错误时可产生中断。发送中断标志:SCICTL2[TXRDY],接收中断标志:SCIRXST[RXRDY],接收数据错误中断标志:SCIRXST[RXERROR],间断中断标志:SCIRXST[BRKDT四、多处理器异步通信原理1.空闲线模式

帧间空闲位10位;帧内空闲位<10位

2.地址位模式

数据帧中增加地址/数据位。1-地址0-数据地址位适用于短信息传送;空闲线适用于长信息传送。6.1.2SCI模块的寄存器1.SCI通信控制寄存器SCICCR2.SCI控制寄存器1SCICTL13.SCI控制寄存器2(SCICTL2)4.接收状态寄存器5.SCI接收数据缓冲器SCIRXBUF位名称说明动作15SCIFFE接收FIFO帧错误标志(FIFO允许时有效)0-无帧错误;1-有帧错误14SCIFFPE接收FIFO奇偶错误标志(FIFO允许时有效)0-无奇偶错误;1-有奇偶错误7:0RXDT6[7:0}接收到的数据6.SCIFIFO发送寄存器SCIFFTX位名称说明动作15SCIRSTSCI发送/接收通道复位0-复位;1-使能操作14SCIFFENAFIFO增强功能允许0-禁止;1-允许13TXFIFOReset发送FIFO复位0-复位,指针指向0;1-使能操作12:8TXFFST{3:0]发送FIFO状态位00000-1000——FIFO有x个字未发送7TXFFINTFlagFIFO发送中断标志0-无中断;1-有中断6TXFFINTCLRFIFO发送中断清除位0-无影响;1-清除中断标志5TXFFIENAFIFO发送中断允许0-禁止;0-允许4:0TXFFIL[4:0]FIFO发送中断级设定当前状态位TXFFST<=TXFFIL时发生中断7.SCIFIFO接收寄存器SCIFFRX位名称说明动作15RXFFOVF接收FIFO溢出标志0-无溢出;1-溢出14RXFFOVFCLR溢出标志清除位0-无影响;1-清除溢出标志13RXFIFOReset接收FIFO复位0-复位,指针指向0;1-使能操作12:8RXFFST{3:0]接收FIFO状态位00000-1000——接收FIFO收到x个字7RXFFINTFlagFIFO接收中断标志0-无中断;1-有中断6RXFFINTCLRFIFO接收中断清除位0-无影响;1-清除中断标志5RXFFIENAFIFO接收中断允许0-禁止;0-允许4:0RXFFIL[4:0]FIFO接收中断级设定当前状态位RXFFST>=RXFFIL时发生中断8.SCIFIFO控制寄存器SCIFFCT位名称说明动作15ABD自动波特率检测标志0-未完成检测;1-完成检测14ABDCLRABD标志清除位0-无影响;1-清除ABD标志13CDC自动波特率检测允许0-禁止;1-允许7:0FFTXDLYL[4:0]发送FIFO发送数据时每个数据之间的延时(以波特率时钟为单位)8.波特率选择寄存器与波特率设置BAUD15(MSB)BAUD14波特率选择高字节寄存器(SCIHBAUD)76543210BAUD13BAUD12BAUD11BAUD10BAUD9BAUD8BAUD6波特率选择低字节寄存器(SCILBAUD76543210BAUD5BAUD4BAUD3BAUD2BAUD1BAUD7SCI波特率=LSPCLK(BRR+1)x8LSPCLK16, BRR=1to65535, BRR=0BAUD0(LSB)6.1.3SCI模块应用示例下位机发送欢迎信息“HelloWorld!”给上位机;上位机收到欢迎信息后,发送一个字符给下位机;下位机接收到该字符后,再将其回发给上位机。#include"DSP2833x_Device.h"#include"DSP2833x_Examples.h"//函数声明.voidscib_echoback_init(void); //声明SCI初始化函数voidscib_fifo_init(void); //声明FIFO初始化函数voidscib_xmit(inta);//声明发送字符函数voidscib_msg(char*msg); //声明发送字符串函数//全局变量声明Uint16LoopCount;Uint16ErrorCount;voidmain(void){Uint16ReceivedChar;char*msg;//Step1.初始化系统控制InitSysCtrl();//Step2.初始化GPIOInitGpio();//Step3.清除所有中断;初始化PIE向量表DINT;InitPieCtrl(); //初始化PIE控制IER=0x0000; //禁止CPU中断IFR=0x0000; //清除所有CPU中断标志InitPieVectTable(); //初始化PIE向量表//Step4.初始化器件外设,本例不需要//Step5.用户特定代码LoopCount=0;ErrorCount=0;scib_fifo_init(); //初始化FIFOscib_echoback_init(); //初始化SCImsg="\r\n\n\nHelloWorld!\0";scib_msg(msg);msg="\r\nEnteracharacterforDSPtoechoback!\n\0";scib_msg(msg);//Step6.无限循环,查询是否收到字符并回发for(;;){msg="\r\nEnteracharacter:\0";scib_msg(msg);//等待输入字符while(ScibRegs.SCIFFRX.bit.RXFFST!=1){} //等待RXFFST=1ReceivedChar=ScibRegs.SCIRXBUF.all; //获取字符msg=“Yousent:\0”;//回发scib_msg(msg);scib_xmit(ReceivedChar);LoopCount++;}}//Step7.用户自定义函数:voidscib_echoback_init() //定义SCI初始化函数{ScibRegs.SCICCR.all=0x0007;//1位停止位,无奇偶校验,8位字符ScibRegs.SCICTL1.all=0x0003;//复位,允许发送和接收ScibRegs.SCICTL2.all=0x0003;//允许接收和发送中断ScibRegs.SCIHBAUD=0x0001 //9600波特率ScibRegs.SCILBAUD=0x00E7;ScibRegs.SCICTL1.all=0x0023; //退出复位}voidscib_xmit(inta) //定义发送字符函数{while(ScibRegs.SCIFFTX.bit.TXFFST!=0){}ScibRegs.SCITXBUF=a;}voidscib_msg(char*msg) //定义发送字符串函数{inti;i=0;while(msg[i]!='\0'){scib_xmit(msg[i]);i++;}}voidscib_fifo_init() //定义FIFO初始化函数{ScibRegs.SCIFFTX.all=0xE040;ScibRegs.SCIFFRX.all=0x204f;ScibRegs.SCIFFCT.all=0x0;}6.2.1SPI模块结构与工作原理一、结构与点-点通信原理6.1串行通讯接口模块(SCI)1.主模式①主控制器输出时钟给从控制器,使二者同步。②主控制器将数据写入SPIDAT,由MSB开始,从SPISIMO引脚上串行输出。③从控制器接收数据并移入SPIDAT的LSB。④从控制器将数据并行写入SPIRXBUF,供CPU读出。同时可以产生中断。2.从模式①外部主控制器为从控制器提供时钟,使二者同步。②主控制器从SPISTE引脚输出低电平给从控制器,允许从控制器发送数据。③从控制器写数据至SPIDAT,从SPISOMI输出。④主控制器从SPISOMI接收数据,并移入SPIDAT。⑤主控制器将数据并行写入SPIRXBUF。二、波特率和时钟模式1.SPI波特率的设定由SPI波特率寄存器SPIBRR中的值确定。当SPIBRR=3~127时,SPI

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论