TQ2440之UART

概述:S3C2440有三个独立的异步串行I/O端口,每个都可以基于中断和居于DMA模式的操作,UART的时钟源是PCLK(外设的频率)、FCLK/n(ARM的主频)和UEXTCLK(外部时钟输入),每个UART包含一个波特率发生器、发送器、接收器和一个控制单元,如图:

 

ULCONn:线路控制寄存器,包括起始位,数据位,奇偶校验位,停止位,红外模式和普通模式

UCONn:控制寄存器,FCLK分频器,时钟选择,中断类型(脉冲和电平)

UFCONn:FIFO控制寄存器,FIFO的触发深度,使能,FIFO清理

UMCONn:UART MODEM控制寄存器

UTRSTATn:RX TX状态寄存器(与FIFO状态寄存器的区别),发送器空,发送缓冲器空,接受缓冲期数据就绪

UFSTATn:FIFO状态寄存器,FIFO字节计数

UMSTATn:MODEM寄存器

UTXHn URXHn:接受和发送缓冲寄存器

UBRDIVn:波特率分频寄存器

UERSTATn:错误状态寄存器,断点错误,帧错误,奇偶校验错误,溢出错误

 

源码:

#define WrUTXH0(ch) (*(volatile unsigned char *)0x50000023)=(unsigned char)(ch)

#define RdURXH0()   (*(volatile unsigned char *)0x50000027)

 

void uart_config(int pclk, int baud)

{

   rUFCON0 = 0x0;   //UART channel 0 FIFO control register, FIFO disable

   rULCON0 = 0x3;   //Line control register : Normal,No parity,1 stop,8 bits

   rUCON0  = 0x245;   // Control register

   rUBRDIV0=( (int)(pclk/16./baud+0.5) -1 );   //Baud rate divisior register 0

}

void write_data(char data)

{

while(!(rUTRSTAT0 & 0x2));

WrUTXH0(ch);

}

char read_data(void)

{

 while(!(rUTRSTAT0 & 0x1)); //Receive data ready
 return RdURXH0();

}

int main(int argc, int *argv[])

{

char c;

uart_config(pclk, 115200); //pclk is cpu peripheral clock

write_data('A');

c = read_data();

printf("%c\n", c);

}

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值