串口驱动设计(基于S3C6410)

发布者:MoonlightStar最新更新时间:2022-05-26 来源: eefocus关键字:串口驱动  S3C6410  波特率 手机看文章 扫描二维码
随时随地手机看文章

串口通讯

串口充当的角色有两个,一个是数据传输,还有一个就是充当控制台。串口通讯分为同步和异步,我们通常使用的是异步串口。通讯时,双方先约定好数据帧的格式,即波特率,数据位,停止位,奇偶校验位等。我们通常使用的是RS232的9帧串口,其中,最重要的是2,3,5脚。


2:RXD接收数据

3:TXD发送数据

5:GND接地

接下来,我们开始进行串口的初始化。在此使用的开发板是飞凌S3C6410。初始化内容主要分为以下四个方面,引脚设置,帧格式设置,工作模式设置,波特率设置。


引脚设置

这里写图片描述

由核心板原理图上可找到RXD和TXD是通过GPA这个寄存器控制的,所以,在芯片手册中找到GPACON这个寄存器。

这里写图片描述

由芯片手册可得,只要设置GPACON的0到3位和4到7位来分别设置RXD和TXD即可。这里很简单,只要如下设置


    GPACON &= ~0xff;   /*先将低八位清零*/     

    GPACON |= 0x22;  


设置数据格式

引入一个寄存器ULCON0,线控制寄存器,主要是设置数据格式。

这里写图片描述

ULCON0寄存器低两位主要设置数据位个数,第二位设置停止位个数,校验位暂时不需要使用,其他位使用默认的值。


ULCON0 = 0b11;


设置工作模式

引用UCON0寄存器,只要设置这个寄存器中的0:3位,其中0:1位设置收模式,2:3位设置发模式,在这里都设置为polling mode,即轮询模式,也就是查询等待模式。


这里写图片描述

UCON0 = 0b0101; 


设置波特率

这里引入两个寄存器UBRDIV0和UDIVDLOT0,可以从芯片手册中得到两个寄存器的值,串口的时钟是由PCLK来提供的,在时钟体系那节中明确写出PCLK被设置成66MHZ,波特率一般设置为115200,故UBRDIV0=PCLK/(BAUD*16)-1取整,而UDIVDLOT0则是对小数部分乘上16,取整后查表得出UDIVDLOT0的值,由于PCLK等于66MHZ,BAUD为115200,(66000000/(115200*16))-1=34.8,故UBRDIV0=34,0.8*16=12.8,12查表得UDIVDLOT0为0xDDDD。

这里写图片描述
这里写图片描述

至此,串口初始化程序已经完成,但是如何测试串口正常工作呢,这里需要加两个函数,接收字符和发送字符。


发送数据

引入UTRSTAT寄存器

这里写图片描述

主要检查这个寄存器第1位是否为0,如果为0,表明前一次数据还没有发送完,如果等于1,则可以进行发送数据,在程序中用while循环,将字符送给UTXH0寄存器即可。


void putc(unsigned char ch)

{

    while (!(UTRSTAT0 & (1<<2)));

    UTXH0 = ch;  

}

1

2

3

4

5

接收数据

这里还是使用UTRSTAT寄存器,使用第0位,第0位若为0,表明还没有接收到数据,为1表明接收到数据,当接收到数据的时候送到URXH0寄存器中进行返回。


unsigned char getc(void)

{

    unsigned char ret;


    while (!(UTRSTAT0 & (1<<0)));

    // 取数据

    ret = URXH0;  


    if ( (ret == 0x0d) || (ret == 0x0a) ) /*增加回显的功能,0x0d表示回车,0x0a表示换行*/

    {

        putc(0x0d);

        putc(0x0a); 

    }       

    else

        putc(ret);


        return ret;

}


附上整体程序


#define GPACON      (*((volatile unsigned short *)0x7F008000))

#define ULCON0      (*((volatile unsigned long *)0x7F005000))

#define UCON0       (*((volatile unsigned long *)0x7F005004))

#define UTRSTAT0    (*((volatile unsigned long *)0x7F005010))

#define UBRDIV0     (*((volatile unsigned short *)0x7F005028))

#define UTXH0       (*((volatile unsigned char *)0x7F005020))

#define URXH0       (*((volatile unsigned char *)0x7F005024))

#define UDIVSLOT0   (*((volatile unsigned short *)0x7F00502C))


#define PCLK 66500000

#define BAUD 115200


void uart_init()

{

    //1.配置引脚功能

    GPACON &= ~0xff;

    GPACON |= 0x22;


    //2.1 设置数据格式

    ULCON0 = 0b11;


    //2.2 设置工作模式

    UCON0 = 0b0101; 


    //3. 设置波特率  

    UBRDIV0 =(int)(PCLK/(BAUD*16)-1);  //UBRDIV0保存该公式计算后的整数部分

    UDIVSLOT0 = 0x0;   //UDISLOT0=保存该公式计算后的小数部分*16

}



void putc(unsigned char ch)

{

    while (!(UTRSTAT0 & (1<<2)));

    UTXH0 = ch;  

}



unsigned char getc(void)

{

    unsigned char ret;


    while (!(UTRSTAT0 & (1<<0)));

    // 取数据

    ret = URXH0;  


    if ( (ret == 0x0d) || (ret == 0x0a) )

    {

        putc(0x0d);

        putc(0x0a); 

    }       

    else

        putc(ret);


        return ret;

}

关键字:串口驱动  S3C6410  波特率 引用地址:串口驱动设计(基于S3C6410)

上一篇:s3c6140 UART驱动设计
下一篇:老查的ARM学习笔记:chapter-1(按键驱动程序设计)

推荐阅读最新更新时间:2024-11-10 11:40

一种无线节水滴灌自动控制系统的设计方案
  0 引言   随着人口的增长和农业的发展,随着全球变暖造成的干旱问题日益严重,世界水资源的需求量越来越大,水资源紧缺已成为全世界人民共同关注的问题。滴灌技术是通过干管、支管和毛管上的滴头,在低压下向土壤经常缓慢滴水,可直接向土壤供应已过滤的水分、肥料或其他化学剂等的一种实用技术。大田自动滴灌技术具有大幅度提高水的利用率、减少土壤结构破坏、改善生态环境、提高经济效益的作用,是一种高效节水的新型灌溉技术,目前已经成为实施高效、精准灌溉的重要水资源管理技术措施。近年来,随着无线信息传输技术的发展,ZigBee 无线网络以其低成本、低功耗、低速率、近距离、短延时、高安全等特点,在现代农业发展中得到高度关注 .本设计将传感器技术、ST
[单片机]
一种无线节水滴灌自动控制系统的设计方案
深入理解ARM体系架构(S3C6410)---S3C6410看门狗源码实例
当系统运行受到外部干扰或者系统错误,程序有时会出现跑飞,导致整个系统瘫痪。他会设置一段时间,当超出这段时间,从程序中跳出进入中断处理程序。WatchDog本质上是一种定时器,那么普通定时器拥有的特性它也应该具备,是的当它计时超时时也会引起事件的发生,只是这个事件除了可以是系统中断外,他也可以是一个系统重启信号(Reset Signal)。可以这么说,能发送系统重启信号的定时器我们就叫它WatchDog。看门狗定时器中断是我们不希望看到的,因此我们要想方设法避免它发生。主要的方法就是在中断发生前,重新对看门狗定时器的寄存器进行赋值,使它的定时器重新开始记时,这种方法俗称喂狗。 S3C6410看门狗定时器的功能: 作为常规时钟
[单片机]
深入理解ARM体系架构(<font color='red'>S3C6410</font>)---<font color='red'>S3C6410</font>看门狗源码实例
第五章 搭建S3C6410开发板的测试环境
在PC上可以开发Linux驱动,重新编译成ARM架构的Linux驱动模块,但最后还是要在开发板上进行测试。目前最流行的是基于三星S3C6410 ARM11架构的开发板,很多厂商在其基础上进行了扩展,开发了扩展板。 下面对S3C6410开发板进行简单的介绍:三星S3C6410是一款低功耗、高性价比的RISC精简指令集系统的处理器,基于ARM11内核,可用于移动电话和通用处理等领域。它为通信服务提供了优化的硬件性能,内置强大的硬件加速器,有运动视频处理、音频处理、2D加速、显示处理和缩放等,还集成了一个MFC多格式视频码,支持MPEG4 /H.263/H.264编解码和VC1解码,能提供实时的视频会议以及NRSC和PAL制式的TV
[单片机]
一个关于STM32内部USART的波特率配置话题
某日,一工程师咨询在使用STM32F407 MCU开发产品时用到UART5和USART6做串行异步通信,将二者波特率配置为1200bps时,发现UART5正常,而USART6工作不正常。 咋听起来的确有点奇怪。怀疑其相关配置有问题,查看代码并无异常,而且当波特率调高时,二者都表现正常。这基本断定代码配置没有逻辑或流程上的错误。 结合技术手册来看,UART5与USART6的差别主要体现在挂在不同的外设总线上,UART5挂在APB1上,USART6挂在APB2总线上。对于32f407而言,APB1最高时钟42M, APB2最高时钟可达84M。 经进一步了解,客户系统的APB1总线时钟工作在42M
[单片机]
一个关于STM32内部USART的<font color='red'>波特率</font>配置话题
8051单片机波特率计算公式(配套C语言例程)
8051单片机使用定时器1工作在方式2的情况下作为串口波特率发生器,其波特率=(2smod /32)×(定时器T1溢出率),其中smod是PCON 7 ,表示是否波特率加倍,Fsoc是系统的晶振大小。 波特率公式中:T1溢出率=溢出周期的倒数;溢出周期=(256-TH1)×12/Fosc; 最终公式: 波特率:Baud=(2smod × Fsoc)/(32 ×12×(256-TH1)) 我们一般不太关注波特率的计算,而是关心选用的传输速度(波特率)去反算定时器1(自动重装模式)的初值(TH1),所以将上面的公式导一下,得到TH1的公式: TH1=256-(Fsoc×2smod)/(12×32×Baud) 下面针对串口发送程序,水寒
[单片机]
s3c6410硬件RTC实时时钟
1、OVERVIEW综述 The Real Time Clock (RTC) unit can be operated by the backup battery when the system power is off. The data include the time by second, minute, hour, date, day, month, and year. The RTC unit works with an external 32.768 KHz crystal and can perform the alarm function. 当系统电源关闭时,通过备用电源可以运行实时时钟(RTC)单元。数据包含的
[单片机]
<font color='red'>s3c6410</font>硬件RTC实时时钟
基于S3C6410的CAN总线接口扩展方案
  本文介绍了一种基于S3C6410的CAN总线接口扩展方案,通过SPI接口对CAN接口进行扩展,并给出具体的硬件电路。重点研究了WINCE系统下独立CAN控制器MCP2515的驱动程序。结合CAN总线技术规范和MCP2515的特点设计了相关的软件代码,编写了CAN流接口驱动程序,实验结果表明,在WINCE系统下能够较好实现CAN总线的通信。   CAN是博世公司开发的一种串行通讯总线,主要是为解决现代汽车中不断增加的电子器件相互间的信息交换问题。CAN总线的数据通信在工业应用中相比其他总线在可靠性、实时性和灵活性等方面具有较大优势,凭借其优良的性能及独特的设计,在嵌入式开发中有着广泛的应用。随着现代汽车电子网络化的不断发展,车载
[单片机]
基于<font color='red'>S3C6410</font>的CAN总线接口扩展方案
计算机多设备接口波特率不匹配的研究
引言   不同设备接口在传输数据时所要求的频率往往不同,而在一些仅使用一个晶振的系统上,如果一个接口的频率完全匹配,那么其他接口所使用的频率往往就不完全符合要求。例如,为了实现USB总线的48 MHz的传输频率,一般可以用12 MHz的晶振来倍频得到,而12 MHz的晶振在进行串口通信时由于与标准波特率不成倍数关系,因而期望波特率和实际波特率往往不同。        在波特率较低时,这种误差影响不大。例如,期望波特率为57 600 bps时,实际波特率为57 692 bps,传输正常;而当期望波特率高达115 200 bps时,则实际波特率为125 000 bps,误差较大。实验结果表明,此时如不对其进行修正,则无法进行正确传
[电源管理]
计算机多设备接口<font color='red'>波特率</font>不匹配的研究
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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