arm串口文件
来源:互联网 发布:php添加mysqli扩展 编辑:程序博客网 时间:2024/05/16 08:11
s3C2451_uart.h
#ifndef _S3C2451_UART_H_
#define _S3C2451_UART_H_
#include "typedef.h"
typedef struct UART_MemMap {
U32 ULCON;
U32 UCON;
U32 UFCON;
U32 UMCON;
U32 UTRSTAT;
U32 UERSTAT;
U32 UFSTAT;
U32 UMSTAT;
U32 UTXH;
U32 URXH;
U32 UBRDIV;
U32 UDIVSLOT;
}volatile *UART_MemMapPtr;
#define UART0_BASE_PTR ((UART_MemMapPtr)0x50000000u)
#define UART1_BASE_PTR ((UART_MemMapPtr)0x50004000u)
#define UART2_BASE_PTR ((UART_MemMapPtr)0x50008000u)
#define UART3_BASE_PTR ((UART_MemMapPtr)0x5000C000u)
typedef enum{
UART0=0,
UART1,
UART2,
UART3
}UART_Typedef;
//数据宽度
typedef enum{
WordWidth_5BIT = 0,
WordWidth_6BIT,
WordWidth_7BIT,
WordWidth_8BIT
}WordWidth_Typedef;
//校验
typedef enum{
Parity_No = 0x00,
Parity_ODD = 0x04,
Parity_EVEN = 0x05,
Parity_CHK_1 = 0x06,
Parity_CHK_0 = 0x07
}Parity_Typedef;
//停止位
typedef enum{
STOP_1Bit = 0,
STOP_2Bit
}STOP_Typedef;
//读写模式配置
#define UART_Mode_RX 0x01
#define UART_Mode_TX 0x02
typedef struct{
U32 baudrate; //波特率
WordWidth_Typedef wordwidth;//数据宽度
Parity_Typedef parity;//校验
STOP_Typedef stop;//停止位
U32 mode;//读写模式配置 UART_Mode_RX/UART_Mode_TX
}UART_Init_Typedef;
extern void UART_Init(UART_Typedef uartx,UART_Init_Typedef uart_init_struct);
extern void UART_SendData(UART_Typedef uartx,U8 data);
extern U8 UART_ReceiveData(UART_Typedef uartx);
extern void UART_SendDataBuf(UART_Typedef uartx,U8 *data,U32 len);
extern void UART_SendString(UART_Typedef uartx,U8 *string);
extern void UART_Printf(char *fmt,...);
extern void UART_IRQService_Init(UART_Typedef uartx,U32 addr);
#endif
s3c2451.c
#include "S3C2451_uart.h"
#include "S3C2451_vector.h"
#include <stdarg.h>
#include <stdio.h>
#include <string.h>
UART_MemMapPtr const UART_BASE_PTR[4] = {UART0_BASE_PTR,UART1_BASE_PTR,UART2_BASE_PTR,UART3_BASE_PTR};
void UART_Init(UART_Typedef uartx,UART_Init_Typedef uart_init_struct)
{
UART_BASE_PTR[uartx]->ULCON &= ~(0x3F);
//wordwidth
UART_BASE_PTR[uartx]->ULCON |= uart_init_struct.wordwidth;
//stop
UART_BASE_PTR[uartx]->ULCON |= (uart_init_struct.stop<<2);
//parity
UART_BASE_PTR[uartx]->ULCON |= (uart_init_struct.parity<<3);
//baud
if( 9600 == uart_init_struct.baudrate)
{
UART_BASE_PTR[uartx]->UBRDIV = 10;
UART_BASE_PTR[uartx]->UDIVSLOT = 0xeeeee;
}else if(115200 == uart_init_struct.baudrate)
{
UART_BASE_PTR[uartx]->UBRDIV = 34; //pclk=66.5Mhz
UART_BASE_PTR[uartx]->UDIVSLOT = 0xDFDD;
}
UART_BASE_PTR[uartx]->UCON &= ~(0x0f);
//enable tx
if((uart_init_struct.mode&UART_Mode_TX) == UART_Mode_TX)
{
UART_BASE_PTR[uartx]->UCON |= (1<<2);
}
//enable rx
if((uart_init_struct.mode&UART_Mode_RX) == UART_Mode_RX)
{
UART_BASE_PTR[uartx]->UCON |= 1;
}
}
void UART_SendData(UART_Typedef uartx,U8 data)
{
UART_BASE_PTR[uartx]->UTXH = data;
while(!(UART_BASE_PTR[uartx]->UTRSTAT&0x04));
}
void UART_SendDataBuf(UART_Typedef uartx,U8 *data,U32 len)
{
unsigned char i;
for(i=0;i<len;i++){
UART_SendData(uartx,data[i]);
}
}
void UART_SendString(UART_Typedef uartx,U8 *s)
{
U32 len = strlen((char*)s);
UART_SendDataBuf(uartx,s,len);
}
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);
}
U8 UART_ReceiveData(UART_Typedef uartx)
{
//while(!(UART_BASE_PTR[uartx]->UTRSTAT&0x01));
return (UART_BASE_PTR[uartx]->URXH);
}
void UART_IRQService_Init(UART_Typedef uartx,U32 addr)
{
switch(uartx)
{
case UART0:
pISR_UART0 = addr;
break;
case UART1:
pISR_UART1 = addr;
break;
case UART2:
pISR_UART2 = addr;
break;
case UART3:
pISR_UART3 = addr;
break;
}
}
- arm串口文件
- Arm串口pc机
- ARM串口编程入门
- ARM裸机串口UART
- ARM的PL2303串口
- ARM LINUX 扩展串口
- 【原创】ARM串口控制台
- ARM的串口配置
- ARM之串口操作
- ARM裸机串口
- ARM学习笔记---串口
- 将lrzsz工具移植到ARM开发板 ---只通过串口实现window和ARM板之间文件互传
- 如何通过超级终端 利用串口实现arm板子和pc互相发送文件???
- ARM 开发板嵌入式linux系统与主机PC通过串口传输文件
- ARM开发板嵌入式linux系统与主机PC通过串口传输文件
- ARM中断方式串口编程
- arm-linux串口接收出错
- ARM嵌入式系统串口扩展
- 让编译器对一些警告闭嘴
- Python网络爬虫获取股票信息
- <我们心中的雪>-郭文斌
- ES6新特性
- 调整内核printk的打印级别
- arm串口文件
- 二、视频密码破解【z标志位】
- 让编译器对一些警告闭嘴
- 文科生入坑的往事
- Change the label of grid
- Intellij IDEA 使用技巧 SVN篇
- 一个奇怪的加锁案例--Execute “ if(not exists (select ..))” locked next record
- 畅通工程的系列题
- 远程linux服务器mysql数据库导入和导出.sql文件