【OK6410裸机程序】串口初始化

本文介绍了S3C6410处理器中串口的轮询工作模式,详细讲解了使用FIFO时的寄存器配置步骤及查询方法。包括IO配置、数据位/校验/停止位配置、波特率配置等关键环节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

S3C6410串口可以中作在三种模式:中断,轮询,DMA;按是否使用FIFO又分为两类。


UART模块使用的IO参见下图,具体的IO配置参考【OK6410裸机程序】点亮LED


1. 轮询模式,使用FIFO

/************UART.c********************************************/
#define ULCON0     (*((volatile unsigned long *)0x7F005000))
#define UCON0      (*((volatile unsigned long *)0x7F005004))
#define UFCON0     (*((volatile unsigned long *)0x7F005008))
#define UMCON0     (*((volatile unsigned long *)0x7F00500C))
#define UTRSTAT0   (*((volatile unsigned long *)0x7F005010))
#define UFSTAT0    (*((volatile unsigned long *)0x7F005018))
#define UTXH0      (*((volatile unsigned char *)0x7F005020))
#define URXH0      (*((volatile unsigned char *)0x7F005024))
#define UBRDIV0    (*((volatile unsigned short *)0x7F005028))
#define UDIVSLOT0  (*((volatile unsigned short *)0x7F00502C))

#define GPACON     (*((volatile unsigned long *)0x7F008000))


void init_uart(void)
{
	GPACON &= ~0xff;
	GPACON |= 0x22;
	
	/* ULCON0 */
	ULCON0 = 0x3;  /* 数据位:8, 无较验, 停止位: 1, 8n1 */
	UCON0  = 0x5;  /* 使能UART发送、接收 */
	UFCON0 = 0x01; /* FIFO ENABLE */

	UMCON0 = 0;
	
	/* 波特率 */
	/* DIV_VAL = (PCLK / (bps x 16 ) ) - 1 
	 * bps = 115200
	 * DIV_VAL = (50000000 / (115200 x 16 ) ) - 1 
	 *         = 26.12673611
	 */
	UBRDIV0   = 26;

	/* x/16 = 0.12673611
	 * x = 2
	 */
	UDIVSLOT0 = 0x0808;
	
}

char getchar(void)
{
	while ((UFSTAT0 & 0x7f) == 0); /*RX_FIFO EMPTY,等待*/
	return URXH0;
}

void putchar(char c)
{
	while (UFSTAT0 & (1<<14));   /* TX_FIFO_FULL=1,等待*/
	UTXH0 = c;
}

/***********************main.c************************************/
#include "uart.h"
int main()
{
	char c;
	
	init_uart();
	
	while (1)
	{
		c = getchar();
		putchar(c+1);
	}
	
	return 0;
}
配置顺序:1.IO配置;2.数据位/较验/停止位配置(ULCONx);3.波特率配置;4.使能FIFO(UFCONx);5.使能RX/TX并设置轮询模式(UCONx).

使用FIFO时查询UFSTATx寄存器中的收发状态。

不使用FIFO时查询UTRSTATx寄存器中的收发状态。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值