微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > S3C2440 UART串口驱动

S3C2440 UART串口驱动

时间:11-20 来源:互联网 点击:
xmain.c:uart_init函数对UART0进行初始化,然后进入死循环内,不停打印字符串“Uart串口打印试验”。

/* xmain.c */

/* GPIO registers */
#defineGPHCON(*(volatile unsigned long *)0x56000070)
#defineGPHDAT(*(volatile unsigned long *)0x56000074)
#defineGPHUP(*(volatile unsigned long *)0x56000078)

/*UART registers*/
#defineULCON0(*(volatile unsigned long *)0x50000000)
#defineUCON0(*(volatile unsigned long *)0x50000004)
#defineUFCON0(*(volatile unsigned long *)0x50000008)
#defineUMCON0(*(volatile unsigned long *)0x5000000c)
#defineUTRSTAT0(*(volatile unsigned long *)0x50000010)
#defineUTXH0(*(volatile unsigned char *)0x50000020)
#defineURXH0(*(volatile unsigned char *)0x50000024)
#defineUBRdiv0(*(volatile unsigned long *)0x50000028)

#defineTXD0READY(1<2)//发送数据状态OK
#defineRXD0READY(1)//接收数据状态OK

/* UART串口初始化*/
void uart_init( )
{
GPHCON |= 0xa0;//GPH2,GPH3 used as TXD0,RXD0
GPHUP= 0x0;//GPH2,GPH3内部上拉
ULCON0= 0x03;//8N1
UCON0= 0x05;//查询方式为轮询或中断;时钟选择为PCLK
UFCON0 = 0x00;//不使用FIFO
UMCON0 = 0x00;//不使用流控
UBRdiv0 = 12;//波特率为57600,PCLK=12Mhz
}

/* UART串口单个字符打印函数*/
extern void putc(unsigned char c)
{
while( ! (UTRSTAT0 & TXD0READY) );
UTXH0 = c;
}

/* UART串口接受单个字符函数*/
extern unsigned char getc(void)
{
while( ! (UTRSTAT0 & RXD0READY) );
return URXH0;
}

/* UART串口字符串打印函数*/
extern int printk(const char* str)
{
int i = 0;
while( str[i] ){
putc( (unsigned char) str[i++] );
}
return i;
}

__inline void delay(int msec)
{
int i, j;
for(i = 1000; i > 0; i--)
for(j = msec*10; j > 0; j--)
/* do nothing */;
}

/* xmain通过UART串口打印字符串*/
int xmain()
{
uart_init();
while(1) {
delay(10);
printk("Uart串口打印试验/r/n");
}
return 0;
}

当编译并将生成Norflash,在->所有程序->通讯mini2440,在之后弹出的COM波特率1个停止位,PC串口(笔记本通常没有串口,可以买一个Uart串口打印试验”字符串。

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

网站地图

Top