基于ARM--s3c2451的函数封装---UART封装
来源:互联网 发布:网络服务器机柜厂家 编辑:程序博客网 时间:2024/06/05 12:41
s3c2451_uart.h
#ifndef _S3C2451_UART_H_#define _S3C2451_UART_H_#include "typedef.h"#include "string.h"#include "stdio.h"#include "stdarg.h"typedef struct{U32 ULCON; //线路控制寄存器,决定使用哪一个con口U32 UCON; //控制寄存器U32 UFCON; //FIFO控制寄存器U32 UMCON; //MODEM控制寄存器U32 UTRSTAT; //TX/RX状态寄存器U32 UERSTAT; //错误状态寄存器U32 UFSTAT; //FIFO状态寄存器U32 UMSTAT; //MODEM状态寄存器U32 UTXH; //发送缓冲寄存器U32 URXH; //接受缓冲寄存器U32 UBRDIV; //波特率分频寄存器-整数U32 UDIVSLOT; //波特率分频寄存器-小数}volatile *UART_MemMapPtr;#define UART0_BASE_PTR ((UART_MemMapPtr)0x50000000) //每个UART的起始地址#define UART1_BASE_PTR ((UART_MemMapPtr)0x50004000)#define UART2_BASE_PTR ((UART_MemMapPtr)0x50008000)#define UART3_BASE_PTR ((UART_MemMapPtr)0x5000C000)typedef enum{UART0=0,UART1,UART2,UART3}UART_typedef; //定义每一个UARTtypedef enum{wordwidth_5bit=0,wordwidth_6bit,wordwidth_7bit,wordwidth_8bit}WORDWIDTH_typedef; //定义传输的字长typedef enum{stop_one=0,stop_two}STOP_typedef; //停止位的长度typedef enum{parity_no=0,parity_odd=4,parity_even=5,parity_one=6,parity_zero=7}PARITY_typedef; //奇偶校验typedef enum{mode_rx=1, //接受模式mode_tx=4, //发送模式mode_rx_tx=5}MODE_typedef; //typedef struct{ U32 baudrate;WORDWIDTH_typedef wordwidth;STOP_typedef stop;PARITY_typedef parity;MODE_typedef mode;}UART_Init_typedef; //定义UART结构体extern void uart_init(UART_typedef uartx,UART_Init_typedef uart_init_typedef); //UART初始化函数extern void uart_senddata(UART_typedef uartx,U8 data); //发送字节函数extern void uart_sendbuf(UART_typedef uartx,U8 *data,U8 len); //发送BUF函数extern void uart_sendstring(UART_typedef uartx,U8 *string); //发送字符串函数extern void uart_printf(char *fmt,...); //发送数组函数extern U8 uart_receivedata(UART_typedef uartx); //接受字节函数#endifs3c2451.c
#include "s3c2451_uart.h"UART_MemMapPtr const UART_BASE_PTR[4]={UART0_BASE_PTR,UART1_BASE_PTR,UART2_BASE_PTR,UART3_BASE_PTR}; //定义了UART数组,方便使用void uart_init(UART_typedef uartx,UART_Init_typedef uart_init_typedef){UART_BASE_PTR[uartx]->ULCON &=~(0x7f); //把前七位的寄存器清零UART_BASE_PTR[uartx]->ULCON |=uart_init_typedef.wordwidth; //设置传输字长UART_BASE_PTR[uartx]->ULCON |=(uart_init_typedef.stop<<2); //设置停止位UART_BASE_PTR[uartx]->ULCON |=(uart_init_typedef.parity<<3); //设置奇偶校验位if(uart_init_typedef.baudrate==115200) //115200传输速度设置{UART_BASE_PTR[uartx]->UBRDIV=34;UART_BASE_PTR[uartx]->UDIVSLOT=0xDFDD;}if(uart_init_typedef.baudrate==9600) //9600传输速度设置{UART_BASE_PTR[uartx]->UBRDIV=428;UART_BASE_PTR[uartx]->UDIVSLOT=0xDDD5;}UART_BASE_PTR[uartx]->UCON &=~(0xf); //寄存器清零if(uart_init_typedef.mode==mode_rx) //接受模式{UART_BASE_PTR[uartx]->UCON |=uart_init_typedef.mode;}if(uart_init_typedef.mode==mode_tx) //发送模式{UART_BASE_PTR[uartx]->UCON |=uart_init_typedef.mode;}if(uart_init_typedef.mode==mode_rx_tx){UART_BASE_PTR[uartx]->UCON |=uart_init_typedef.mode;}}void uart_senddata(UART_typedef uartx,U8 data) //输出字节函数{UART_BASE_PTR[uartx]->UTXH=data;while((UART_BASE_PTR[uartx]->UTRSTAT)==0);}void uart_sendbuf(UART_typedef uartx,U8 *data,U8 len) //发送BUF函数{unsigned char i;for(i=0;i<len;i++){uart_senddata(uartx,data[i]);}}void uart_printf(char *fmt,...) //发送字符串函数{va_list ap;char string[1024];va_start(ap,fmt);vsprintf(string,fmt,ap);va_end(ap);uart_sendstring(UART0,(U8*)string);}void uart_sendstring(UART_typedef uartx,U8 *string) //发送数组函数{U32 len=strlen((char *)string);uart_sendbuf(uartx,string,len);}U8 uart_receivedata(UART_typedef uartx) //接受字节函数{return UART_BASE_PTR[uartx]->URXH;}
阅读全文
0 0
- 基于ARM--s3c2451的函数封装---UART封装
- 基于ARM--s3c2451的函数封装---GPIO口的封装
- 串口UART的封装函数
- ARM裸机开发之基于S3C2451的电子相册开发
- 基于 zepto 的触摸函数封装
- 项目常见的函数封装,基于Jquery
- 嵌入式系统学习——S3C2451之2.4寸LCD函数封装
- 基于S3C2451的嵌入式电子相册
- 基于MBProgressHUD的封装
- 基于LeanTween的封装
- 基于MessageDigest的封装
- 基于jQuery的封装
- ARM9 S3C2451 UART 理解
- ARM9 S3C2451 LED 知识点 代码 封装 题目实践
- 函数的封装解释
- 封装的VC函数
- cookies的函数封装
- AJAX函数的封装
- Object类型分析!
- LintCode python 小白-硬币-博弈论,动态规划
- Centos6.5下安装jdk1.8
- shu418 丢史蒂芬妮
- 关于json的小例子
- 基于ARM--s3c2451的函数封装---UART封装
- JDK配置环境变量和用法
- Lua I/O库(二)
- jQuery 第一个例子
- 百度2017秋招笔试编程题
- ubuntu安装和卸载软件命令
- 【【【超高仿】】】迅雷播放器教程 -- 总结——对界面开发介绍非常详细
- Scrapy中的数据流过程展示
- 多线程中异常堆栈信息展示