《arm电子相册项目——串口模块篇uart.c》
工具:keil4 , arm开发板(Mini2451)(s3c2451) , 串口线
功能:显示照片(自动切换 / 手动切换 / 暂停切换 / 可设置)
显示时钟(精确显示 / 可设置)
进度:第5篇——uart.c
描述:串口模块主要负责接收 / 发送给串口的信息并通过串口助手显示出来,方便调试,还可以用到串口中断,通过串口修改项目中时钟的时间。
/*****************************************************
Author:Ivan Version:0.1 Date:
File name:uart.h
Description:uart串口模块相关寄存器地址
*****************************************************/
#ifndef UART_H_
#define UART_H_
#define ULCON0 (*(volatile unsigned long *)0x50000000)
#define UCON0 (*(volatile unsigned long *)0x50000004)
#define UFCON0 (*(volatile unsigned long *)0x50000008)
#define UMCON0 (*(volatile unsigned long *)0x5000000C)
#define UTRSTAT0 (*(volatile unsigned long *)0x50000010)
#define UFSTAT0 (*(volatile unsigned long *)0x50000018)
#define UTXH0 (*(volatile unsigned long *)0x50000020)
#define URXH0 (*(volatile unsigned long *)0x50000024)
#define UBRDIV0 (*(volatile unsigned long *)0x50000028)
#define UDIVSLOT0 (*(volatile unsigned long *)0x5000002C)
#define GPHCON (*(volatile unsigned long *)0x56000070)
//以上按键相关寄存器地址
extern void uart_init(void);
#endif
/*****************************************************
Author:Ivan Version:0.1 Date:
File name:uart.c
Description:uart串口模块初始化
*****************************************************/
#include "uart.c"
void uart_init(void)
{
GPHCON = 0xa; //H端口设置为TXD[0],RXD[0]
ULCON0 = 0x03; //设置接收的数据位字长为8
UCON0 = 0x05; //设置接收模式和发送模式
UFCON0 = 0x01; //开启(使能)串口0的FIFO
UBRDIV0 = 0x23; //设置波特率
UDIVSLOT0 = 0x0111; //设置分流槽
}
void putchar(unsigned char c)
{
while(UFSTAT0 & ( 1<<14 )); //通道0不满时,
UTXH0 = c; //将缓冲区里的数据赋值给c
}
unsigned char getchar(void)
{
while((UFSTAT0 & 0x7f) == 0); //若通道0中没数据,等待
return URXH0; //将数据返回
}
/*****************************************************
Author:Ivan Version:0.1 Date:
File name:main.h
Description:包含所有用到的.h文件
*****************************************************/
#ifndef MAIN_H_
#define MAIN_H_
#include "uart.h"
#include "led.h"
#endif
/*****************************************************
Author:Ivan Version:0.1 Date:
File name:main.c
Description:主函数(串口输入输出)
*****************************************************/
#include "main.h"
void Main()
{
unsigned char c;
GPACON = 0X0;
GPBCON = (0X5 << 10);
GPBSEL = 0X0;
uart_init();
while(1)
{
c = getchar();
putchar(c);
if(c == 0x30)
{
GPADAT = 0xffffffff;
GPBDAT = 0xffffffff;
}
if(c == 0x31)
{
GPADAT = 0xffffffff;
GPBDAT = 0xffffffcf;
}
if(c == 0x32)
{
GPADAT = 0xffffffff;
GPBDAT = 0xffffff3f;
}
if(c == 0x33)
{
GPADAT = 0xffffffff;
GPBDAT = 0xffffff0f;
}
if(c == 0x34)
{
GPADAT = 0xfcffffff;
GPBDAT = 0xffffffff;
}
if(c == 0x35)
{
GPADAT = 0xfcffffff;
GPBDAT = 0xffffffcf;
}
if(c == 0x36)
{
GPADAT = 0xfcffffff;
GPBDAT = 0xffffff3f;
}
if(c == 0x37)
{
GPADAT = 0xfcffffff;
GPBDAT = 0xffffff0f;
}
if(c == 0x38)
{
GPADAT = 0xf3ffffff;
GPBDAT = 0xffffffff;
}
if(c == 0x39)
{
GPADAT = 0xf3ffffff;
GPBDAT = 0xffffffcf;
}
}
}