S3C2440串口通讯的相关配置

发布者:自在自由最新更新时间:2024-06-06 来源: elecfans关键字:S3C2440  串口通讯  相关配置 手机看文章 扫描二维码
随时随地手机看文章

UART配置的相关寄存器如下(按s3c2440手册中的顺序列出):

1.  ULCONn寄存器:线性控制寄存器

功能:设置奇偶校验,停止位, 数据位(5-8位)

注意:一般设置为无校验,一个停止位,数据位为8位,也就是常说的“8N1”,此时寄存器值为0x3。(bit[6]=0为正常模式,否则为红外模式);

2.  UCONn寄存器:通道n控制器

功能:选择UART时钟源、设置UART中断方式

注意:可选择PCLK、UEXTCLK或FCLK/n。bit[5]=1为回送模式,用于测试;bit[3:2]和bit[1:0]分别控制传输和接收模式,初学者常设置为中断请求或查询模式,bit[3:2]=bit[1:0]=01。

3.  UFCONn寄存器:FIFO控制寄存器

功能:用于设置是否使用FIFO,设置各FIFO的触发阙值,即发送FIFO中有多少个数据时产生中断、接收FIFO中有多少个数据时产生中断。并可以通过设置UFCONn寄存器来复位各个FIFO。读取UFSTATn寄存器可以知道各个FIFO是否已经满,其中有多少个数据。

注意:bit[0]=1时,FIFO使能,否则禁止。初学者可不使用FIFO

4.  UMCONn寄存器:UART MODEM控制寄存器

注意:bit[4]=0,AFC无效

5.UBRDIVn寄存器:波特率除数寄存器

功能:设置波特率除数

注意:UBRDIVn=(int)(UART时钟/(波特率*16))-1;

UART时钟:PCLK,FCLK/n或者UEXTCLK,例如,如果波特率为115200bps并且UART时钟为40MHz,则UBRDIVn为:

UBRDIVn=(int)(40000000/(115200*16))-1=(int)(21.7)-1(取最接近的整数)=22-1=21。

5.  UTRSTATn寄存器:接收/发送状态寄存器

功能:显示接收/发送缓存寄存器状态

注意:在非FIFO模式时,bit[0]=1表明接收到数据;bit[1]=1表明发送缓存寄存器为空。在FIFO模式时,UFSTAT寄存器的相关位,具体见手册。

6.  UERSTATn寄存器:错误状态寄存器

功能:表示各种错误是否发生

注意:初学者可以不关注其状态,待深入学习时,再查相关资料

7.  UFSTATn寄存器:FIFO状态寄存器

功能:表明FIFO的相关状态

注意:bit[14]=1,表明发送FIFO已满,暂时不能再发送数据。Bit[6]=0,表明接收FIFO中有数据(个人理解,不过不太严谨)。

8.  UMSTATn寄存器:UART MODEM 状态寄存器

注意:初学者可以不管

9.  UTXHn寄存器:发送缓存寄存器

功能:UART即会将它保存到缓冲区中,并自动发送出去

注意:bit[7:0]=发送数据。

10.            URXHn寄存器:接收缓存寄存器

功能:当UART接收到数据时,CPU读取这个寄存器,即可获得数据。

注意:bit[7:0]=接收数据;

注:URXHn与UTXHn有大、小端之分,定义寄存器时要注意,不过一般都是用小端法。


以串口0为例:FCLK=400M,FCLK:HCLK:PCLK=1:4:8;波特率为115200

注:特别重要的一点,与串口通讯有关的GPHCON要进行配置;这是初学者容易忽略的,我就忽略过,导致不能实现串口通讯,最后才找到原因。

void Port_Init(void)

{

 

  GPHCON = 0x00faaa;

  GPHUP = 0x7ff;

}

void Uart_Init(void)

{

//模式一

/******PCLK is used as uart's clock****************/

/***no FIFO---*************************************/

#if 1

    ULCON0 = 0x3;  //8N1

    UCON0  = 0x245; //PCLK作为串口时钟

    UFCON0 = 0x0;  //no FIFO

    UMCON0 = 0x0;  // AFC disable

    UBRDIV0=26;

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

#endif

 

//模式二

/**********************loop_uart-pclk—noFIFO*************/

#if 0

    ULCON0 = 0x3;  //8N1

    UCON0 = 0x265; //bit[5] control loop mode: 1 is valid

    UFCON0 = 0x0;  //no FIFO

    UMCON0 = 0x0;  // AFC disable

    UBRDIV0=26;

 

/**********************loop_uart********************/

#endif

 

//模式三

/**********************uart--FIFO--PCLK*******************/

 

#if 0

    ULCON0 = 0x3;  //8N1

    UCON0 = 0x245; // PCLK作为串口时钟

    UFCON0 = 0x31; //bit0]=1表示使能FIFO 

   

    UMCON0 = 0x0;  // AFC disable

 

    UBRDIV0=26;

 

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

#endif

}

注:有定义如下

#define WrUTXH0(ch) (*(volatile unsigned char *)0x50000020)=(unsigned char)(ch)

#define RdURXH0()  (*(volatile unsigned char *)0x50000024)

使用模式一和模式二时,输入和输出函数可如下形式

char Uart_Get_Char(void)

{

 

  while(!(UTRSTAT0 & 0x1)); //Receive data ready

 

    return (char)(RdURXH0());

 

 

 

}

 

char Uart_Put_Char(char ch)

{

 

    while(!(UTRSTAT0 & 0x2));  //Wait until THR is empty.

        WrUTXH0(ch); 

 

  return ch;

}

使用模式三时,输入和输出函数可用形式如下:

char Uart_FIFO_Put_Char(char ch)

{

 

while((UFSTAT0 & 0x4000)); 

    WrUTXH0(ch); 

 

  return ch;

}

 

char Uart_FIFO_Get_Char(void)

{

 

while(!(UFSTAT0 & 0x1f)); 

  eturn (char)(RdURXH0());

}


关键字:S3C2440  串口通讯  相关配置 引用地址:S3C2440串口通讯的相关配置

上一篇:S3C2440开发板LED驱动——ioremap 映射
下一篇:S3C2440定时器相关配置

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

【mini2440】S3C2440的串口
1. 基本电路 2. 相关寄存器 2.1 引脚 2.2 框图 2.3 串口 3. 相关代码 S3C2440A 中的时钟控制逻辑可以产生必须的时钟信号,包括 CPU 的 FCLK,AHB 总线外设的 HCLK 以及 APB 总线外设的 PCLK。S3C2440A 包含两个锁相环(PLL):一个提供给 FCLK、HCLK 和 PCLK,另一个专用于USB 模块(48MHz)。 工作频率 FCLK 最高 400MHz。提供给 ARM920T 的时钟。 HCLK 最高 136MHz。提供给用于 ARM920T,存储器控制器,中断控制器,LCD 控制器,DMA 和 USB 主机模块的 AHB 总线的时钟。 PCLK 最
[单片机]
【mini2440】<font color='red'>S3C2440</font>的串口
S3C2440裸机------异常与中断__定时器中断程序示例
1.定时器的工作原理 注意当TCNTn=TCMPn时不会产生中断。 2.代码 2.1 timer.c 首先是根据上面的两个寄存器设置时钟; /* 设置TIMER0的时钟 */ /* Timer clk = PCLK / {prescaler value+1} / {divider value} = 50000000/(99+1)/16 = 31250 */ TCFG0 = 99; /* Prescaler 0 = 99, 用于timer0,1 */ TCFG1 &= ~0xf; TCFG1 |= 3; /* MUX0 : 1/16 */ 然后根据上图的寄存器设置初始值。 /*
[单片机]
<font color='red'>S3C2440</font>裸机------异常与中断__定时器中断程序示例
S3C2440学习二(基础资源的使用)
虽然有种流水账的感觉,但是这是学习的必经之路,等我渗透ARM三次后,我再全面处理问题,给出最简洁最直接的答案吧。 ①ARM有多少个通用寄存器,有什么用?(让我们一个一个记录) 通用寄存器 通用寄存器可用于传送和暂存数据,也可参与算术逻辑运算,并保存运算结果。除此之外,它们还各自具有一些特殊功能。通用寄存器的长度取决于 机器字长 ,汇编语言程序员必须熟悉每个寄存器的一般用途和特殊用途,只有这样,才能在程序中做到正确、合理地使用它们。   16位cpu通用寄存器共有 8 个:AX,BX,CX,DX,BP,SP,SI,DI.   八个寄存器都可以作为普通的 数据寄存器 使用。   但有的有特殊的用途:AX为 累加器 ,CX
[单片机]
S3C2440的SPI解析
S3C2440A的串行外设接口(SPI)可以与串行数据传输连接。S3C2440A包含了2个SPI,每个都有2个分别用于发送和接收的8位移位寄存器。一次SPI传输期间,同时发送(串行移出)和接收(串行移入)数据。由相应控制寄存器设置指定8位串行数据的频率。如果只希望发送,则接收数据可以保持伪位(dummy)。此外如果只希望接收,则需要发送伪位'1'数据 使用SPI主要需要以下寄存器 选择SPI模式,中断模式,查询模式等SCK选择,主从机选择以及GPOL GPOA选择,关于GPOL与GPOA的描述请查看SPI协议手册 选择SPI时钟,SPI挂在PCLK上,具体计算公式如下 针对数据传输完成之后的SPI总线状
[单片机]
<font color='red'>S3C2440</font>的SPI解析
S3C2440 U-Boot移植--Norflash驱动支持- S29AL016
U-Boot版本:2008.10 开发板:Mini2440 之前根据国嵌的实验手册移植了很久都没有成功,关键是国嵌手册上的Norflash型号是SST1601,而我的Mini2440开发板上配置的是Spansion公司的S29AL016J芯片,两者型号不同,修改的地方差异很大。后来通过在网上查资料发现S29AL016J芯片与smdk2410默认使用的芯片(AMD的AM29LV400)除了大小不一样外,其他如命令序列,操作方式都是一样的(也难怪在做完国嵌实验手册的2.4以后就可以进行环境变量的保存)。所以根据AM29LV400来移植的话所做的修改不多。 查询datasheet后,得到如下信息; 该Norflash芯
[单片机]
S3C2440 跳到 SDRAM 中执行程序
从Nandflash启动CPU时,CPU会通过内部的硬件将Nandflash开始的4KB数据复制到为Steppingstone的4Kb的内部RAM中(起始地址为0) 然后跳到0地址开始执行. 我们这个例子是先使用汇编语言设置好存储控制器,使我们外接的SDRAM可用,然后把程序本身从Steppingstone复制到SDRAM处, 最后跳到SDRAM中执行. 程序的什么关看门狗,设置存储控制器,复制代码到SDRAM中都比较简单, 程序跳入到C程序之前要设置栈供C程序使用!!! ldr sp, =0x34000000 @ 设置堆栈 栈设置在顶部,自上而下. 写这篇记录博客的原因最重要的是:
[单片机]
<font color='red'>S3C2440</font> 跳到 SDRAM 中执行程序
基于S3C2440和USB摄像头的网络视频采集系统
  本文根据网络视频采集的需要,将网络传输与视频采集相结合,设计了以S3C2440为核心的USB摄像头视频采集和嵌入式Linux系统下的视频服务器,从而实现了远程网络视频信息采集。   1 系统总体设计   该系统是以ARM9处理器S3C2440为核心,在嵌入式Linux系统平台下,通过USB摄像头采集视频信息,然后对所得到的视频数据通过内部总线送到视频服务器MJPG-streamer上,视频服务器经过对图像压缩处理,经过以太网传输出去,远端客户机通过浏览器或者专用软件访问视频服务器,即可浏览现场信息,从而实现网络视频采集。系统总体如图1所示。      2 系统硬件设计   系统的硬件框图如图2所示。      系统处理
[单片机]
基于<font color='red'>S3C2440</font>和USB摄像头的网络视频采集系统
基于S3C2440的LWIP-1.3.0和DM9000在UCOS-II-2.8.6上的移植
经常在Linux上跑,一时间跳到UCOS,感觉有点不习惯。首先是编译器,GCC是个不错的选择,但GDB调试太麻烦。ADS和仿真器结合是个十分不错的调试环境,于是,将代码就搬到ADS上,这下完全脱离Linux,整个开发过程都在Windows进行。其实是UCOS太简洁了,时钟、接口很多都需要自己开发…小弟对UCOS不是很熟,下面是移植过程的一些小结,希望对有需要的朋友带来些帮助。关于UCOS在S3C2440上的移植,可以参考《uCOS-II在S3C2440上的移植》一文。 1. 寻找最新代码,总结前辈经验,就是下载LWIP的源代码和Michael Anburaj基于S3C2410的移植版。 http://download.savann
[单片机]
基于<font color='red'>S3C2440</font>的LWIP-1.3.0和DM9000在UCOS-II-2.8.6上的移植
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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