您的位置 首页 国产IC

深化了解ARM系统架构(S3C6410)—UART实例

1、概括OVERVIEWS3C6410提供了4个独立的异步串行口,每个独立的串行口可以工作在中断模式或DMA模式下。也就是说UART能够产生一个中断或DM…

1、 归纳OVERVIEW

S3C6410供给了4个独立的异步串行口,每个独立的串行口能够作业在中止形式或DMA形式下。也就是说UART能够发生一个中止或DMA恳求。UART能够供给最高3Mbps。每个UART包含2个64位的FIFO,别离用于接纳,发送缓冲。

S3C6410 UART 包含可编程的波特率,红外发射接纳,1或2个中止校验位,5,6,7,8数据位,和奇偶查验。每个UART包含一个波特率发生器,接纳发送和操控单元。

波特率能够由PCLK,EXT_UCLK0或EX_UCLK1确定。发送接纳器别离包含了一个64位FIFO和一个数据移位器。经过向FIFO写入数据,再把FIFO中的数据拷贝到数据移位器中,然后经过TxDn引脚被发送出去。接纳数据与之相反:RxDn->datashifter->FIFO.

2、 特性FEATURES

RxD0, TxD0, RxD1, TxD1, RxD2, TxD2, RxD3and TxD3支撑DMA格局和中止格局。

UART 0,1,2,3支撑红外通讯和64位FIFO

UART 0,1支撑nRTS0, nCTS0, nRTS1, and nCTS1

支撑高速操作。

支撑握手操作。

下面将描绘数据的发送和接纳,中止的发生,波特率的发生,回环形式,红外形式,和主动流操控形式。

3 、 数据发送DATA TRANSMISSION

发送的数据帧是能够编程的,其间包含一个开端位,5~8位数据位,奇偶校验位和1或2个中止位。这些都能够经过线性操控器ULCONn操控。发送器能够发生中止条件,这中止条件能强制在一个帧数据发送时刻内使串口输出0状况。

The data framefor transmission is programmable. It consists of a start bit, 5 to 8 data bits,an optional parity bit and 1 to 2 stop bits, which can be specified by the linecontrol register (ULCONn). The transmitter can also produce the breakcondition, which forces the serial output to logic 0 state for one frametransmission time. This block transmits break signals after the presenttransmission word is transmitted completely. After the break signal transmission,it continuously transmits data into the Tx FIFO (Tx holding register in thecase of Non-FIFO mode).

4、 数据接纳DATA RECEPTION

接纳的数据帧是能够编程的,其间包含一个开端位,5~8位数据位,奇偶校验位和1或2个中止位。这些都能够经过线性操控器ULCONn操控。接纳器能检测到溢出过错,奇偶校验过错,帧过错,和中止条件。每一个过错都能够设置一个过错标志。

overrun error指的是在一个曾经的数据还没有被读走之前新的数据就把此数据覆盖了。

parity error指的是接纳器检测到一个非意料的奇偶条件。

frame error指的是收到的数据没有中止位。

break condition指的是RxDn在超越一个数据帧的时刻始终保持0状况。

当接纳器在三个字的时刻内(其距离依据字长位的设置)没有收到任何数据且RxFIFO为空,发生超时条件。

5、 主动流操控AUTO FLOW CONTROL(AFC)

S3C6410中的UART0 和UART1 支撑有nRTS和nCTS信号主动操控流。这样,它能衔接至外部的UART。假如用户想衔接UART到Modem。

则有必要经过设置UMCONn制止主动流而且经过软件来操控nRTS。只要在nCTS信号有用的情况下,UART才会向FIFO中写入数据。在主动流操控中nCTS表明另一个UART现已准备好接纳数据了。在接纳数据之前,假如FIFO有2个以上空余字节空间则把nRTS设为有用。空余字节空间小于1时,则要把nRTS设为无效。

串口部分寄存器较多,其实依据需要细心装备即可。

现已编写好的串口程序如下:

[cpp]view plaincopyprint?

  1. voidUart_Init(void)
  2. {
  3. //UARTI/Oportinitialize(RXD0:GPA0,TXD0:GPA1)
  4. rGPACON=(rGPACON&~(0xff<<0))|(0x22<<0);//GPA0->RXD0,GPA1->TXD0
  5. rGPAPUD=(rGPAPUD&~(0xf<<0))|(0x1<<0);//RXD0:Pull-down,TXD0:pullup/downdisable
  6. //InitializeUARTCh0
  7. rULCON0=(0<<6)|(0<<3)|(0<<2)|(3<<0);//NormalMode,NoParity,1StopBit,8BitData
  8. rUCON0=(0<<10)|(1<<9)|(1<<8)|(0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1<<0);//PCLKdivide,PollingMode
  9. rUFCON0=(0<<6)|(0<<4)|(0<<2)|(0<<1)|(0<<0);//DisableFIFO
  10. rUMCON0=(0<<5)|(0<<4)|(0<<0);//DisableAutoFlowControl
  11. rUBRDIV0=35;//Baudrate
  12. rUDIVSLOT0=0x80;//aSlotTable[DivSlot];
  13. }
  14. voidUart_SendByte(intdata)
  15. {
  16. while(!(rUTRSTAT0&0x2));//WaituntilTHRisempty.
  17. //_Delay();
  18. WrUTXH0(data);
  19. }
  20. voidUart_SendString(char*pt)
  21. {
  22. while(*pt)
  23. Uart_SendByte(*pt++);
  24. }
  25. //=====================================================================
  26. charUart_GetCh(void)
  27. {
  28. while(!(rUTRSTAT0&0x1));//Receivedataready
  29. returnRdURXH0();
  30. }
  31. charUart_GetKey(void)
  32. {
  33. if(rUTRSTAT0&0x1)//Receivedataready
  34. returnRdURXH0();
  35. return0;
  36. }

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/ic/276970.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部