第6章TMS320F2812串行通信接口SCI

上传人:仙*** 文档编号:235416295 上传时间:2023-11-08 格式:PPT 页数:32 大小:960.02KB
返回 下载 相关 举报
第6章TMS320F2812串行通信接口SCI_第1页
第1页 / 共32页
第6章TMS320F2812串行通信接口SCI_第2页
第2页 / 共32页
第6章TMS320F2812串行通信接口SCI_第3页
第3页 / 共32页
点击查看更多>>
资源描述
第6章 TMS320F2812串行通信接口(SCI)学习重点学习重点F2812串口通信串口通信SCI特点及结构。特点及结构。SCI模块寄存器各位的含义及配置。模块寄存器各位的含义及配置。基于基于C语言的语言的SCI程序设计实例。程序设计实例。学习内容1.SCI概述概述2.SCI 模块发送和接收数据的工作原理3.SCI 数据格式4.SCI 通信波特率通信波特率5.SCI 发送和接收数据的机制6.多处理器通信7.SCI 的例程1、SCI概述SCI(Serial Communication Interface),即串行通信接口,),即串行通信接口,是一个双线的异步串口,即具有接收和发送两根信号线的异是一个双线的异步串口,即具有接收和发送两根信号线的异步串口,一般可以看作是步串口,一般可以看作是 UART(通用异步接收(通用异步接收/发送装置)。发送装置)。F2812 的的 SCI 模块支持模块支持 DSP 与采用与采用 NRZ(non-return-to-zero 不归零)标准格式的异步外围设备之间进行数字通信。不归零)标准格式的异步外围设备之间进行数字通信。2812 内部具有两个相同的内部具有两个相同的 SCI 模块,模块,SCIA 和和 SCIB,每一,每一个个 SCI 模块都各有一个接收器和发送器。模块都各有一个接收器和发送器。SCI 的接收器和发的接收器和发送器各具有一个送器各具有一个 16 级深度的级深度的 FIFO(First in fist out 先入先先入先出)队列,它们还都有自己独立的使能位和中断位,可以在出)队列,它们还都有自己独立的使能位和中断位,可以在半双工通信中进行独立的操作,或者在全双工通信中同时进半双工通信中进行独立的操作,或者在全双工通信中同时进行操作。行操作。串行通信的三种方式 根据信息的传送方向,串行通信可以分为单工、半双根据信息的传送方向,串行通信可以分为单工、半双工和全双工三种,其各自的定义如下图所示。工和全双工三种,其各自的定义如下图所示。SCI的CPU接口SCI 模块具有两个引脚,模块具有两个引脚,SCITXDA 和和 SCIRXDA,分别实现发送数据和接收数据的功,分别实现发送数据和接收数据的功能,分别对应于能,分别对应于 GPIOF 模块的第模块的第 4 和第和第 5 位,在编程初始化的时候,需要将位,在编程初始化的时候,需要将 GPIOFMUX 寄存器的第寄存器的第 4 和第和第 5 位置为位置为 1,才能使得这两个引脚具有发送和接收的功,才能使得这两个引脚具有发送和接收的功能,否则就是普通的能,否则就是普通的 I/O 引脚。引脚。CPU 的系统时钟的系统时钟 SYSCLKOUT经过低速预定标器之后输出低速时钟经过低速预定标器之后输出低速时钟 LSPCLK 供给供给 SCI。要保证。要保证 SCI 的正常运行,系统控制模块下必须使能的正常运行,系统控制模块下必须使能 SCI 的时钟,也就是在系统的时钟,也就是在系统初始化函数中需要将外设时钟控制寄存器初始化函数中需要将外设时钟控制寄存器 PCLKCR 的的 SCIAENCLK 位置位置 1。SCI 可以产生两个中断,可以产生两个中断,SCIRXINTA 和和 SCITXINTA,即发送中断和接收,即发送中断和接收 中断。中断。SCI 模块的其他特点 2、SCI 模块发送和接收数据的工作原理模块发送和接收数据的工作原理 SCI 发送数据的过程:在发送数据的过程:在 FIFO 功能使能的情况下,首先发送数据缓冲寄存器功能使能的情况下,首先发送数据缓冲寄存器 SCITXBUF 从从 TX FIFO 中获取由中获取由 CPU 加载的需要发送的数据,然后加载的需要发送的数据,然后 SCITXBUF 将数据传输给发送移位寄将数据传输给发送移位寄 存器存器 TXSHF,如果,如果 SCI 的发送功能使能,的发送功能使能,TXSHF 则将接则将接收到的数据逐位的移到收到的数据逐位的移到 SCITXD 引脚上。引脚上。SCI 接收数据的过程:首先接收移位寄存器接收数据的过程:首先接收移位寄存器 RXSHF 逐位接收来自逐位接收来自 SCIRXD 引脚的引脚的数据,如果数据,如果 SCI 的接收功能使能,的接收功能使能,RXSHF 将这些数据传输给接收缓冲寄存器将这些数据传输给接收缓冲寄存器 SCIRXBUF,CPU 就能从就能从 SCIRXBUF 读取外部发送来的数据。如果读取外部发送来的数据。如果 FIFO 功能使功能使能的话,能的话,SCIRXBUF 会将数据加载到会将数据加载到 RX FIFO 的队列中,的队列中,CPU 再从再从 FIFO 的队列的队列读取数据。读取数据。3、SCI 数据格式数据格式 在在 SCI 中传输的数据格式可以通过中传输的数据格式可以通过 SCI 的通信控制寄存器的通信控制寄存器 SCICCR 来进来进行设置,规定通信过程中所使用的数据格式。行设置,规定通信过程中所使用的数据格式。SCI 使用的是使用的是 NRZ 的数据的数据格式,如下表所示:格式,如下表所示:数据是数据是 18 位,位,1 个字符的长度。将带有格式信息的每一个数据字符叫做一帧。个字符的长度。将带有格式信息的每一个数据字符叫做一帧。SCI 有空有空闲线模式和地址闲线模式和地址 位模式,若是在两个处理器之间的通信,例如位模式,若是在两个处理器之间的通信,例如 2812 和和 PC 机或者机或者 2812 和和 2812 之间通信,更适合使用空闲线模式,而地址位模式一般用于多处理器之间的通信。之间通信,更适合使用空闲线模式,而地址位模式一般用于多处理器之间的通信。在空闲线模式下,在空闲线模式下,SCI 发送或者接收一帧的数据格式如下图发送或者接收一帧的数据格式如下图4 所示,其中所示,其中 LSB 是数据的最低位,是数据的最低位,MSB 是数据的最高位。是数据的最高位。具体的定义上图所示数据格式的寄存器是通信控制寄存器具体的定义上图所示数据格式的寄存器是通信控制寄存器 SCICCR,其内,其内容下图所示。容下图所示。使使 用用 SCICCR 进行数据格式编程如下表所示:进行数据格式编程如下表所示:使用使用 SCICCR 进行数据格式编程进行数据格式编程SciaRegs.SCICCR.bit.SCICHAR=7;/选择数据长度,为选择数据长度,为 8 个数据位个数据位SciaRegs.SCICCR.bit.PARITYENA=1;/开启极性功能,值为开启极性功能,值为 0 的时候取消的时候取消极性功能极性功能SciaRegs.SCICCR.bit.PARITY=0;/在开启极性功能的前提下,该位值为在开启极性功能的前提下,该位值为 0 时选择偶极性,值为时选择偶极性,值为 1 时选择奇极性时选择奇极性SciaRegs.SCICCR.bit.STOPBITS=0;/选择停止位,该位为选择停止位,该位为 0 时有时有 1 个停止个停止位,该位为位,该位为 1 时有时有 2 个停止位。上述个停止位。上述这几个语句,我们也可以合并成如下这几个语句,我们也可以合并成如下的语句:的语句:SciaRegs.SCICCR.all=0 x23;4、SCI 通信波特率 SCI通信波特率就是指每秒所能发送的位数。通信波特率就是指每秒所能发送的位数。2812 的每个的每个 SCI 都具有都具有 两个两个 8 位的波特率寄存器,位的波特率寄存器,SCIHBAUD 和和 SCILBAUD,通过编程,可以实现,通过编程,可以实现达到达到 64K 不同的速率。波特率的不同的速率。波特率的 计算公式如下所示:计算公式如下所示:其中其中 BRR=波特率选择寄存器中的值,从十进制转换成十六进制后,高波特率选择寄存器中的值,从十进制转换成十六进制后,高 8 位赋值给位赋值给 SCIHBAUD,低,低 8 位赋值给位赋值给 SCILBAUD。注意:式注意:式 1 所示的波特率公式仅适用于所示的波特率公式仅适用于1 BRR 65535,当,当 BRR=0 是,波特率如下:是,波特率如下:波特率计算方法举例例如外部晶振为例如外部晶振为 30M,经过,经过 PLL 之后之后 SYSCLKOUT 为为 150MHz,然后,当低速,然后,当低速预定标器预定标器 LOSPCP 的值为的值为 2 的时候,的时候,SYSCLKOUT 经过低速预定标器之后产生低经过低速预定标器之后产生低速外设时钟速外设时钟 LSPCLK 为为 37.5MHz,也就是说也就是说 SCI 的时钟为的时钟为 37.5MHz。如果预设置如果预设置SCI 的波特率为的波特率为 19200,则将,则将 LSPCLK 和波特率的数值代入式和波特率的数值代入式 1,便可,便可得到:得到:BRR=243.14,由于寄存器都是正整数,所以省略掉小数后可以得到,由于寄存器都是正整数,所以省略掉小数后可以得到 BRR=243。将。将 243 转成转成 16 进制是进制是 0 xF3,因此,因此 SCIHBAUD 的值为的值为 0,SCIHBAUD 的值为的值为 0XF3。由于省略了小数,将会产生。由于省略了小数,将会产生 0.06%的误差。的误差。当当 LSPCLK 为为 37.5M 时,对于时,对于 SCI 常见的波特率,其寄存器的值如下表所示:常见的波特率,其寄存器的值如下表所示:在在SCI通信时双方都必须以相同的数据格式和波特率进行通信,否则通信会失败。通信时双方都必须以相同的数据格式和波特率进行通信,否则通信会失败。5、SCI 发送和接收数据的机制发送和接收数据的机制通常使用的有两种方式:一种是查询方式,另一种是中断方式。通常使用的有两种方式:一种是查询方式,另一种是中断方式。查询方式,就是程序不断去查询状态标志位,看看查询方式,就是程序不断去查询状态标志位,看看 SCI 是不是已经做好是不是已经做好了数据发送或者接收的准备。了数据发送或者接收的准备。当数据发送时,需要查询的是位于当数据发送时,需要查询的是位于 SCI 控控制寄存器制寄存器 2(SCICTL2)的第)的第 7 位位 TXREADY,发送缓冲寄存器就绪标,发送缓冲寄存器就绪标志。当这个位为志。当这个位为 1 的时候,表明发送数据缓冲寄存器的时候,表明发送数据缓冲寄存器 SCITXBUF 已经准已经准备好开始接收并发送下一个数据了。当数据写入备好开始接收并发送下一个数据了。当数据写入 SCITXBUF,TXREADY自动会清零,如果自动会清零,如果 TXENA 使能了,发送移位寄存器使能了,发送移位寄存器 TXSHF 就会把就会把 SCITXBUF 里面的数据发送出去。当数据接收时,需要查询的是里面的数据发送出去。当数据接收时,需要查询的是 SCI 接收状态寄存器(接收状态寄存器(SCIRXST)中的)中的 RXRDY,接收器就绪标志。当,接收器就绪标志。当从从 SCIRXBUF 寄存器中已经准备好一个字符的数据,等待寄存器中已经准备好一个字符的数据,等待 CPU 去读时,去读时,RXRDY 位就会置位就会置 1。当数据被。当数据被 CPU 从从 SCIRXBUF 读出后,或者系统复读出后,或者系统复位,都可以使位,都可以使 RXRDY 清清 0。使用查询方式发送或者接 收数据的程序结构如下:调用主程序:调用主程序:/发送程序发送程序If(SciaTx_Ready()=1)SciaRegs.SCITXBUF=SCI_Senddata;/SCI_senddata 为需为需要发送的数据要发送的数据/接收程序接收程序if(SciaRx_Ready()=1)Sci_Receivedata=SciaRegs.SCIRXBUF.all;/SCI_Receivedata 用用于存放接收的数据于存放接收的数据使用查询方式发送或者接 收数据的程序结构如下:/发送就绪标志状态查询函数发送就绪标志状态查询函数int SciaTx_Ready(void)unsigned int i;if(SciaRegs.SCICTL2.bit.TXRDY=1)i=1;/返回返回 1 说明发送器已经准备就绪,可以接收新的数据进行发送说明发送器已经准备就绪,可以接收新的数据进行发送Elsei=0;return(i);使用查询方式发送或者接 收数据的程序结构如下:/接收就绪标志状态查询函数接收就绪标志状态查询函数int SciaRx_Ready(void)unsigned int i;if(SciaRegs.SCIRXST.bit.RXRDY=1)i=1;/返回返回 1 说明数据接收已经就绪,等待说明数据接收已经就绪,等待 CPU 去读取数据去读取数据Elsei=0;return(i);通过中断方式进行SCI通信控制如果需要使用中断,根据前面所学的三级中断的知识,必须使能外设自己如果需要使用中断,根据前面所学的三级中断的知识,必须使能外设自己的中断、的中断、PIE 中断和中断和 CPU 中断。中断。SCIA 的发送和接收中断分别位的发送和接收中断分别位 于于 PIE 模模块第块第 9 组的第组的第 1 和第和第 2 位,同时对应于位,同时对应于 CPU 中断的中断的 INT9。前面所述的前面所述的 TXRDY 是中断标志位,当该位置是中断标志位,当该位置 1 时,就会产生发送中断事时,就会产生发送中断事件,如果各级中断都已经使能,则会响应件,如果各级中断都已经使能,则会响应 SCI 的发送中断函数。的发送中断函数。当接收中断标志位当接收中断标志位 RXRDY 置置 1 时,就会产生接收中断标志。如果各级中时,就会产生接收中断标志。如果各级中断已经使能,则会响应断已经使能,则会响应 SCI 的接收中断。的接收中断。特别注意:在前面章节中断内容的时候讲过,外设中断的标志位一定要手特别注意:在前面章节中断内容的时候讲过,外设中断的标志位一定要手动复位,在这里动复位,在这里 SCI 是个例外,原因如下:当发送器缓冲寄存器是个例外,原因如下:当发送器缓冲寄存器 SCITXBUF 做好准备发送数据时,做好准备发送数据时,TXRDY 置置 1,但是当,但是当 CPU 将数据写入将数据写入 SCITXBUF 的时候,的时候,TXRDY 自动会清自动会清 0。而当接收器缓冲寄存器已经准。而当接收器缓冲寄存器已经准备好数据等待备好数据等待 CPU 去读取时,去读取时,RXRDY 置置 1,当,当 CPU 将数据从将数据从 SCIRXBUF 读出时,读出时,RXRDY 也会自动清也会自动清 0。这是和其他外设中断不一样。这是和其他外设中断不一样的地方。的地方。使用中断方式发送或者接收的程序如下Void main().InitPieCtrl();/*初始化初始化 PIE 中断中断*/InitPieVectTable();/*初始化初始化 PIE 中断矢量表中断矢量表*/*设置中断服务程序入口地址设置中断服务程序入口地址*/EALLOW;/This is needed to write to EALLOW protected registersPieVectTable.TXAINT=&SCITXINTA_ISR;PieVectTable.RXAINT=&SCIRXINTA_ISR;EDIS;/This is needed to disable write to EALLOW protected registers/PIE 中断使能中断使能PieCtrl.PIEIER9.bit.INTx1=1;/使能使能 SCI 发送中断发送中断PieCtrl.PIEIER9.bit.INTx2=1;/使能使能 SCI 接收中断接收中断IER|=M_INT9;/*开开 CPU 中断中断*/EINT;/Enable Global interrupt INTMERTM;/Enable Global realtime interrupt DBGM使用中断方式发送或者接收的程序如下/接收中断函数接收中断函数interrupt void SCIRXINTA_ISR(void)/SCI-APieCtrl.PIEACK.bit.ACK9=1;/释放释放 PIE 同组中断同组中断if(SciaRx_Ready()=1)Sci_Receivedata=SciaRegs.SCIRXBUF.all;/SCI_Receivedata 用于存放接收的数据用于存放接收的数据EINT;/使能全局中断使能全局中断使用中断方式发送或者接收的程序如下/发送中断函数发送中断函数interrupt void SCITXINTA_ISR(void)/SCI-APieCtrl.PIEACK.bit.ACK9=1;/释放释放 PIE 同组中断同组中断if(SciaTx_Ready()=1)SciaRegs.SCITXBUF=SCI_Senddata;/SCI_senddata 为需要发送的数据为需要发送的数据EINT;/使能全局中断使能全局中断6、多处理器通信、多处理器通信多处理器通信,就是多个处理器之间实现数据通信。一个多处理器通信,就是多个处理器之间实现数据通信。一个简单的多处理器通信示意图如下图简单的多处理器通信示意图如下图 所示。所示。在图中在图中 A、B、C、D 之间都可以实现通信。处理器之间都可以实现通信。处理器 A 在同一时刻,只能在同一时刻,只能和和 B、C、D 之中的一个实现数据传输。当处理器之中的一个实现数据传输。当处理器 A 需要给需要给 B、C、D 中的中的某一个处理器发送数据时,某一个处理器发送数据时,A-B,A-C,A-D 这这 3 条通路上都会出现相同条通路上都会出现相同的数据,那如何确保这些数据的数据,那如何确保这些数据 被正确的处理器接收呢?被正确的处理器接收呢?多处理器通信的基本原理举例:如果您寄了一封信给远方的朋友,那邮递员如何举例:如果您寄了一封信给远方的朋友,那邮递员如何准确的将信投递到您朋友家的邮箱的呢?准确的将信投递到您朋友家的邮箱的呢?因为您寄出因为您寄出的信封上写清楚了您朋友家的地址,邮递员将实际地址的信封上写清楚了您朋友家的地址,邮递员将实际地址和信封上的地址核对,两者相符时,就和信封上的地址核对,两者相符时,就 把信投进信箱把信投进信箱了。根据这个原理,如果我们给了。根据这个原理,如果我们给 A、B、C、D主机事主机事先分配好地址,然后先分配好地址,然后 A 发送出去的信息里含有地址信发送出去的信息里含有地址信息(息(B或者或者C或者或者D),在接收到这个数据信息的时候,),在接收到这个数据信息的时候,先进行地址的核对,如果地址不符合,则先进行地址的核对,如果地址不符合,则 不予响应。不予响应。如果地址符合,则立即读取数据。如果地址符合,则立即读取数据。SCI 在进行多处理器通信时,根据地址信息识别方法的不同,分为空闲线模式和地址位模式。地址位模式地址位模式当处理器当处理器 A 发出一串数据时,我们将其叫做数据块,发出一串数据时,我们将其叫做数据块,由一个一个的帧构成,帧就是带有格式信息的字符数由一个一个的帧构成,帧就是带有格式信息的字符数据。从图据。从图 7 可以看到,某一个数据块中的第一帧是地可以看到,某一个数据块中的第一帧是地址信息,第二帧是数据信息,然后留有一些空余空间址信息,第二帧是数据信息,然后留有一些空余空间之后,又有一个数据块,第一帧也是地址信息,后面之后,又有一个数据块,第一帧也是地址信息,后面是数据信息。是数据信息。第第 一帧地址信息后面的一个位是一帧地址信息后面的一个位是 1,而第,而第 2 帧数据信帧数据信息后面的一个位是息后面的一个位是 0。我们把这一位称之为地址位,用。我们把这一位称之为地址位,用 于表示这个帧的数据时地址信息还是数据信息。于表示这个帧的数据时地址信息还是数据信息。像这样,在通信格式中加入地址位来判断信息是数据像这样,在通信格式中加入地址位来判断信息是数据还还 是地址的方式叫做多处理器通信的地址位方式。是地址的方式叫做多处理器通信的地址位方式。空闲线方式下多处理器通信 在空闲线模式中,块与块之间有一段比较长的空闲时间,这段时间在空闲线模式中,块与块之间有一段比较长的空闲时间,这段时间要明显长于快内帧与帧之间的空闲时间。如果某个帧之后有一段要明显长于快内帧与帧之间的空闲时间。如果某个帧之后有一段 10 个位或者更长的空个位或者更长的空 闲时间,那就表明新的数据块开始了。闲时间,那就表明新的数据块开始了。在某一个数据块中,第一帧代表地址信息,后面的帧为数据信息。在某一个数据块中,第一帧代表地址信息,后面的帧为数据信息。也就是说,地址信息还是数据信息是通过帧与帧之间的空闲间隔来也就是说,地址信息还是数据信息是通过帧与帧之间的空闲间隔来判断的。当帧与帧之间的空闲间隔超过判断的。当帧与帧之间的空闲间隔超过10 个位的时候,就表示新的个位的时候,就表示新的数据块开始,而且其第一帧为地址信息。数据块开始,而且其第一帧为地址信息。空闲线模式中数据格式里没有额外的地址位,在处理空闲线模式中数据格式里没有额外的地址位,在处理 10 个字节以个字节以上的数据块时比地址位模式更为有效,被应用于典型的非多处理器上的数据块时比地址位模式更为有效,被应用于典型的非多处理器 SCI 通信场合。而地址位模式由于有专门的位来进行识别地址信息,通信场合。而地址位模式由于有专门的位来进行识别地址信息,所以数据块之间不需要空闲时间等待,所以这种模式在处理一些小所以数据块之间不需要空闲时间等待,所以这种模式在处理一些小的数据块的时候更为有效。的数据块的时候更为有效。7、SCI 的例程的例程程序的功能是当程序的功能是当 PC 机上的串口调试软件发送机上的串口调试软件发送数据给数据给 2812 时,时,2812 的的 SCI 先接收数据,然先接收数据,然后将这些数据又发送回后将这些数据又发送回 PC 机,通过串口调试机,通过串口调试软件来进行显示。软件来进行显示。例程中采用的波特率为例程中采用的波特率为 19200,数据位,数据位 8 位,无位,无极性校验,停止位极性校验,停止位 1 位,所以我们在串口调试软位,所以我们在串口调试软件里也要做相同的设置,然后打开串口,将件里也要做相同的设置,然后打开串口,将 16 进制复选框上的勾点掉,这样数据是按照进制复选框上的勾点掉,这样数据是按照 ASCII 码进行发送的。码进行发送的。在发送数据框里输入想要发送在发送数据框里输入想要发送的数据,然后点击手工发送。我们这里输入的是的数据,然后点击手工发送。我们这里输入的是 hellodsp12345,点击发送之,点击发送之 后,接收框立即显后,接收框立即显示数据示数据 hellodsp12345,说明,说明 SCI 和和 PC 通信成通信成功,如图功,如图 10 所示。所示。通信时 CCS 中通过 watch window 观察到的 2812 接收到的数据,如图 11 所示。数组Sci_VarRx 是用来保存从 SCIRXBUF 中读取的数据。将 Sci_VarRx 数组中显示的十进制数据转换为十六进制以后,可以得到下面的表格:
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!