⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 s3c2410.c

📁 SMDK2440 boot code, base on vivi
💻 C
字号:
/*   *  drivers/serial/serial_s3c2410.c:  *    specfic routines for S3C2410 UARTs * *  Author:	Janghoon Lyu *  Created:	October 16, 2003 *  Copyright:	MIZI Research, Inc. All rights reserved. * *  Last modified: $Date: 2004/05/24 06:11:35 $  *                 $Revision: 1.4 $ * *  2003-10-22  Add timeout to prevent system halt.  *              By Janghoon Lyu. */#include <config.h>#include <machine.h>#define ULCON_OFS	(0x00)	/* R/W, UART line control register */#define UCON_OFS	(0x04)	/* R/W, UART control register */#define UFCON_OFS	(0x08)	/* R/W, UART FIFO control register */#define UMCON_OFS	(0x0C)	/* R/W, UART modem control register */#define UTRSTAT_OFS	(0x10)	/* R  , UART Tx/Rx status register */#define UERSTAT_OFS	(0x14)	/* R  , UART Rx error status register */#define UFSTAT_OFS	(0x18)	/* R  , UART FIFO status register */#define UMSTAT_OFS	(0x1C)	/* R  , UART Modem status register */#define UTXHL_OFS	(0x20)	/*   W, UART transmit(little-end) buffer */#define UTXHB_OFS	(0x23)	/*   W, UART transmit(big-end) buffer */#define URXHL_OFS	(0x24)	/* R  , UART receive(little-end) buffer */#define URXHB_OFS	(0x27)	/* R  , UART receive(big-end) buffer */#define UBRDIV_OFS	(0x28)	/* R/W, Baud rate divisor register */#if defined(CONFIG_SERIAL_UART0)#define OFFSET		0x0#define GPIO_OFFSET	2#elif defined(CONFIG_SERIAL_UART1)#define OFFSET		0x4000#define GPIO_OFFSET	4#elif defined(CONFIG_SERIAL_UART2)#define OFFSET		0x8000#define GPIO_OFFSET	6#else#error Not exist UART on this processor.#endifvoiduart_init(void){	unsigned long base_addr = 0x50000000 + OFFSET;	unsigned long baudrate = CONFIG_SERIAL_DEFAULT_BAUDRATE;	unsigned long ubrdiv = ((UART_REF_CLK / (baudrate * 16)) - 1);	unsigned long timeout;	/* set GPIOs */	GPHCON &= ~(0xf << GPIO_OFFSET);	GPHCON |= (0xa << GPIO_OFFSET);	GPHUP |= (0x3 << GPIO_OFFSET);	/* set UART controller */	*(volatile unsigned long *)(base_addr+UFCON_OFS) = 0x0;	*(volatile unsigned long *)(base_addr+UMCON_OFS) = 0x0;	*(volatile unsigned long *)(base_addr+ULCON_OFS) = 0x3;	*(volatile unsigned long *)(base_addr+UCON_OFS) = 0x45;	*(volatile unsigned long *)(base_addr+UBRDIV_OFS) = ubrdiv;	/* flush FIFO of UART */	timeout = 10000;	while (1) {		char c;		unsigned long stat;		stat = *(volatile unsigned long *)(base_addr+UTRSTAT_OFS);		if ((stat & (1 << 2)) && (stat & (1 << 1)))			break;		c = *(volatile unsigned char *)(base_addr+UTXHL_OFS);		/* Anyway, I will go. */		if (--timeout < 0) break;	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -