1,PDMA
Peripheral Direct Memory Access (PDMA)
外设直接存储器存取(PDMA) 控制器用于提供高速数据传输。PDMA控制器可以在没有CPU干预的情况下将数据从一个地址传输到另一个地址。这样做的好处是减少了CPU的工作负载,并为其他应用程序保留了空闲的CPU资源。有两个PDMA控制器PDMA0和PDMA1。每个PDMA控制器共有8个通道,每个通道可以执行存储器与外设之间或存储器与存储器之间的传输。
功能:
- 支持 2PDMA 控制器,即 PDMA0 和 PDMA1;
- 支持 8 个可独立配置的通道;
- 支持可选的2级优先级(固定优先级或循环优先级);
- 支持8位、16位和32位的传输数据宽度;
- 支持源和目的地址增量大小可以是字节、半字、字或无增量;
- 支持软件和USB、通用异步收发器(Universal Asynchronous
Receiver/Transmitters , UART)、通用串行控制接口(Universal Serial Control Interface, USCI)、串行外围接口(Serial Peripheral Interface ,SPI)、EPWM(Enhanced PWM< Pulse Width Modulation>,增强型脉冲宽度调制)、I2C、I2S、定时器(Timer)、模数转换器(ADC)、数模转换器(DAC)请求; - 支持分散-聚集模式,通过使用描述符链表表执行复杂的传输;
- 支持单传输和突发传输类型;
- 支持通道0和通道1的超时功能;
- 支持通道0到通道5的跨度功能
2,SPI
Serial Peripheral Interface,SPI
串行外设接口(SPI) 适用于同步串行数据通信,并允许全双工传输。设备通过4线双向接口以主/从模式通信。M261/M262/M263 系列最多包含四组 SPI 控制器,对从外围设备接收的数据执行串并转换,对发送到外围设备的数据执行并串转换。每个 SPI 控制器可以配置为主设备或从设备,并支持 PDMA 功能来访问数据缓冲区。每个 SPI 控制器还支持 I2S 模式连接外部音频编解码器。
特征:
1,SPI模式
- 最多四组SPI控制器
- 支持主模式或从模式操作
- 事务字的可配置位长从8位到32位
- 提供单独的4级深度发送和接收先进先出缓冲器
- 支持最高位优先或最低位优先传输序列
- 支持字节重排序功能
- 支持字节或字挂起模式
- 支持PDMA传输
- 支持一个数据通道半双工传输
- 支持只接收模式
2, I2S模式
- 支持主机或从机 -能够处理8位、16位、24位和32位的带宽大小
- 每一个都提供两个4级FIFO数据缓冲器,一个用于发送,另一个用于接收
- 支持单声道和立体声音频数据
- 支持PCM模式A、PCM模式B、I2S和MSB调整的数据格式
- 支持两个PDMA请求,一个用于发送,另一个用于接收
3,EPWM
该芯片提供两个EPWM发生器-EPWM 0和EPWM 1。 每个EPWM支持6路EPWM输出或输入捕获。有一个12位预分频器,支持16位EPWM计数器(带16位比较器)的灵活时钟。 EPWM计数器支持递增、递减和递增递减计数器类型。EPWM使用比较器和计数器来生成事件。这些事件用于产生EPWM脉冲、中断和触发信号,以便EADC/DAC开始转换。 EPWM产生器支持两种标准的EPWM输出模式:独立模式和互补模式,它们具有不同的体系结构。基于标准输出模式有两种输出功能:组功能和同步功能。可以在独立模式或补充模式下启用群组功能。同步功能仅在完全模式下启用。互补模式有两个比较器,用12位死区发生器产生各种EPWM脉冲;另一个自由触发比较器,用来产生EADC的触发信号。 EPWM输出控制单元支持极性输出、独立引脚屏蔽和制动功能。EPWM生成器还支持输入捕获功能。当输入通道发生上升跃迁、下降跃迁或同时发生上升跃迁和下降跃迁时,支持将EPWM计数器值锁存到相应的寄存器。捕获功能还支持PDMA将捕获的数据传输到存储器。
4,I2C总线
I2C 总线在物理连接上很简单,由 SDA (串行数据线)和 SCL (串行时钟线)及上拉电阻组成。通信原理是通过对 SCL 和 SDA 线高低电平时序的控制,来 产生 I2C 总线协议所需要的信号进行数据的传递。在总线空闲状态时,这两根线一般被上面所接的上拉电阻拉高,保持高电平状态。
4.1,I2C总线特征
- I2C 总线上的每一个设备都可以作为主设备或者从设备,而且每一个设备都会对应一个唯一的地址(主从设备间通过该地址通信,地址可以从 I2C 器件的数据手册得知)
- 在通常的应用中,将CPU带 I2C 总线接口的模块作为主设备,把挂接在总线上的其他设备都作为从设备
- I2C 总线上可挂接的设备数量受总线的最大电容 400pF 限制,如果所挂接的是相同型号的器件,则还受器件地址位的限制
- I2C 总线数据传输速率在标准模式下可达 100 kbit/s,快速模式下可达 400 kbit/s,高速模式下可达 3.4 Mbit/s。一般通过 I2C 总线接口可编程时钟来实现传输速率的调整,同时也跟所接的上拉电阻的阻值有关
- I2C 总线上的主设备与从设备之间以字节(8位)为单位进行双向的数据传输
4.2,I2C总线协议
I2C 协议规定,总线上数据的传输必须以一个起始信号作为开始条件,以一个结束信号作为传输的停止条件。起始和结束信号总是由主设备产生。 总线在空闲状态时,SCL和SDA都保持着高电平。 当SCL为高电平而SDA由高到低的跳变,表示产生一个起始条件;当SCL为高而SDA由低到高的跳变,表示产生一个 停止条件。 在起始条件产生后,总线处于忙状态,由本次数据传输的主从设备独占,其他 I2C 器件无法访问总线;而在停止条件产生后,本次数据传输的主从设备将释放总线,总线再次处于空闲状态。如图所示:
4.3,I2C总线数据传输过程
4.3.1,数据传输基本规则
数据传输以字节为单位。主设备在SCL线上产生每个时钟脉冲的过程中将在SDA线上传输一个数据位,当一个字节按数据位从高位到低位的顺序传输完后,紧接着从设备将拉低SDA线,回传给主设备一个应答位, 此时才认为一个字节真正的被传输完成。 当然,并不是所有的字节传输都必须有一个应答位,比如:当从设备不能再接收主设备发送的数据时,从设备将回传一个否 定应答位。数据传输的过程如图所示: 注:MSB为最高有效位,LSB为最低有效位
此外,I2C 总线上的每一个设备都对应一个唯一的地址,主从设备之间的数据传输是建立在地址的基础上,也就是说,主设备在传输有效数据之前 要先指定从设备的地址,地址指定的过程和上面数据传输的过程一样,只不过大多数从设备的地址是7位的,然后协议规定再给地址添加一个最低位用来表示接下来 数据传输的方向,0表示主设备向从设备写数据,1表示主设备向从设备读数据。如图所示: 此外,在IIC总线上传送的每一位数据都有一个时钟脉冲相对应(或同步控制),即在SCL串行时钟的配合下,在SDA上逐位地串行传送每一位数据。进行数据传送时,在SCL呈现高电平期间,SDA上的电平必须保持稳定。只有在SCL为低电平期间,才允许SDA上的电平改变状态。
对I2C总线的操作实际就是主从设备之间的读写操作。大致可分为以下三种操作情况:
-
主设备往从设备中写数据。数据传输格式如下: -
主设备从从设备中读数据。数据传输格式如下: 注:应答信号为低电平时,规定为有效应答位(ACK简称应答位),表示接收器已经成功地接收了该字节;应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。 因此一个完整的字节数据传输需要9个时钟脉冲。如果从机作为接收方向主机发送非应答信号,主机方就认为此次数据传输失败;如果是主机作为接收方,在从机发送器发送完一个字节数据后,向从机发送了非应答信号,从机就认为数据传输结束,并释放SDA线。不论是以上哪种情况都会终止数据传输,这时主机或是产生停止信号释放总线或是产生重新开始信号,开始一次新的通信。 -
主设备往从设备中写数据,然后重启起始条件,紧接着从从设备中读取数据;或者是主设备从从设备中读数据,然后重启起始条件(与开始条件相同),紧接着主设备往从设备中写数据。数据传输格式如下:
第三种操作在单个主设备系统中,重复的开启起始条件机制要比用STOP终止传输后又再次开启总线更有效率。
注:以上内容部分从大佬的链接 I2C总线协议详解 复制整理得到
4.3.2,插入等待时间
如果被控器需要延迟下一个数据字节开始传送的时间,则可以通过把时钟线SCL电平拉低并且保持,使主控器进入等待状态。一旦被控器释放时钟线,数据传输就得以继续下去,这样就使得被控器得到足够时间转移已经收到的数据字节,或者准备好即将发送的数据字节。
带有CPU的被控器在对收到的地址字节做出应答之后,需要一定的时间去执行中断服务子程序,来分析或比较地址码,其间就把SCL线钳位在低电平上,直到处理妥当后才释放SCL线,进而使主控器继续后续数据字节的发送
4.3.3,总线冲突和总线仲裁
假如在某IIC总线系统中存在两个主器件节点,分别记为主器件1和主器件2,其输出数据分别为DATA1和DATA2,它们都有控制总线的能力,这就存在着发生总线冲突(即写冲突)的可能性。
假设在某一瞬间两者相继向总线发出了启动信号,鉴于:I2C总线的“线与”特性,使得在数据线SDA上得到的信号波形是DATA1和DATA2两者相与的结果
在总线被启动后,主器件1企图发送数据“101……”,主器件2企图发送数据“100……”。
两个主器件在每次发出一个数据位的同时都要对自己输出端的信号电平进行抽检,只要抽检的结果与它们自己预期的电平相符,就会继续占用总线,总线控制权也就得不到裁定结果。
主器件1的第3位期望发送“1”,也就是在第3个时钟周期内送出高电平。在该时钟周期的高电平期间,主器件1进行例行抽检时,结果检测到一个不相匹配的电平“0”,这时主器件1只好决定放弃总线控制杈;因此,主器件2就成了总线的惟一主宰者,总线控制权也就最终得出了裁定结果,从而实现了总线仲裁的功能。
从以上总线仲裁的完成过程可以得出:仲裁过程主器件1和主器件2都不会丢失数据;各个主器件没有优先级别之分,总线控制权是随机裁定的。
系统实际上遵循的是“低电平优先”的仲裁原则,将总线判给在数据线上先发送低电平的主器件,而其他发送高电平的主器件将失去总线控制权
4.3.4,时钟同步
如果在某一I2C总线系统中存在两个主器件节点,分别记为主器件1和主器件2,其时钟输出端分别为CLK1和CLK2,它们都有控制总线的能力。
假设在某一期间两者相继向SCL线发出了波形不同的时钟脉冲序列CLK1和CLK2,在总线控制权还没有裁定之前这种现象是可能出现的。
鉴于IIC总线的“线与”特性,使得时钟线SCL上得到的时钟信号波形,既不像主器件1所期望的CLK1,也不像主器件2所期望的CLK2,而是两者进行逻辑与的结果。
CLKI和CLK2的合成波形作为共同的同步时钟信号,一旦总线控制权裁定给某一主器件,则总线时钟信号将会只由该主器件产生
4.3.5,其他情况
总线封锁状态 在特殊情况下,如果需要禁止所有发生在I2C总线上的通信活动,封锁或关闭总线是一种可行途径,只要挂接于该总线上的任意一个器件将时钟线SCL锁定在低电平上即可。
高速模式 原理上讲,使用上拉电阻来设置逻辑1会限制总线的最大传输速度。而速度是限制总线应用的因素之一。这也说明为什么要引入高速模式(3.4 Mbps)。在发起一次高速模式传输前,主设备必须先在低速的模式下(例如快速模式)发出特定的“High Speed Master”信号。为缩短信号的周期和提高总线速度,高速模式必须使用额外的I/O缓冲区。另外,总线仲裁在高速模式下可屏蔽掉。
时钟拉伸 在 IIC 通信中,主设备决定了时钟速度。因为时钟脉冲信号是由主设备显式发出的。但是,当从设备没办法跟上主设备的速度时,从设备需要一种机制来请求主设备慢一点。这种机制称为时钟拉伸,而基于I2C结构的特殊性,这种机制得到实现。当从设备需要降低传输的速度的时候,它可以拉下时钟线,逼迫主设备进入等待状态,直到从设备释放时钟线,通信才继续。
4.4,通信过程
首先,主设备发一个START信号,然后其它设备开始监听总线以准备接收数据。接着,主设备发送一个7位设备地址加一位的读写操作的数据帧。当所有从设备接收数据后,比对地址自己是否目标设备。如果比对不符,设备进入等待状态,等待STOP信号的来临;如果比对相符,设备会发送一个应答信号——ACK作回应。
当主设备收到应答后便开始传送或接收数据。数据帧大小为8位。主设备发送数据,从设备应答;相反从设备发送数据,主设备应答。当数据传送完毕,主设备发送一个STOP信号,向其它设备宣告释放总线,其它设备回到初始状态。
4.5,寻址过程
寻址约定 为了消除IIC总线系统中主控器与被控器的地址选择线,最大限度地简化总线连接线,IIC总线采用了独特的寻址约定,规定了开始信号后的第一个字节为寻址字节,用来寻址被控器件,并规定数据传送方向。
在IIC总线系统中,寻址字节由七位地址位(它占据了D7-D1位)和一位方向位(为D0位)组成。方向位为0时表示主控器将数据写入被控器,为 1时表示主控器从被控器读取数据。主控器发送开始信号后,立即发送寻址字节,这时总线上的所有器件都将寻址字节中的7位地址与自己器件地址比较。如果两者相同,则该器件认为被主控器寻址,并发送应答信号,被控器根据读/写位确定自身是作为发送器还是接收器。
主器件作为被控器时,其7位从地址在IIC总线地址寄存器中给定,为纯软件地址。而非单片机类型的外围器件地址完全由器件类型与引脚电平给定。IIC总线系统中,没有两个从机的地址是相同的。主控器不应该传输一个和它本身的从地址相同的地址。
7位I2C总线可以挂接127个不同地址的I2C设备,0号”设备”作为群呼地址.
地址的分配方法有两种: 含CPU的智能器件,地址由软件初始化时定义,但不能与其它的器件有冲突 不含CPU的非智能器件,由厂家在器件内部固化,不可改变。 高7位为地址码,其分为两部分:
高4位属于固定地址不可改变,由厂家固化的统一地址; 低三位为引脚设定地址,可以由外部引脚来设定(并非所有器件都可以设定); 常用IIC接口通用器件的器件地址是由种类型号以及寻址码组成的,共7位。如格式如下: D7 D6 D5 D4 D3 D2 D1 D0 器件类型由:D7-D4 共4位决定的。这是由半导公司生产时就已固定的了,也就是说这4位已是固定的。用户自定义地址码:D3-D1共3位。这是由用户自己设置的,通常的作法如EEPROM这些器件是由外部IC的3个引脚所组合电平决定的(用常用的名字如A0,A1,A2)。这也就是寻址码。所以为什么同一IIC总线上同一型号的IC只能最多共挂8片同种类芯片的原因了。
4.6,读写过程
读过程 主机发送启动信号后,接着发送命令字节(其中 R/W=1) 对应的从机收到地址字节后,返回一个应答信号并向主机发送数据 主机收到数据后向从机反馈一个应答信号 从机收到应答信号后再向主机发送下一个数据 当主机完成接收数据后,向从机发送一个“非应答信号(ACK=1)”,从机收到ACK=1 的非应答信号后便停止发送 主机发送非应答信号后,再发送一个停止信号,释放总线结束通信 注意:主机所接收数据的数量是由主机自身决定,当发送“非应答信号/A”时从机便结束传送并释放总线(非应答信号的两个作用:前一个数据接收成功,停止从机的再次发送)。
写过程 主机在检测到总线为“空闲状态”(即 SDA、SCL 线均为高电平)时,发送一个启动信号“S”,开始一次通信的开始 主机接着发送一个命令字节。该字节由 7 位的外围器件地址和 1 位读写控制位 R/W组成(此时 R/W=0为写) 相对应的从机收到命令字节后向主机回馈应答信号 ACK(ACK=0) 主机收到从机的应答信号后开始发送第一个字节的数据 从机收到数据后返回一个应答信号 ACK 主机收到应答信号后再发送下一个数据字节 当主机发送最后一个数据字节并收到从机的 ACK 后,通过向从机发送一个停止信号P结束本次通信并释放总线。从机收到P信号后也退出与主机之间的通信
注意:①主机通过发送地址码与对应的从机建立了通信关系,而挂接在总线上的其它从机虽然同时也收到了地址码,但因为与其自身的地址不相符合,因此提前退出与主机的通信;②主机的一次发送通信,其发送的数据数量不受限制。主机是通过 P 信号通知发送的结束,从机收到 P 信号后退出本次通信;③主机的每一次发送后都是通过从机的 ACK 信号了解从机的接收状况,如果应答错误则重发。
主线死锁原因分析,地址扩展和 IIC 总线典型应用详见参考链接2
参考链接1: I2C总线介绍. 参考链接2(详细):I2C总线协议/地址详解.(本文很多内容为直接复制本链接而来) 参考链接3: 【上篇】常见总线(SPI、I2C、I2S简介及区别对比). 参考链接4: I2S总线概述.<看不太懂> 参考链接5: 常见总线:IIC、IIS、SPI、UART、JTAG、CAN、SDIO、GPIO.
5,SysTick(System Timer)
Cortex?-M23包括一个集成的系统定时器SysTick,该定时器提供了一个简单的24位清写、递减、归零计数器,具有灵活的控制机制。计数器可用作实时操作系统(RTOS)计时器或简单计数器。
启用系统定时器后,它将从SysTick当前值寄存器(SYST_VAL)中的值向下计数至零,并在下一个时钟周期重新加载(回绕)到SysTick重新加载值寄存器(SYST_LOAD)中的值,然后在后续时钟上递减。当计数器转换为零时,COUNTFLAG状态位被设置。读取时,COUNTFLAG位清零。
SYST_VAL值在复位时未知。在启用该功能之前,软件应写入寄存器以将其清零。这可确保计时器在启用时将从syst_load值而不是任意值开始计数
如果syst_load为零,则计时器在使用此值重新加载后将保持当前值为零。该机制可用于独立于定时器使能位禁用该功能
有关更多详细信息,请参阅《ARM?Cortex?-M23技术参考手册》和《ARM?V8-M架构参考手册》。
5.1,系统定时器控制寄存器映射
R: read only, W: w rite only, R/W: both read and write
5.2,系统定时器控制寄存器描述
5.2.1,SysTick控制和状态寄存器(SYST_CTRL)
其中,COUNTFLAG 的相关定义为: 如果自上次读取该寄存器以来计时器计数为0,则系统计时计数器标志返回1。COUNTFLAG通过从1到0的计数转换来设置。COUNTFLAG在读取或写入当前值寄存器时清除。
系统滴答时钟源选择——CLKSRC 0=时钟源为(可选)外部参考时钟。 1=SysTick使用的核心时钟。
系统计时中断启用——TICKINT 0=倒计时到0不会导致挂起SysTick异常。软件可以使用COUNTFLAG来确定是否发生了计数为零的情况。 1=倒计时到0将导致挂起SysTick异常。通过在软件中写入寄存器来清除SysTick当前值寄存器不会导致SysTick挂起。
系统节拍计数器启用——ENABLE 0=计数器禁用。 1=计数器将以多冲方式运行。
5.2.2,SysTick重载值寄存器(SYST_LOAD)
系统计时重载值——RELOAD 计数器达到0时要加载到当前值寄存器的值。
5.2.3,SysTick当前值寄存器(SYST_VAL)
系统滴答值——CURRENT 当前计数器值。这是采样时计数器的值。计数器不提供读-修改-写保护。该寄存器是写清零的。软件写入任何值都会将寄存器清零。不支持 bits RAZ。
RAZ : Read-As-Zero 在任何实现中,位必须读为0,或者一个位域的所有值都是0。 参考链接: 关于一些术语的解释.
5.3,一个简单的参考程序
__STATIC_INLINE void CLK_SysTickLongDelay(uint32_t us)
{
uint32_t u32Delay;
u32Delay = 65536UL;
do
{
if(us > u32Delay)
{
us -= u32Delay;
}
else
{
u32Delay = us;
us = 0UL;
}
SysTick->LOAD = u32Delay * CyclesPerUs;
SysTick->VAL = (0x0UL);
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk;
while((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0UL);
SysTick->CTRL = 0UL;
}
while(us > 0UL);
}
该例子为一个简单的延时函数,采用了SysTick定时器进行延时操作。
6,UART
UART Interface Controller (UART) :UART接口控制器
6.1,概述
该芯片提供六路通用异步收发机 (Universal Asynchronous Receiver/Transmitters,UART)。UART控制器执行常速UART,并支持流量控制功能。UART控制器对从外设接收的数据执行串并转换,对从CPU发送的数据执行并串转换。每个UART控制器通道支持10种类型的中断。UART控制器还支持IrDA SIR、LIN和RS-485功能模式以及自动波特率测量功能。
6.2,特点
- 全双工异步通信;
- 将数据有效载荷的16/16字节输入先进先出分离;
- 支持硬件自动流量控制;
- 可编程接收器缓冲器触发电平;
- 支持每个通道的可编程波特率发生器;
- 支持nCTS、传入数据、接收数据先进先出达到阈值和RS-485地址匹配(AAD模式)唤醒功能;
- 支持8位接收器缓冲超时检测功能;
- 通过设置DL可编程传输上一站和下一起始位之间的数据延迟时间;
- 支持自动波特率测量和波特率补偿功能,
—LXT选择支持9600 bps的UART_CLK。 - 支持中断错误、帧错误、奇偶校验错误和接收/发送缓冲区溢出检测功能;
- 完全可编程的串行接口特性。
—可编程数据位数,5位、6位、7位、8位字符; —可编程奇偶校验位、偶、奇、无奇偶校验位或条形奇偶校验位生成和检测; —可编程停止位,1、1.5或2个停止位生成 - 支持IrDA SIR功能模式
—支持正常模式的3/16位持续时间; - 支持LIN功能模式(仅UART0/UART1具有LIN功能)
—支持LIN主/从模式; —支持发射机可编程中断生成功能; —支持接收机中断检测功能; - 支持RS-485功能模式。
—支持RS-4859位模式; —支持硬件或软件,可对NRT引脚进行编程以控制RS-485传输方向; - 支持PDMA传输功能
6.3,方框图
UART时钟控制和框图分别如下图6.3-1和图6.3-2所示: 注意:UARTx_CLK的频率不应大于HCLK的30倍。
图6.3-1 UART时钟控制图 图6.3-2 UART框图 每个块的详细描述如下: TX_FIFO 发送器采用16字节FIFO进行缓冲,以减少提供给CPU的中断数量。 RX_FIFO 接收器使用16字节FIFO(外加三个错误位BIF(UART_FIFO STS[6])、FEF(UART_FIFO STS[5])、PEF(UART_FIFO STS[4])进行缓冲,以减少向CPU提供的中断数量。 TX Shift Register 此模块负责串行移出传输数据。 RX Shift Register 此模块负责串行移入接收数据。 Modem Control and Status Register 调制解调器控制和状态寄存器,此寄存器控制调制解调器或数据集(或模拟调制解调器的外围设备)的接口。 Baud Rate Generator 波特率发生器,将外部时钟除以除数,得到所需的波特率时钟。请参阅波特率方程。 IrDA Encode IrDA编码,此块是IrDA编码控制块 IrDA Decode IrDA译码,此块是IrDA译码控制块 FIFO & Line Control and Status Register FIFO&线路控制和状态寄存器,该字段是寄存器集,包括用于发送器和接收器的FIFO控制寄存器(UART_FIFO)、FIFO状态寄存器(UART_FIFOSTS)和线路控制寄存器(UART_LINE)。超时寄存器(UART_TOUT)标识超时中断的条件 Auto-Baud Rate Measurement 自动波特率测量,此模块负责自动波特率测量。 Interrupt Control and Status Register 中断控制和状态寄存器,有十种类型的中断,接收数据可用中断(Receive Data Available Interrupt,RDAINT)、发送保持寄存器空中断(Transmit Holding Register Empty Interrupt ,THERINT)、发送器空中断(Transmitter Empty Interrupt ,TXENDINT)、接收线状态中断(奇偶校验错误或成帧错误或中断)(Receive Line Status Interrupt ,RLSINT)、调制解调器状态中断(MODEM Status Interrupt ,MODEMINT)、接收器缓冲器超时中断(Receiver Buffer Time-out Interrupt ,RXTOINT)、缓冲器错误中断(Buffer Error Interrupt ,BUFERRINT)、LIN总线中断(Bus Interrupt,LINT),唤醒中断(Wake-up Interrupt ,WKINT) 和自动波特率中断(Auto-Baud Rate Interrupt ,ABRINT)。中断启用寄存器(UART_INTEN)启用或禁用响应中断和中断状态寄存器(UART_INTSTS),以识别响应中断的发生。
6.4,基本配置
UART0的基本配置如下:
- 时钟源配置
–选择UART0SEL(CLK_CLKSEL1[25:24])上的UART0外设时钟源。 –选择UART0DIV(CLK_CLKDIV0[11:8])上UART0外设时钟的时钟分频器编号。 –在UART0CKEN(CLK_APBCLK0[16])中启用UART0外设时钟。 - 在UART0RST(SYS_IPR ST1[16])中重置UART0控制器。
- 引脚配置
UART1的基本配置如下:
- 时钟源配置
–选择UART1SEL(CLK_CLKSEL1[27:26])上的UART1外设时钟源。 –选择UART1DIV(CLK_CLKD IV0[15:12])上UART1外设时钟的时钟分频器编号。 –在UART1CKEN(CLK_APBCLK0[17])中启用UART1外设时钟。 - 复位UART1RST(SYSIPRST1[17])中的UART1控制器。
- 引脚配置
UART2 ~ UART5略,详见技术手册
6.5,功能说明
UART控制器支持四种功能模式,包括UART、IrDA、LIN和RS-485模式。用户可以通过设置UART_FUNCSEL寄存器来选择功能。以下部分将介绍这四种功能模式。
6.5.1,UART控制器波特率发生器
UART控制器包括一个可编程波特率发生器,能够将时钟输入除以除数,以产生发射器和接收器所需的串行时钟。表6.1列出了各种条件下的UART波特率公式。表6.2和表6.3列出了UART波特率参数和寄存器设置示例。在IrDA功能模式下,波特率发生器必须设置为模式0。更详细的寄存器说明见UART_BAUD寄存器。有三种设置模式。模式0由UART_Baud[29:28]设置为00。模式1由UART_Baud[29:28]设置为10。模式2由UART_Baud[29:28]设置为11。
表6.1 UART控制器波特率方程式表 表6.2 UART控制器波特率参数设置示例表 注:UART外设时钟=12 MHz
表6.3 UART控制器波特率寄存器设置示例表
6.5.2,UART控制器波特率补偿
UART控制器支持波特率补偿功能。它用于优化每一位的精度。补偿精度为UART模块时钟的一半,因为每个位都有BRCOMDEC位(UART_BRCOMP[31])定义正补偿或负补偿。如果BRCOMPDEC(UART_BRCOMP[31])=0,则每一位为正补偿,补偿位中将再附加一个模块时钟。如果BRCOMPDEC(UART_BRCOMP[31])=1,则每一位为负补偿,在补偿位中减少一个模块时钟。
BRCOMP [8:0] (UART_BRCOMP[8:0])有9位位置,可由用户配置以定义是否补偿相对位。BRCOMP[7:0]用于定义UART_DAT[7:0]的补偿,BRCOMP[8]用于定义奇偶校验位。
示例: 1, UART的外设时钟=32.768K,波特率为9600 UART外设时钟为32.768K->3.413(32768 / 9600) 外设时钟 / 位 如果波特分频器设置为1(3个外设时钟 / 位),则每个位的误差为-0.413外设时钟,且BRCOMPDEC=0。
表6.4 波特率补偿示例表1 因此BRCOMP(UART_BRCOMP[8:0])可以设置为9‘b010100101=0xa5。
2, UART的外设时钟=32.768K,波特率为4800 波特率为4800时,UART外设时钟为32.768K->6.827外设时钟/位 如果波特率分频器设置为5(7个外设时钟/位),则每位的误差为0.173外设时钟,BRCOMPDEC=1。
表6.5 波特率补偿示例表2 因此BRCOMP(UART_BRCOMP[8:0])可以设置为9‘b010000010=0x82。
6.5.3,UART控制器自动波特率功能模式
自动波特率功能可以自动测量从UART RX引脚接收数据的波特率。自动波特率测量完成后,测量波特率加载到BRD(UART_BAUD[15:0])。BAUDM1(UART_BAUD[29])和BAUDM0(UART_BAUD[28])均自动设置为1。从起始位到第一上升沿时间的UART RX数据由自动波特率功能检测帧中的2ABRDBITS位时间设置。 2ABRDBITS位从起始位到第一个上升沿的时间通过设置ABRDBITS(UART_ALTCTL[20:19])计算。设置ABRDEN(UART_ALTCTL[18])可使能自动波特率功能。在开始阶段,UART RX保持在1。一旦检测到下降沿,就接收起始位。自动波特率计数器复位并开始计数。当检测到第一个上升沿时,自动波特率计数器将停止。然后,自动波特率计数器值除以2ABRDBITS(UART_ALTCTL[20:19])自动加载到BRD(UART_BAUD[15:0])。ABRDEN(UART_ALTCTL[18])被清除。自动波特率如图6.5-1所示。自动波特率测量完成后,设置ABRDIF(UART_FIFOSTS[1])。当自动波特率计数器溢出时,设置ABRDTOIF(UART_FIFOSTS[2])。ABRDIF(UART_FIFOSTS[1])或ABRDTOIF(UART_FIFO STS[2])导致自动波特率标志ABRIF(UART_ALTCTL[17])生成。如果ABRIEN(UART_INTEN[18])使能,则ABRIF(UART_ALTCTL[17])会导致自动波特率中断ABRINT(UART_INTST[31])生成。
图6.5-1 自动波特率测量 编程序列示例: 1.编程ABRDBITS(UART_ALTCTL[20:19])以2ABRDBITS位时间确定UART RX数据从START开始的第一个上升沿时间。 2.设置ABRIEN(UART_INTEN[18])使能自动波特率功能中断。 3.设置ABRDEN(UART_ALTCTL[18])使能自动波特率功能。 4.设置ABRDIF(UART_FIFOSTS[1]),完成自动波特率测量。 5.操作UART发送和接收动作。 6.如果自动波特率计数器溢出,则设置ABRDTOIF(UART_FIFOSTS[2])。 7.转到步骤3。
6.5.4,UART控制器传输延迟时间值
UART控制器对DLY(UART_TOUT[15:8])进行编程,以控制传输中最后一个停止位和下一个开始位之间的传输延迟时间。这个单元是波特的。操作如图6.5-2所示。
图6.5-2 传输延迟时间操作
6.5.5,UART控制器FIFO控制和状态
UART控制器内置16字节发送器FIFO(TX_FIFO)和16字节接收器FIFO(RX_FIFO),可减少提供给CPU的中断数量。CPU可以在操作期间随时读取UART的状态。报告的状态信息包括UART正在执行的传输操作的情况,以及如果接收数据有奇偶校验、帧或中断错误时发生的3个错误条件(奇偶校验错误、成帧错误、中断中断)。UART、IrDA、LIN和RS485模式支持FIFO控制和状态功能。
6.5.6,UART控制器唤醒功能
UART控制器支持唤醒系统功能。唤醒功能包括nCTS引脚、传入数据唤醒、接收数据FIFO达到阈值唤醒、RS-485地址匹配(AAD模式)唤醒和接收数据FIFO阈值超时唤醒功能。CTSWKF(UART_WKSTS[0])、DATWKF(UART_WKSTS[1])、RFRTWKF(UART_WKSTS[2])、RS485WKF(UART_WKSTS[3])或TOUTWKF(UART_WKSTS[4])产生唤醒中断标志WKIF(UART_INTSTS[6。如果WKIEN(UART_INTEN[6])使能,则唤醒中断标志WKIF(UART_INTSTS[6])产生唤醒中断WKINT(UART_INTSTS[14])。 NCTS引脚唤醒:当系统处于掉电模式且设置了WKCTSEN(UART_WKCTL[0])时,nCTS引脚的切换可以唤醒系统。如果使能WKCTSEN(UART_WKCTL[0]),则nCTS引脚的切换会产生nCTS唤醒标志CTSWKF(UART_WKSTS[0])。NCTS唤醒如图6.5-3-5和图6.5-4所示。
图6.5-3 NCTS唤醒案例1(nCTS从低到高的转变) 注:稳定计数意味着HCLK源恢复稳定计数。
图6.5-4 NCTS唤醒案例2(nCTS从高到低的转变) 注:稳定计数意味着HCLK源恢复稳定计数。
传入数据唤醒 当系统处于掉电模式且设置了WKDATEN(UART_WKCTL[1])时,传入数据(UART_RXD)引脚的切换可以唤醒系统。为了在系统唤醒后接收输入数据,应设置STCOMP(UART_DWKCOMP[15:0])。STCOMP的这些位字段表示当系统从掉电模式唤醒时,UART_CLK选择了多少个时钟周期,UART控制器可以获得第一位(起始位)。
当传入数据唤醒系统时,传入数据将被接收并存储在FIFO中。如果WKDATEN(UART_WKCTL[1])使能,则输入数据(UART_RXD)引脚的切换会产生输入数据唤醒标志DATWKF(UART_WKSTS[1])。具体的数据唤醒如图6.5-5所示。
注1:UART控制器时钟源应选择为HIRC,起始位补偿时间约为8.602us。表示STCOMP(UART_DWKCOMP[15:0])的值可以设置为0x68。 注2:BRD(UART_BAUD[15:0])的值应大于STCOMP(UART_DWKCOMP[15:0])。
图6.5-5 UART数据唤醒 注1:稳定计数表示HCLK源恢复稳定计数。 注2:UART_CLK稳定计数表示UART时钟源恢复稳定计数。
接收数据FIFO达到阈值唤醒 通过设置WKRFRTEN(UART_WKCTL[2])启用接收数据FIFO阈值达到唤醒功能。在掉电模式下,当RX FIFO中接收的数据数量达到阈值RFITL(UART_FIFO[7:4])时,可以唤醒系统。如果WKRFRTEN(UART_WKCTL[2])使能,则RX FIFO中的接收数据数量达到阈值RFITL(UART_FIFO[7:4]),从而生成接收数据FIFO达到阈值唤醒标志RFRTWKF(UART_WKSTS[2])。接收数据FIFO达到阈值唤醒如图6.5-6所示。
注:在掉电模式下,应选择UART控制器时钟源作为LXT以接收数据
图6.5-5 UART接收数据FIFO达到阈值唤醒 注:稳定计数意味着HCLK源恢复稳定计数
RS-485地址匹配(AAD模式)唤醒,接收数据FIFO阈值超时唤醒略,详见技术手册
6.5.7,UART控制器中断和状态
每个UART控制器支持10种类型的中断,包括:
- 接收数据可用中断;
- 传输保持寄存器空中断;
- 发送器空中断;
- 接收线状态中断;
–中断中断标志; –成帧错误标志; –奇偶校验错误标志; –RS-485地址字节检测标志(ADDRDETF) - 调制解调器状态中断(MODEMINT);
–检测NCTS状态更改标志(CTSDETF); - 接收器缓冲区超时中断;
- 缓冲区错误中断;
–TX溢出错误中断标志; –RX溢出错误中断标志; - LIN总线中断(LININT);
–LIN中断检测标志 (BRKDETF); –位错误检测状态标志(BITEF); –LIN从ID奇偶校验错误标志(SLVIDPEF); –LIN从属报头错误标志(SLVHEF); –LIN从属报头检测标志(SLVHDETF) - 唤醒中断(WKINT);
– nCTS唤醒标志(CTSWKF); –传入数据唤醒标志(DATWKF); –接收数据FIFO达到阈值唤醒标志(RFRTWKF); –RS-485地址匹配(AAD模式)唤醒标志(RS485WKF); –接收数据FIFO阈值超时唤醒标志(TOUTWKF) - 自动波特率中断(ABRINT);
–自动波特率检测中断标志(ABRDIF) –自动波特率检测超时中断标志(ABRDTOIF)
表6.6描述了中断源和标志。生成中断标志并设置中断使能位时,会生成中断。用户必须在中断生成后清除中断标志。
表6.6 UART控制器中断源和标志列表 表头:中断源 中断指示器 中断启用位 中断标志 标志 起始者 标志清除者 N/A:Not Applicable
6.5.8,UART功能模式
UART控制器提供UART功能(将FUNCSEL(UART_FUNCSEL[1:0])设置为‘00’以启用UART功能模式)。UART波特率高达1Mbps。
UART提供全双工和异步通信。发送器和接收器包含用于有效载荷的16字节FIFO。用户可以对接收器缓冲触发电平和接收器缓冲超时检测进行编程。通过设置DLY(UART_TOUT[15:8])寄存器,可以对上一个停止位和下一个起始位之间的发送数据延迟时间进行编程。UART支持硬件自动流量控制,可提供可编程NRT流量控制触发级别。RX FIFO中的数据字节数等于或大于RTSTRGLV(UART_FIFO[19:16]),则取消对NRT的置位。
UART线路控制功能 通过设置UART_LINE寄存器,UART控制器支持完全可编程的串行接口特性。用户可以对UART_LINE寄存器的字长、停止位和奇偶校验位设置进行编程。表6.7和表6.18列出了UART字、停止位长度和奇偶校验位设置。
表6.7 UART线控制字和停止长度设置 表6.8 奇偶校验位设置的UART线路控制 注:
- 奇数奇偶校验是通过将数据流中的所有“1”相加,并将奇偶校验位添加到总比特中来计算的,以使总计数为奇数;
- 偶校验通过将数据流中的所有“1”相加并将奇偶校验位添加到总比特来计算偶数奇偶校验,以使计数为偶数;
- 强制掩码奇偶校验:奇偶校验位总是逻辑1。无论“1”的总数是多少(偶数或奇数),串行字节上的奇偶校验位都设置为“1”。
- 强制空间奇偶校验:奇偶校验位始终逻辑0。无论“1”的总数是多少(偶数或奇数),串行字节上的奇偶校验位都设置为“0”。
UART自动流量控制功能 UART支持自动流量控制功能,该功能使用两个信号nCTS(清除发送)和nRTS(请求发送)来控制UART和外部设备(例如调制解调器)之间的数据流传输。当自动流使能时,在UART将nRTS置位到外部设备之前,不允许UART接收数据。当RX FIFO中存储的字节数等于RTSTRGLV(UART_FIFO[19:16])的值时,nRTS被解除断言。当UART检测到来自外部设备的nCTS被断言时,UART发送数据。如果未检测到有效的断言nCTS,则UART将不发送数据。自动流量控制框图如图6.5-6所示。
图6.5-6 自动流量控制块图 图6.5-7展示了UART功能模式的nCTS自动流量控制。用户必须设置ATOCTSEN(UART_INTEN[13])才能启用nCTS自动流量控制功能。CTSACTLV(UART_MODEMSTS[8])可以设置nCTS引脚输入激活状态。当nCTS引脚输入发生任何状态变化时,设置CTSDETF(UART_MODEMSTS[0]),然后从Tx FIFO自动传输Tx数据。
图6.5-7 UART nCTS自动流量控制已启用 如图6.5-8所示,在UART NRTS自动流量控制模式下(ATORTSEN(UART_INTEN[12])=1),NRTS内部信号由具有RTSTRGLV(UART_FIFO[19:16])触发电平的UARTFIFO控制器控制。 设置RTSACTLV(UART_MODEM[9])可以控制NRTS引脚输出与NRTS信号相反还是不相反。用户可以读取RTSSTS(UART_MODEM[13])位,以获得真实的NRT引脚输出电压逻辑状态。
图6.5-8 UART nRTS自动流量控制已启用 如图6.5-9所示,在软件模式(ATORTSEN(UART_INTEN[12])=0)下,NRTS流量直接由RTS(UART_MODEM[1])控制位的软件编程控制。 设置RTSACTLV(UART_MODEM[9])可根据RTS(UART_MODEM[1])控制位控制NRTS引脚输出是反转还是非反转。用户可以读取RTSSTS(UART_MODEM[13])位,以获得真实的NRT引脚输出电压逻辑状态。
图6.5-9 带软件控制的UART nRTS自动流水线
6.5.9,IrDA功能模式
UART控制器还提供串行IrDA(SIR,串行红外)功能(将UART_FUNCSEL[1:0]设置为‘10’以启用IrDA功能)。SIR规范定义了一种具有1个起始位、8个数据位和1个停止位的短程红外异步串行传输模式。最大数据速率为115.2 kbps。IrDA SIR块包含IrDA SIR协议编码器/解码器。IrDA SIR协议仅为半双工。因此,它不能同时传输和接收数据。IrDA SIR物理层规定传输和接收之间的最小传输延迟为10 ms,此延迟功能必须由软件实现。 在IrDA模式下,必须清除BAUDM1(UART_Baud[29])。 波特率=时钟/(16*(BRD+2)) ,其中BRD(UART_BAUD[15:0])是UART_BAUD寄存器中的波特率分频器。
注:IrDA主机和IrDA从机之间的波特率容差为±5%。 IrDA控制框图如图6.5-10所示。
图6.5-10 IrDA控制框图 IrDA SIR发送编码器( IrDA SIR Transmit Encoder) IrDA SIR发送编码器对UART输出的非归零(NRZ)发送位流进行调制。IrDA SIR物理层规定使用归零反转(RZI)调制方案,该方案将逻辑0表示为红外光脉冲。调制后的输出脉冲流被传输到外部输出驱动器和红外发光二极管。 传输脉冲宽度指定为波特率的3/16周期
IrDA SIR接收解码器(IrDA SIR Receive Decoder) IrDA SIR接收解码器解调来自输入检测器的归零比特流,并将NRZ串行比特流输出到UART接收的数据输入。 在空闲状态下,解码器输入为高电平。当解码器输入为低时,检测到起始位。在正常操作中,RXINV(UART_IrDA[6])设置为‘1’,TXINV(UART_IrDA[5])设置为‘0’。
IrDA SIR操作 IrDA SIR编码器/解码器提供在UART数据流和半双工串行SIR接口之间进行转换的功能。图6.5-11为IrDA编解码器波形。
图6.5-11 IrDA TX/RX时序图
6.5.10,LIN功能模式(本地互联网络)
UART控制器支持LIN功能。将FUNCSEL(UART_FUNCSEL[1:0])设置为‘01’以选择LIN模式操作。UART控制器支持LIN主机模式下的LIN中断/分隔符生成和中断/分隔符检测,并支持LIN从模式下的报头检测和自动重新同步。
LIN帧结构 根据LIN协议,所有传输的信息都打包为帧;帧由头部(由主任务提供)和响应(由从任务提供)组成。报头(由主任务提供)由一个中断域和一个同步域组成,后跟一个帧标识符(帧ID)。帧标识符唯一地定义帧的目的。指定从属任务用于提供与帧ID相关联的响应。响应由数据字段和校验和字段组成。
LIN字节的结构 在LIN模式下,根据LIN标准,每个字节字段由一个值为0(显性)的起始位启动,然后是8个数据位和无奇偶校验位,LSB首先是值为1(隐性)的1个停止位,最后是值为1(隐性)的停止位。
LIN主机模式 UART控制器支持LIN主机模式。要使能并初始化LIN主机模式,需要执行以下步骤:
- 设置UART_BAUD寄存器以选择所需的波特率。
- 将WLS(UART_LINE[1:0])设置为‘11’以8位配置字长,清除PBE(UART_LIN E[3])位以禁用奇偶校验,并清除NSB(UART_LIN E[2])位以配置一个停止位。
- 将FUNCSEL(UART_FUNCSEL[1:0])设置为‘01’,选择LIN功能模式操作。
其余略,详见技术手册
6.5.11,RS-485功能模式
UART控制器的另一个替代功能是RS-485功能(用户必须将UART_FUNCSEL[1:0]设置为‘11’才能启用RS-485功能),以及由NRTS引脚从异步串行端口提供的方向控制。RS-485收发器控制是通过使用NRTS控制信号使能RS-485驱动器来实现的。RX和TX的许多特性与RS-485模式下的UART相同。
UART控制器可以配置为RS-485可寻址从机,RS-485主发送器将通过将奇偶校验(第9位)设置为1来识别地址字符。对于数据字符,奇偶校验设置为0。软件可使用UART_LINE寄存器控制第9位(当PBE、EPE和SPE设置时,第9位发送0,当PBE和SPE设置且EPE清0时,第9位发送1)。
该控制器支持三种工作模式:RS-485正常多点工作模式(NMM)、RS485自动地址检测工作模式(AAD)和RS-485自动方向控制工作模式(AUD)。软件可以通过对UART_ALTCTL寄存器进行编程来选择任何工作模式,并通过设置DLY(UART_TOUT[15:8])寄存器来驱动离开Tx FIFO的最后一个停止位与的去置位之间的传输延迟时间。
具体模式解释略,详见技术手册
6.5.11,PDMA传输函数
UART控制器支持PDMA传输函数。通过配置PDMA参数,将UART_DAT设置为PDMA目的地址。当TXPDMAEN(UART_INTEN[14])设置为1时,控制器将向PDMA控制器发出自动开始PDMA传输过程的请求。
通过配置PDMA参数,将UART_DAT设置为PDMA源地址。当RXPDMAEN(UART_INTEN[15])设置为1时,控制器将开始PDMA接收过程。当RX FIFO缓冲器中有数据时,UART控制器将自动向PDMA控制器发出请求。
注意: 如果STOPn(PDMA_STOP[n])设置为停止UART RXPDMA任务,且UART接收未完成。UART控制器将完成当前接收数据在接收缓冲器中的传输和存储。通过读取RXEMPTY(UART_FIFOSTS[14])检查接收缓冲区中是否有有效数据。
6.5.12,Register Map and Register Description
略,详见技术手册
|