PIC32 3-4系列微控制器集成了2个UART设备,而在5-7系列中则集成了多达6六个设备,减少了特定应用下功能扩展的必要,降低了系统设计的成本与复杂度,并且依靠高集成度提高了可靠性.
参考使用手册,可将PIC32 Uart的基本特性概况如下:
工作模式
1)8位模式
传送的数据位宽为8 bits,另外奇偶校验与停止位(多达2位)可配置;该模式下数据的操作单位为byte.
2)9位模式
9位模式可用于多从机寻址,第9位为8 bits地址与数据的区分,无校验位,停止位(多达2位)可配置;该模式下数据的操作单位为WORD(4 bytes).
FIFO缓冲区的使用
为减少单字节中断带来操作时间的浪费,可采用发送/接收4字节FIFO缓冲区.对于发送数据而言,数据量是已知的,能够完全输出;而接收数据量未知的情况下,或虽然已知,但最后字节量少于设定FIFO中断阈值的情况下,存在无法产生中断的概率,需要采用手段处理.
IRDA与LIN协议的应用
PIC32内部带有集成的UART/IRDA编码/解码器,可用于红外传输与LIN网通信.
Break字符发送/接收
除了用于LIN网通信中的帧识别外,没有其他用途.
自适应波特率
网络中波特率不定的状态下,PIC32提供了自适应特性.通过设置寄存器中Auto Baud的位,设备可根据传送的0x55数据,自动生成相应波特率值并写入波特率控制寄存器,清除Auto Baud位,接下来的通信速率皆按此速率进行.
低功耗模式下的应用
Sleep与Idle模式为CPU的两种低功耗模式,在某些有低功耗要求的场合,可使用UART唤醒方式.
Sleep模式下,UART没有时钟源,处于完全停滞状态.Wake位置位条件下,RX引脚的下降沿会激发CPU从sleep状态苏醒,
Idle模式下,UART可选择为继续和停止两种状态(参考手册中的Idle被替换为Sleep,多为Microchip的粗心所致).
限于苏醒时间的长短,唤醒位需要更多的位时间.
另外,硬件流控制信号RTS、CTS也可因需要采用。
可见,PIC32集成的UART基本覆盖了常用异步串行传输接口的一些功能需求,具有较为广泛的适用性,红外编码与LIN网络的支持特性扩展了UART的应用范围。
编程须知
1、UART ID号
3、4系列的单片机集成了2个UART控制器,分别以UART1与UART2作为两个设备的ID,见peripheral中的uart.h; 5、6、7系列的6个UART控制器ID分别为UART1A,UART3A,UART1B,UART2A,UART2B,UART3B。
两种系列的单片机采用同样一个UART_MODULE枚举类型,在编译时根据包含器件头文件预定义,如<p32mx460f512l.h>中对UART的预定义生成不同的ID。在uart_lib.c中所有库函数都是根据传入的ID号进行操作的。
2、接口函数统一性的原因
UART_LIB.C中对每个设备操作接口的统一性,是建立在PIC32 对寄存器操作的规律性基础之上的。几乎所有的寄存器地址都是这样一个顺序.
寄存器名称 操作 地址
REG 0000
CLR 按位清除 0001
SET 按位置位 0002
INV 位取反 0003
另外UART设备控制寄存器的类别是相同的,都包含有mode,status,Tx,Rx,Baud rate寄存器。
uart_lib.c中定义的数据结构UART_REGS * const uartReg[] =
{
#if defined _UART1 || defined _UART1A
(UART_REGS *)_UART1_BASE_ADDRESS,
#endif
#if defined _UART2 || defined _UART3A
(UART_REGS *)_UART2_BASE_ADDRESS,
#endif
#ifdef _UART1B
(UART_REGS *)_UART1B_BASE_ADDRESS,
#endif
#ifdef _UART2A
(UART_REGS *)_UART2A_BASE_ADDRESS,
#endif
#ifdef _UART2B
(UART_REGS *)_UART2B_BASE_ADDRESS,
#endif
#ifdef _UART3B
(UART_REGS *)_UART3B_BASE_ADDRESS
#endif
};
包含了每个UART设备REG寄存器的地址,根据传入的ID参数可获取到相应的起始地址,然后依据相应操作,完成接口函数的功能。
文章评论(0条评论)
登录后参与讨论