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

来源:互联网 发布:淘宝商品页面设计 编辑:程序博客网 时间:2024/04/29 07:49

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寄存器中的收发状态。




0 0
原创粉丝点击