S3C6410裸机UART驱动(将printf重定义到串口)

2017-02-26 13:23:19来源: eefocus 关键字:S3C6410裸机  UART驱动  printf

要确保S3C6410已经初始化,一般是使用UBOOT初始化

 

//串口寄存器

//UART0

#defineULCON0                *((vu32*)0x7F005000)                //UART通道0 行控制寄存器

#defineUCON0                *((vu32*)0x7F005004)                //UART通道0 控制寄存器

#defineUFCON0                *((vu32*)0x7F005008)                //UART通道0 FIFO 控制寄存器

#defineUMCON0                *((vu32*)0x7F00500C)                //UART通道0 调制解调器(Modem)控制寄存器

#defineUTRSTAT0        *((vu32*)0x7F005010)                //UART通道0 发送/接收状态寄存器

#defineUERSTAT0        *((vu32*)0x7F005014)                //UART通道0 接收错误状态寄存器

#defineUFSTAT0                *((vu32*)0x7F005018)                //UART通道0 FIFO 状态寄存器

#defineUMSTAT0                *((vu32*)0x7F00501C)                //UART通道0 调制解调器(Modem)状态寄存器

#defineUTXH0                *((vu32*)0x7F005020)                //UART通道0 发送缓冲寄存器

#defineURXH0                *((vu32*)0x7F005024)                //UART通道0 接收缓冲寄存器

#defineUBRDIV0                *((vu32*)0x7F005028)                //通道0波特率分频寄存器

#defineUDIVSLOT0        *((vu32*)0x7F00502C)                //UART通道0 分频插槽寄存器

#defineUINTP0                *((vu32*)0x7F005030)                //通道0中断处理寄存器

#defineUINTSP0                *((vu32*)0x7F005034)                //UART通道0 中断源处理寄存器

#defineUINTM0                *((vu32*)0x7F005038)                //UART通道0 中断屏蔽寄存器

 

 

 

 

 

//作者:陈

//创建时间:20120220

//最后修改时间:20120220

//说明:S3C6410串口相关

 

#include"system.h"

#include"uart.h"

#include"s3c6410_map.h"

 

 

 

 

//////////////////////////////////////////////////////////////////

//加入以下代码,支持printf函数,

#if 1

 

#include"stdio.h"        

//标准库需要的支持函数                

struct __FILE

{

inthandle;

};

/* FILE is typedef’d in stdio.h. */

FILE __stdout;      

//定义_sys_exit()以避免使用半主机模式   

_sys_exit(int x)

{

x= x;

}

//重定义fputc函数

int fputc(int ch,FILE *f)

{     

Uart0_SendByte((u8)ch);     

returnch;

}

#endif

 

 

 

static const u16UART_SPEED[13][2] ={{1717,0x4924},{858,0x4924},{428,0x4924},{285,0x4924},{213,0x4924},{142,0x4924},{106,0x4924},{72,0x4924},{70,0x4924},{34,0x4924},{16,0x4924},{7,0x4924},{3,0x4924}};

 

 

 

 

/*************************************************************************************************************************

*函数        :        voidUart0_Init(void)

*功能        :        串口0初始化

*参数        :        无

*返回        :        无

*依赖        :        底层宏定义

*作者        :        陈

*时间        :        20120220

* 最后修改时间 : 20120220

*说明        :        初始化串口0

*************************************************************************************************************************/

void Uart0_Init(u8UART_Speed)

{

PCLK_GATE|= 1 << 1;//UART0选通PCLK时钟,66mhz

GPIOA->CON&=~(0xff);        //清除之前的设置,GPIOA0,GPIOA1

GPIOA->CON|= (HOST | (HOST <<4));        //设置GPIOA0,GPIOA1为uart模式

ULCON0=0x3;        //每帧8位        //清除设置//普通模式,无校验,1个停止位

UCON0= (0x1 << 2) | 0x1 | (2 <<10);                //清除控制寄存器//设置(PCLK=66MHz)为波特率时钟

UFCON0=0;                //禁止FIFO

UMCON0=0;                //禁止AFC,nRTS高电平无效

UBRDIV0        =UART_SPEED[UART_Speed][0];//设置波特率整数部分

UDIVSLOT0= UART_SPEED[UART_Speed][1];//设置波特率小数部分

UINTP0= 0;        //关闭UART0中断

UINTSP0= 0;//设置中断源

UINTM0= 0;        //关闭中断屏蔽\

 

}

 

/*************************************************************************************************************************

*函数        :        voidUart0_SendByte(u8 data)

*功能        :        串口0发送一个字节

*参数        :        发送的数据

*返回        :        无

*依赖        :        底层宏定义

*作者        :        陈

*时间        :        20120220

* 最后修改时间 : 20120220

*说明        :        使用串口0发送一个字节

*************************************************************************************************************************/

voidUart0_SendByte(u8 data)

{

while(!(UTRSTAT0& (1 <<2)));        //等待发送缓冲器为空

UTXH0= data;        //将数据写入发送缓冲器

}



现在可以直接使用printf将数据发送到串口了.


关键字:S3C6410裸机  UART驱动  printf

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/mcu/article_2017022633954.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:暂时解决S3C6410无法进行裸机浮点运算
下一篇:最后一页

论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
S3C6410裸机
UART驱动
printf

小广播

独家专题更多

东芝在线展会——芯科技智社会创未来
东芝在线展会——芯科技智社会创未来
2017东芝PCIM在线展会
2017东芝PCIM在线展会
TI车载信息娱乐系统的音视频解决方案
TI车载信息娱乐系统的音视频解决方案
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2017 EEWORLD.com.cn, Inc. All rights reserved