SCI自学小笔记(1)理论篇

 SCI框图

SCI模块的功能包括:

•两个外部引脚(如果不用于SCI,两个引脚都可以用作GPIO):–SCITXD:SCI传输输出引脚–SCIRXD:SCI接收输入引脚

•波特率可编程为64K不同速率

•数据字格式–一个起始位–数据字长可编程为一到八位–可选偶数/奇数/无奇偶校验位–一个或两个停止位–一位额外的位,用于区分地址和数据(仅限地址位模式)

•四个错误检测标志:奇偶校验、溢出、成帧和中断检测•两种唤醒多处理器模式:空闲线和地址位

•半双工或全双工操作

•双缓冲接收和传输功能•发射器和接收器操作可以通过带有状态标志的中断驱动或轮询算法实现

•发射器和接收器中断的单独启用位(BRKDT除外)

•NRZ(不归零)格式

增强功能包括:•自动波特检测硬件逻辑•16级发送/接收FIFO串行通信接口(SCI)

全双工操作中使用的主要元件如图23-2所示,包括:

•发射机(TX)及其主寄存器(图23-2的上半部分)-SICTXBUF——发射机数据缓冲寄存器。包含要传输的数据(由CPU加载)——TXSHF寄存器——变送器移位寄存器。从寄存器SCITXBUF接收数据,并将数据移位到SCITXD引脚,每次一位

•接收器(RX)及其主寄存器(图23-2的下半部分)-RXHF寄存器-接收器移位寄存器。将数据从SCIRXD引脚移入,每次一位—SCIRXBUF—接收器数据缓冲寄存器。包含要由CPU读取的数据。来自远程处理器的数据加载到寄存器RXHF,然后加载到寄存器SCIRXBUF和SCIRXEMU•可编程波特生成器

•控制和状态寄存器SCI接收器和发送器可以独立或同时操作。

配置设备引脚GPIO多路复用器寄存器必须配置为将此外围设备连接到设备引脚。为了避免引脚出现故障,必须首先配置GPyGMUX位(同时将相应的GPyMUX位保持为默认值零),然后将GPyMUX寄存器写入所需值。

某些IO功能是由GPIO寄存器设置定义的,与此外围设备无关。对于输入信号,必须通过将适当的GPxQSELn寄存器位设置为11b(没看懂,留个问题),将GPIO输入资格设置为异步模式。内部上拉可以在GPyPUD寄存器中进行配置。

有关GPIO多路复用器和设置的更多详细信息,请参阅通用输入/输出(GPIO)一章

多处理器和异步通信模式SCI有两种多处理器协议,空闲线路多处理器模式(见第23.8节)和地址位多处理器模式。这些协议允许在多个处理器之间进行有效的数据传输。

SCI提供通用异步收发器(UART)通信模式,用于与许多流行的外围设备接口。异步模式(见第23.10节)需要两条线路与许多标准设备接口,如使用RS-232-C格式的终端和打印机。数据传输特性包括:•一个起始位•一到八个数据位•偶数/奇数奇偶校验位或无奇偶校验位

SCI数据格式

SCI数据,无论是接收还是传输,都是NRZ(不归零)格式。NRZ数据格式,如图23-3所示,包括:•一个起始位•一到八个数据位•一个偶数/奇数奇偶校验位(可选)•一个或两个停止位•用于区分地址和数据的额外位(仅限地址位模式)

数据的基本单位称为字符,长度为1到8位。数据的每个字符都用一个起始位、一个或两个停止位以及可选的奇偶校验位和地址位进行格式化。具有格式化信息的数据字符称为帧,如图23-3所示。

要对数据格式进行编程,请使用SCICCR寄存器。用于对数据格式进行编程的位如表23-2所示。

SCI多处理器通信

多处理器通信格式允许一个处理器有效地将数据块发送到同一串行链路上的其他处理器。在一条串行线上,一次只能进行一次传输。换句话说,串行线上一次只能有一个讲话者

地址字节

讲话者发送的信息块的第一个字节包含一个由所有侦听器读取的地址字节。

只有具有正确地址的侦听器才能被地址字节后面的数据字节中断。地址不正确的侦听器在下一个地址字节之前保持不间断。

Sleep Bit

串行链路上的所有处理器都将SCI SLEEP位(SCICTL1的第2位)设置为1,因此只有当检测到地址字节时,处理器才会中断。当处理器读取与应用程序软件设置的CPU设备地址相对应的块地址时,程序必须清除SLEEP位,以便SCI在接收到每个数据字节时生成中断。

尽管当SLEEP位为1时接收器仍然工作,但是接收器不将RXRDY、RXINT或任何接收器错误状态位设置为1,除非检测到地址字节并且接收帧中的地址位为1(适用于地址位模式)。SCI不改变SLEEP位;您的软件必须更改SLEEP位

识别地址字节

处理器对地址字节的识别方式不同,具体取决于所使用的多处理器模式。例如:

•空闲线路模式(第23.8节)在地址字节之前留下一个安静的空间。此模式不具有额外的地址/数据位,并且对于处理包含超过10个字节的数据的块而言,此模式比地址位模式更有效。空闲线路模式必须用于典型的非多处理器SCI通信。

•地址位模式(第23.9节)在每个字节中添加一个额外的位(即地址位),以区分地址和数据。这种模式在处理许多小块数据时更有效,因为与空闲模式不同,这种模式不在数据块之间等待。然而,在高传输速度下,程序不够快,无法避免传输流中的10位空闲。

控制SCI TX和RX功能

多处理器模式是使用ADDR/IDLE mode位(SCICCR,位3)进行软件选择的。两种模式都使用TXWAKE标志比特(SCICTL1,比特3)、RXWAKE标志位(SCIRXST,比特1)和SLEEP标志比特(SCICTL1,字节2)来控制这些模式的SCI发射机和接收机特性。

接收顺序

在两种多处理器模式中,接收序列如下:1。在接收到地址块时,SCI端口唤醒并请求中断(必须启用SCICTL2的位号1 RX/BK INT ENA,才能在非FIFO操作模式下请求中断。在FIFO模式下,RXFINT用于此目的,要启用此目的,必须启用SCIFFRX寄存器中的RXFINTEN,同时将同一寄存器中的RXFFIL设置为1)。它读取块的第一帧,其中包含目标地址。

2.通过中断进入软件程序,并检查输入地址。将此地址字节与其存储在存储器中的设备地址字节进行检查。

3.如果检查显示块寻址到设备CPU,则CPU清除SLEEP位并读取块的其余部分。如果没有,则软件例程退出,SLEEP位仍设置,并且直到下一个块开始才接收中断。

空闲线路多处理器模式

在空闲线路多处理器协议(ADDR/idle MODE位=0)中,通过块之间的空闲时间比块中的帧之间的空闲更长来分隔块。一帧之后的十个或更多个高级比特的空闲时间指示新块的开始。单个比特的时间直接根据波特值(比特每秒)计算。空闲线路多处理器通信格式如图23-4所示(ADDR/idle MODE位为SCICCR的第3位)。

空闲线路模式所遵循的步骤:

1.SCI在接收到块开始信号之后被唤醒。

2.处理器识别下一个SCI中断。

3.中断服务程序将接收到的地址(由远程发送器发送)与其自己的地址进行比较。

4.如果CPU正在被寻址,则服务例程清除SLEEP位并接收数据块的其余部分。

5.如果CPU没有被寻址,则SLEEP位保持设置。这使CPU能够继续执行主程序,而不会被SCI端口中断,直到下一次检测到块开始为止。

注意:在IDLE模式下,如果SCI从FIFO读取所有RXDATA的时间超过10位,则SCI可能会错过要检测的立即块启动。

当SCI识别出空闲的10位周期时,RXWAKE逻辑仅断言一次。如果读取了RXBUF(这清除了WAKE条件),即使线路在读取RXBUF之后继续空闲,SCI也不会再次断言。

因此,如果ISR使用RXBUF从FIFO读取所有RXDATA花费超过10比特的时间段,则SCI可能会错过检测下一个块开始。这适用于FIFO和非FIFO模式,当CPU从RXBUF/FIFO读取数据所用的SCI时钟大于10位时。

为避免这种情况,建议执行以下任一操作:•读取ISR末尾的所有RX数据后,设置SCICTL1.SWRESET。

•在读取RXBUF寄存器之前,读取并检查RXWAKE状态位。如果设置了RXWAKE,则不要在ISR结束时为RX设置SLEEP位。

块启动信号

发送块开始信号有两种方法:

•方法1:通过延迟前一块中最后一帧数据的传输和新块的地址帧的传输之间的时间,故意留出十位或更多的空闲时间。

•方法2:在写入SCITXBUF寄存器之前,SCI端口首先将TXWAKE位(SCICTL1,位3)设置为1。这将发送一个恰好为11位的空闲时间。在这种方法中,串行通信线路的空闲时间不会超过所需的时间。(在设置TXWAKE之后,在发送地址之前,必须将一个不在乎的字节写入SCITXBUF,以便传输空闲时间。)

唤醒临时(WUT)标志

与TXWAKE比特相关联的是唤醒临时(WUT)标志。WUT是一个内部标志,使用TXWAKE进行双重缓冲。当从SCITXBUF加载TXSHF时,从TXWAKE加载WUT,并且TXWAKE位被清除为0。这种布置如图23-5所示。

发送块启动信号

要在一系列块传输期间发送恰好一帧时间的块开始信号:1。将1写入TXWAKE位。

2.向SCITXBUF寄存器(传输数据缓冲器)写入一个数据字(内容不重要:a不在乎),以发送块开始信号。(写入的第一个数据字被抑制,同时块开始信号被发送出去,并在那之后被忽略。)当TXSHF(发送移位寄存器)再次空闲时,SCITXBUF内容被移位到TXSHF,TXWAKE值被移位到WUT,然后TXWAKE被清除。

因为TXWAKE被设置为1,所以开始比特、数据比特和奇偶校验比特被前一帧的最后一个停止比特之后发送的11比特的空闲周期所代替。

3.将新的地址值写入SCITXBUF。

必须首先将一个不需要注意的数据字写入寄存器SCITXBUF,以便将TXWAKE位值移位到WUT。在不需要卡的数据字被移位到TXSHF寄存器之后,SCITXBUF(和TXWAKE,如果必要的话)可以被再次写入,因为TXSHF和WUT都是双缓冲的。

接收器操作

无论SLEEP位如何,接收器都会工作。但是,接收器既不设置RXRDY也不设置错误状态位,也不请求接收中断,直到检测到地址帧为止。

地址位多处理器模式

在地址位协议(ADDR/IDLE MODE bit=1)中,帧有一个额外的位,称为紧跟在最后一个数据位之后的地址位。地址位在块的第一帧中被设置为1,在所有其他帧中被设为0。空闲时间段的计时是不相关的(见图23-6)。

发送地址

TXWAKE位值被放置在地址位中。在传输过程中,当SCITXBUF寄存器和TXWAKE分别被加载到TXSHF寄存器和WUT时,TXWAKE被重置为0,WUT成为当前帧的地址位的值。因此,要发送一个地址:1。将TXWAKE位设置为1,并将适当的地址值写入SCITXBUF寄存器。

当该地址值被传送到TXSHF寄存器并被移出时,地址位被发送为1。

这会标记串行链路上的其他处理器以读取地址。

2.在加载了TXSHF和WUT之后写入SCITXBUF和TXWAKE。(可以立即写入,因为TXSHF和WUT都是双缓冲的。

3.将TXWAKE比特设置为0以发送块中的非地址帧。

注意:作为一般规则,地址位格式通常用于11字节或更少的数据帧。这种格式将一个比特值(地址帧为1,数据帧为0)添加到发送的所有数据字节。

空闲线格式通常用于12字节或更多字节的数据帧。

SCI通讯格式

SCI异步通信格式使用单线(单向)或双线(双向)通信。在这种模式下,帧由一个起始位、一到八个数据位、一个可选的奇偶校验位和一到两个停止位组成(如图23-7所示)。每个数据位有八个SCICLK周期。

接收器在收到有效起始位后开始操作。有效起始位由四个连续的内部SCICLK零位周期标识,如图23-7所示。如果任何位不为零,则处理器重新启动并开始寻找另一个起始位。 

接收器在收到有效起始位后开始操作。有效起始位由四个连续的内部SCICLK零位周期标识,如图23-7所示。如果任何位不为零,则处理器重新启动并开始寻找另一个起始位。

对于起始比特之后的比特,处理器通过在比特中间进行三个采样来确定比特值。这些采样发生在第四、第五和第六SCICLK周期,并且比特值的确定是基于多数(三分之二)。图23-7显示了异步通信格式,起始位显示了多数投票的位置。

由于接收器将自身同步到帧,因此外部发送和接收设备不使用同步串行时钟。时钟可以在本地生成。

通信模式下的接收器信号

图23-8举例说明了假设以下条件的接收器信号定时:•地址位唤醒模式(地址位不会出现在空闲线路模式中)•每个字符6位

注:1。标志位RXENA(SCICTL1,位0)变高以启用接收器。

2.数据到达SCIRXD引脚,检测到起始位。

3.数据从RXSFF移位到接收器缓冲寄存器(SCIRXBUF);则请求中断。标志位RXRDY(SCIRXST,位6)变高,表示接收到新字符。

4.程序读取SCIRXBUF;标志RXRDY被自动清除。

5.下一个字节的数据到达SCIRXD引脚;检测到起始位,然后将其清除。

6.使位RXENA为低电平以禁用接收器。数据继续在RXHF中进行汇编,但不传输到接收器缓冲寄存器。

通信模式下的变送器信号图23-9举例说明了假设以下条件的发射机信号定时:•地址位唤醒模式(地址位不出现在空闲线路模式中)•每个字符三位

注:1。位TXENA(SCICTL1,位1)变高,使变送器能够发送数据。

2.SCITXBUF被写入;因此,(1)发送器不再是空的,并且(2)TXRDY变低。

3.SCI将数据传输到移位寄存器(TXSHF)。发送器已准备好接收第二个字符(TXRDY变高),并请求中断(若要启用中断,必须设置位TX INT ENA-SCICTL2,位0)。

4.在TXRDY变高之后,程序将第二个字符写入SCITXBUF(项目3)。(在第二个字符被写入SCITXBUF之后,TXRDY再次变低。)5。第一个字符的传输完成。开始向移位寄存器TXSHF传输第二个字符。

6.位TXENA变低以禁用发射器;SCI完成当前字符的传输。

7.第二个字符的传输完成;发送器是空的,并且准备好接收新字符。

SCI端口中断

SCI接收机和发射机可以进行中断控制。SCICTL2寄存器有一个指示活动中断条件的标志位(TXRDY),SCIRXST寄存器有两个中断标志位(RXRDY和BRKDT),加上RX ERROR中断标志,该标志是FE、OE、BRKDT和PE条件的逻辑OR。发送器和接收器具有独立的中断使能位。当未启用时,中断不会被断言;但是,条件标志保持活动状态,反映传输和接收状态。

SCI具有用于接收器和发送器的独立外围中断矢量。外围中断请求可以是高优先级或低优先级。这通过从外围设备输出到PIE控制器的优先级位来指示。当RX和TX中断请求都以相同的优先级发出时,接收机的优先级总是高于发射机,从而降低了接收机过载的可能性。外围中断的操作在系统控制和中断一章的外围中断部分进行了描述。

如果设置了RX/BK INT ENA位(SCICTL2,位1),则当发生以下事件之一时,断言接收器外围中断请求:

-SCI接收完整的帧,并将RXHF寄存器中的数据传输到SCIRXBUF寄存器。此操作设置RXRDY标志(SCIRXST,位6)并启动中断。

–出现中断检测条件(在丢失停止位之后,SCIRXD在9.625位周期内为低电平)。此操作设置BRKDT标志位(SCIRXST,位5)并启动中断。

如果TX INT ENA位(SCICTL2.0)被设置,则每当SCITXBUF寄存器中的数据被传输到TXSHF寄存器时,发送器外围中断请求被断言,表明CPU可以写入SCITXBUV;该动作设置TXRDY标志位(SCICTL2,位7)并启动中断。

注意:SCI模块中断反应时间-如果应用程序中出现时间紧,则可能会偶尔发生BRKDT或其他错误,如触发FE/PE。

直到检测到大约7/8的停止位(大约0.875位时间),才触发中断。ISR输入之前该延迟的实际值为:((7*BAUD_CLK_PERIOD)/8+3*SYSCLK_PERIOD)。

在RX ISR完成之前,SCI不会开始读取额外的位/字符,因此在下一个字节的起始位开始之前完成ISR。这留下大约1/8位时间(大约0.125位时间)来完成整个ISR,而不管中断原因如何。

如果ISR在下一个起始位开始之前(在RX线再次变低之前)没有完成,则SCI模块开始在错误的位置延迟读取起始位,因此可能不正确地读取所有位,直到下一个正确对齐的起始位(当ISR在再次开始位之前有足够的时间进行处理时)。

避免错误的推荐方法(以适应ISR开始所需的0.875位时间):

1.保持RX ISR短路。RX ISR只能用于将FIFO/缓冲区中的数据移动到存储器中,以便在另一个时间不太关键的功能中进行处理。

2.避免在SCI RX ISR内过度嵌套其他中断。不允许嵌套将SCI RX ISR完成延迟超过允许的大约0.125位时间窗口。

3.如果需要额外的时间(大于大约0.125比特的时间),则在将额外的数据传输到C2000设备的SCI RX引脚之前,可以在其他设备的固件中添加延迟。

延迟可以添加到其他设备,如下所示:a.向C2000设备发送具有2个停止位的字节为C2000 RX ISR完成提供大约1.125位的处理时间。

b.在每次发送BYTE之后,在发送到C2000设备的另一设备的固件中添加手动延迟,为C2000 RX ISR的完成提供了(延迟+大约0.125位时间)处理时间。

c.在的固件中添加手动延迟

注意RXRDY和BRKDT位引起的中断生成由RX/BK INT ENA位(SCICTL2,位1)控制。由RX ERROR位引起的中断生成由RX ERR INT ENA位(SCICTL1,位6)控制。

内部生成的串行时钟由低速外围时钟LSPCLK)和包选择寄存器确定。SCI使用波特选择寄存器的16位值来选择给定LSPCLK可能的64K不同串行时钟速率之一。

有关计算SCI异步波特时使用的公式,请参阅波特选择寄存器中的位描述。表23-3显示了常见SCI比特率的波特选择值。LSPCLK/16是最大波特率。例如,如果LSPCLK为100 MHz,则最大波特率为6.25 Mbps。

C28x SCI具有自动波特检测和发送/接收FIFO功能。以下部分介绍FIFO操作。

1.重置。重置时,SCI以标准SCI模式通电,FIFO功能被禁用。FIFO寄存器SCIFFTX、SCIFFRX和SCIFFCT保持不活动状态。

2.标准SCI。标准SCI模式正常工作,TXINT/RXINT中断作为模块的中断源。

3.FIFO使能。FIFO模式是通过设置SCIFFTX寄存器中的SCIFFEN位来启用的。SCIRST可以在操作的任何阶段重置FIFO模式。

4.活动寄存器。所有SCI寄存器和SCI FIFO寄存器(SCIFFTX、SCIFFRX和SCIFFCT)都处于活动状态

5.中断。FIFO模式有两个中断;发送FIFO(TXINT)和接收FIFO(RXINT)。RXINT是SCI FIFO接收、接收错误和接收FIFO溢出条件的常见中断。标准SCI的TXINT被禁用,并且该中断用作SCI传输FIFO中断。

6.缓冲器。发送和接收缓冲器由两个16级FIFO补充。发送FIFO寄存器为8位宽,接收FIFO寄存器为10位宽。标准SCI的一个字发送缓冲器(SCITXBUF)用作发送FIFO和移位寄存器之前的转换缓冲器。

SCITXBUF加载到FIFO(当FIFO启用时)或TXSHF(当FIFO禁用时)。

当FIFO被启用时,SCITXBUF只有在移位寄存器的最后一位被移出后才能加载到FIFO中,因此SCITXBUFF不能被视为额外级别的缓冲器。启用FIFO后,TXSHF在可选延迟值(SCIFF)后直接从FIFO(而非TXBUF)加载

7.转移延迟。FIFO中的字被传输到传输移位寄存器的速率是可编程的。SCIFFCT寄存器位(7−0)FFTXDLY7−FFTXDLY0定义字传输之间的延迟。延迟定义为SCI波特时钟周期数。8位寄存器可以定义0波特时钟周期的最小延迟和256波特时钟周期。在零延迟的情况下,SCI模块可以在FIFO字前后移位的连续模式下传输数据。利用256时钟延迟,SCI模块可以在最大延迟模式下传输数据,其中FIFO字在每个字之间以256波特时钟的延迟移出。可编程延迟方便了与慢速SCI/UART的通信,而CPU干预很少

8.FIFO状态位。发送和接收FIFO都具有状态位TXFFST或RXFST(位12−8),它们定义了在任何时候FIFO中可用的字的数量。当这些位被清除为0时,发送FIFO复位位TXFIFO和接收复位位RXFIFO将FIFO指针复位为0。一旦这些位设置为1,FIFO将从开始恢复操作

9.可编程中断级别。发送和接收FIFO都可以产生CPU中断。只要传输FIFO状态位TXFFST(位12−8)与中断触发电平位TXFFIL(位4−0)匹配(小于或等于),就会生成中断触发。这为SCI的发送和接收部分提供了可编程中断触发器。这些触发电平位的默认值分别为接收FIFO的0x11111和发送FIFO的0x00000。

图23-10和表23-4解释了非FIFO/FFO模式下SCI中断的操作/配置。

23.13.2 SCI自动波特率

大多数SCI模块没有内置的自动波特检测逻辑硬件。这些SCI模块与嵌入式控制器集成,嵌入式控制器的时钟速率取决于PLL重置值。通常嵌入式控制器的时钟在最终设计后会发生变化。在增强功能集中,此模块支持硬件中的自动波特检测逻辑。以下部分解释自动波特检测功能的启用顺序。

SCIFFCT中的位ABD和CDC控制自动波特逻辑。可以启用SCIRST位以使自动波特逻辑工作。

如果在CDC为1时设置了ABD,这表示自动波特对齐,则发生SCI传输FIFO中断(TXINT)。

中断服务之后,CDC位必须由软件清除。如果CDC即使在中断服务之后仍保持设置,则不可能有重复中断

1.通过在SCIFFCT中设置CDC位(位13)并通过向ABDCLR位(位14)写入1来清除ABD位(位15),启用SCI的自动波特检测模式。

2.将波特寄存器初始化为1或小于波特率限制500 Kbps。

3.允许SCI以所需的波特率从主机接收字符“A”或“A”。如果第一个字符是“A”或“a”,则自动波特率检测硬件检测输入波特率并设置ABD位。

4.自动检测硬件用等效的波特率十六进制值更新波特率寄存器。该逻辑还生成对CPU的中断。

5.通过向SCIFFCT寄存器的ABD CLR(位14)写入1来响应中断清除ADB位,并通过写入0来清除CDC位来禁用进一步的自动波特锁定。

6.读取字符“A”或“A”的接收缓冲区,以清空缓冲区和缓冲区状态。

7.如果在CDC为1时设置了ABD,这表示自动波特对齐,则发生SCI传输FIFO中断(TXINT)。interrupt之后

注:波特率较高时,输入数据位的转换速率可能会受到收发器和连接器性能的影响。虽然正常的串行通信可以很好地工作,但这种转换速率会限制较高波特率(通常超过100k波特)下的可靠自动波特检测,并导致自动波特锁定功能失败。

为了避免这种情况,建议使用以下方法:•使用较低的波特率在主机和C28x SCI引导加载程序之间实现波特锁定。

•然后,主机可以与加载的C28x应用程序握手,将SCI波特率寄存器设置为所需的更高波特率

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值