读书人

TQ210裸机编程(六)UART(1)

发布时间: 2013-10-16 11:29:46 作者: rapoo

TQ210裸机编程(6)——UART(1)

S5PV210包含4个异步收发器(UART),提供4个独立的异步串行输入/输出(I/O)端口。所有端口可工作于中断模式或DMA模式。提供高达3Mbps的位速率。每个UART包含2个FIFO用于接收和发送数据。

具有可编程的波特率、红外收发、1位或2位停止位、5~8位数据位、校验。


UART框图如下:

TQ210裸机编程(六)——UART(1)

数据发送:要发送的数据帧是可编程的。它包含1位起始位,5~8位数据位,1个选项校验位,1或2位停止位,这些都通过ULCONn寄存器来设置。在FIFO模式下发送器将要发送的数据发送给Tx FIFO,在非FIFO模式下,发送器将要发送的数据发送给Tx保持寄存器。

数据接收:和数据发送类似。


串口编程操作步骤:

1、配置时钟,选择时钟源

2、配置ULCONn寄存器:设置数据位、停止位校验位、模式

3、配置UCONn寄存器:设置数据接收和发送模式、时钟源

3、设置UFCONn:启用或静止FIFO

4、配置UBRDIVn和UDIVSLOTn:计算波特率

5、发送数据:等待发送器为空,将要发送的8位数据赋给发送缓存寄存器UTXHn

6、接收数据:等待接收缓冲区有数据可读,从接收缓存寄存器URXHn中取出数据。


波特率计算:

DIV_VAL = UBRDIVn + (num of 1's in UDIVSLOTn)/16
DIV_VAL = (PCLK / (bps x 16)) ?1
或者
DIV_VAL = (SCLK_UART / (bps x 16)) ?1

比如配置波特率为115200bps,时钟源选择PCLK=66MHz

DIV_VAL = (66000000/(115200 x 16))-1 = 35.8 - 1 = 34.8
UBRDIV0 = 34 —IV_VAL的整数部分)
(num of 1's in UDIVSLOTn)/16 = 0.8 —IV_VAL的小数部分)
(num of 1's in UDIVSLOTn) = 12
UDIVSLOT0 = 0xDDDD (查表)

TQ210裸机编程(六)——UART(1)


实验效果:

按数字1则改变LED1的状态;按数字2改变LED2的状态。


代码:

start.S

uart.bin: start.o clock.o uart.o main.oarm-linux-ld -Ttext 0xD0020010 -o uart.elf $^arm-linux-objcopy -O binary uart.elf $@arm-linux-objdump -D uart.elf > uart.dis%.o : %.carm-linux-gcc -c $< -o $@%.o : %.Sarm-linux-gcc -c $< -o $@clean:rm *.o *.elf *.bin *.dis

程序烧写步骤见前面章节。

转载请注明来源:http://blog.csdn.net/zjhsucceed_329/

读书人网 >编程

热点推荐