波特率发生器
每个UART控制器都有各自的波特率发生器来产生发送和接收资料所用的序列时钟,波特率发生器的时钟源可以CPU内部的系统时钟,也可以从CPU的 UCLK 管脚由外部取得时钟信号,并且可以通过 UCONn 选择各自的时钟源。
波特率产生的具体计算方法如下:
当选择CPU内部时钟时:
UBRDIVn=(int)(PCLK/(bps*16))-1,bps为所需要的波特率值,PCLK为CPU内部外设总线(APB)的工作时钟。
当需要得到更精确的波特率时,可以选择由 UCLK 引入的外部时钟来生成。
UBRDIVn=(int)(UCLK/(bps*16))-1
LoopBack操作模式
S3C2410 CPU的UART提供了一种测试模式,也就是这里所说的LoopBack模式。在设计系统的具体应用时,为了判断通讯故障是由于外部的数据链路上的问题,还是CPU内驱动程序或CPU本身的问题,这就需要采用LoopBack模式来进行测试。在LoopBack模式中,资料发送端TXD在UART内部就从逻辑上与接收端RXD连在一起,并可以来验证资料的收发是否正常
UART控制寄存器
1:ULCONn (UART Line Control Register)
保留位 [7]
红外模式选择位 【6】 0 = Normal mode operation(基本模式)
1 = Infra-Red Tx/Rx mode(红外模式)
奇偶校正模式选择 [5:3] 0xx = No parity (不设置)
100 = Odd parity (奇校正)
101 = Even parity (偶校正)
110 = Parity forced/checked as 1
111 = Parity forced/checked as 0
停止位设置 [2] 0 = One stop bit per frame(每祯一个停止位)
1 = Two stop bit per frame (每祯两个停止位)
数据位长度[1:0] 00 = 5-bits 01 = 6-bits
10 = 7-bits 11 = 8-bits
2:UART CONTROL REGISTER
选择时钟源: [10] 0=PCLK : UBRDIVn = (int)(PCLK / (bps x 16) ) -1
1=UCLK(@GPH8) : UBRDIVn = (int)(UCLK / (bps x 16) ) -1
发送中断类型选择 [9] 0 = 脉冲式中断 (Interrupt is requested as soon as the Tx buffer becomes
empty in Non-FIFO mode or reaches Tx FIFO Trigger Level in FIFO
mode.)
1 =电平式中断(Interrupt is requested while Tx buffer is empty in Non-FIFO
mode or reaches Tx FIFO Trigger Level in FIFO mode.)
接收中断类型选择 [8] 0 = Pulse (脉冲式/边沿式中断。非FIFO模式时,一旦接收缓冲区中有资料,即产生一个中断;为FIFO模式时,一旦当FIFO中的资料达到一定的触发水平后,即产生一个中断)
1 = Level (电平模式中断。非FIFO模式时,只要接收缓冲区中有资料,即产生中断;为FIFO模式时,只要FIFO中的资料达到触发水平后,即产生中断.)
接收超时中断使能 [7] 0 = Disable 1 = Enable
接收错误中断使能 [6] 0 = Do not generate receive error status interrupt.
1 = Generate receive error status interrupt.
Loopback Mode(使能该位使其处于进入测试模式)
[5] 0 = Normal operation 1 = Loopback mode
选择发送暂停信号 [4] (在发送完该位的后,自动清零)
0 = Normal transmit 1 = Send break signal