微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM·UART

ARM·UART

时间:11-24 来源:互联网 点击:

1)选定uart输出的管脚

2)ULCON (红外传输,奇偶校验,数据位,停止位)

3)UCON(不知道他怎么设置的,先照抄吧,完全没看懂)

4)UFCON(不使用UART FIFO)

#include "s3c24xx.h"

#include "serial.h"

#define TXD0READY (1<2)

#define RXD0READY (1)

#define PCLK 50000000 // init.c中的clock_init函数设置PCLK为50MHz

#define UART_CLK PCLK // UART0的时钟源设为PCLK

#define UART_BAUD_RATE 115200 // 波特率

#define UART_BRD ((UART_CLK / (UART_BAUD_RATE * 16)) - 1)

void uart0_init(void)

{

GPHCON |= 0xa0; // GPH2,GPH3用作TXD0,RXD0 (1010 0000)

GPHUP = 0x0c; // GPH2,GPH3内部上拉 (0000 1100)

ULCON0 = 0x03; // 8N1(8个数据位,无较验,1个停止位) (0000 0011)

UCON0 = 0x05; // 查询方式,UART时钟源为PCLK ( )

UFCON0 = 0x00; // 不使用FIFO

UMCON0 = 0x00; // 不使用流控

UBRdiv0 = UART_BRD; // 波特率为115200

}

void putc(unsigned char c)

{

while (!(UTRSTAT0 & TXD0READY));

UTXH0 = c;

}

unsigned char getc(void)

{

while (!(UTRSTAT0 & RXD0READY));

return URXH0;

}

int isDigit(unsigned char c)

{

if (c >= 0 && c <= 9)

return 1;

else

return 0;

}

int isLetter(unsigned char c)

{

if (c >= a && c <= z)

return 1;

else if (c >= A && c <= Z)

return 1;

else

return 0;

}

#include "serial.h"

int main()

{

unsigned char c;

uart0_init(); // 波特率115200,8N1(8个数据位,无校验位,1个停止位)

while(1)

{

// 从串口接收数据后,判断其是否数字或子母,若是则加1后输出

c = getc();

if (isDigit(c) || isLetter(c))

putc(c+1);

}

return 0;

}

1)GPH


2)ULCON

3)UCON



4)UFCON




5)UMCON


6)UBRdiv


7)

对于UTRSTATx寄存器中的0,1空和非空的问题,无须纠缠太多,只要记住为“1”才可读,才可写即可。

(8)

UTXHn寄存器:SOC将数据写入这个寄存器,UART会将它保存到发送移位寄存器中,并自动发送出去;

URXHn寄存器:当UART收到数据时,SOC读取这个寄存器,即可获得数据

(详细可参考S3C2440全套中文手册)

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top