1、  波特率(Baud rate)即调制速率,1波特即指每秒传输1个符号。

2、  非FIFO模式,即数据传输不利用FIFO缓存,一个字节一个字节地传输。

3、  接收到的数据是放到接收缓存器URXHn中。要发送数据时,是把数据放入发送缓存器UTXHn中。因为UART是通过字节方式数据传输的。因此要区分是大端模式还是小端模式,也就是说这两个寄存器在这两种模式下,所在的地址是不同。为了了解当前数据传输的各种状态,还须要一些状态寄存器。传输状态寄存器UTRSTATn很实用,它的第0位能够用来推断接受缓存器内是否有可接收的数据。第1位和第2位能够用来推断发送缓存器中是否为空,为空时能够发送数据。因为在这里我们不进行数据传输时错误的推断。因此错误状态寄存器UERSTATn不须要。FIFO状态寄存器UFSTATn和MODEM状态寄存器UMSTATn在这里也不须要。

本来是想使用中断方式接收和发送的,可是仅仅实现发送接收一个字符。

之后试下查询方式,结果能行。

Uart方框图

1、使用非FIFO模式时,接收、发送缓存寄存器仅仅存一个字节

2、时钟源使用PCLK(50000000)。波特率为115200;

      UBRDIVn= (int)( UART时钟 / ( 波特率 ×16) ) – 1   

配置GPH

 

rGPHCON|=((2<<4)|(2<<6));    //设置GPH2、GPH3为TXD0、RXD0功能

rGPHUP=0x00;               //上拉电阻使能

设置Uart寄存器

rUFCON0 = 0x0;              //禁止FIFO

rUMCON0 = 0x0;             //禁止AFC

 

UCONn控制寄存器:

rUCON0=0x05;                //发送模式和接收模式都使用查询模式

 

ULCONn控制寄存器:

rULCON0|=0x03;              //设置UART0数据发送8个数据位

赵老师的一段话(关于中断的。作为笔记):

最后还要强调几点关于非FIFO模式下UART中断的一些注意事项:
1.对于s3c2440来说。接收数据是被动的,发送数据是主动的。因此一般来说。接收数据用中断方式,发送数据用查询方式较好;
2. 在中断方式下,当接收到数据时,虽然可能该数据无用,但也一定要读取它,否则下次再接收数据时,不会再引起中断,因为接收数据缓存器被上次接收到的数据所霸占。仅仅要没有读取它,它就永远在那里;
3. 因为UART中断涉及到SUBSRCPND寄存器,因此在中断处理程序中不仅要清SRCPND寄存器,还要清SUBSRCPND寄存器,它们的顺序一定是先清SUBSRCPND寄存器,再清SRCPND寄存器,否则就会引起一个中断两次响应的问题。因为是否中断由SRCPND寄存器决定,而SRCPND寄存器的相关状态位由SUBSRCPND寄存器决定。假设先清SRCPND寄存器,而还没有清SUBSRCPND寄存器的话,SRCPND寄存器的相关位还是会被置1,而一旦被置1,则一定还会引起中断。

总结:

使用查询方法确实能够通过PC端的串口工具发送文件或者字符串,再通过uart0接收文件或字符串发送给PC端的串口工具和存储于文件uart.txt中,可是过程中会出现字符丢失(发送回PC端串口工具和文件里都是一样的情况)的情况。如今感觉可能是串口工具同步的问题或者机器之间的延迟问题,时间的延迟并不会影响串口之间数据传输

代码区:

Main.c

#define GLOBAL_CLK      1

#include "def.h"
#include "option.h"
#include "2440addr.h"
#include "2440lib.h" //函数声明
#include "2440slib.h"
#include "mmu.h"
#include "profile.h" extern void Uart(void);
void Main(void)
{ U32 mpll_val = 0,consoleNum;
Port_Init(); mpll_val = (92<<12)|(1<<4)|(1); //init FCLK=400M,
ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);
ChangeClockDivider(14, 12); //the result of rCLKDIVN [0:1:0:1] 3-0 bit
cal_cpu_bus_clk(); //HCLK=100M PCLK=50M MMU_Init(); //地址映射初始化 Beep(2000, 100); Uart(); //实现串口传送文件 字符串到开发板。并显示在串口终端(调试成功! )
}

Uart.c

#include "2440addr.h"
#include "def.h"
#include "2440lib.h"
#include <stdio.h> //文件库函数 void Uart_init(){
//下面使用uart0 rGPHCON&=~((3<<4)|(3<<6)); //GPH2--TXD0;GPH3--RXD0
rGPHCON|=((2<<4)|(2<<6)); //设置GPH2、GPH3为TXD0、RXD0功能
//手冊中GPH2、GPH3描写叙述例如以下:
//GPHCON Bit Description
//GPH3 [7:6] 00 = Input 01 = Output
// 10 = RXD0 11 = reserved
//GPH2 [5:4] 00 = Input 01 = Output
// 10 = TXD0 11 = Reserved rGPHUP=0x00; //上拉电阻使能
rUFCON0 = 0x0; //禁止FIFO
rUMCON0 = 0x0; //撤销nRTS
rULCON0|=0x03; //设置UART0数据发送8个数据位
rUCON0=0x05; //发送模式和接收模式都使用查询模式 //设置波特率,当中波特率作为一个參数传递到该初始化函数
rUBRDIV0=(int)((50000000/(115200*16))-1);
Delay( 10 ) ; } void Uart(){
int i=0;
char ch;
FILE *FP; //文件指针
FP=fopen("uart.txt","w"); //以写方式打开uart.txt文件
Uart_init(); //uart初始化函数 while(1){
if(rUTRSTAT0&1) { //假设接收数据缓存器接收到有效数据 ch = rURXH0; //ch存储接收字节数据
rUTXH0=ch; //PC机将接收的字符通过串口调试工具显示在屏幕上 fputc(ch,FP); //将ch字符内容存进文件里
i++; if(i>200) fclose(FP); //假设有200个字节关闭文件
}
} }

结果截图:

1、PC端串口工具

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbXV5YW5nX3Jlbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />

2、Uart.txt是存储于项目2440test_Data\DebugRel_bin文件夹下。与bin文件同一文件夹

mini2440裸机试炼之——Uart与pc端实现文件、字符传输的更多相关文章

  1. 【Egret】实现web页面操作PC端本地文件操作

    Egret 实现web页面操作PC端本地文件操作: http://edn.egret.com/cn/book/page/pid/181 //------------------------------ ...

  2. mini2440裸机试炼之——DMA直接存取 实现Uart(串口)通信

    这个仅仅能作为自己初步了解MDA的开门篇 实现功能: 将字符串数据通过DMA0通道传递给UTXH0,然后在终端 显示.传输数据完后.DMA0产生中断,beep声, LED亮. DMA基本知识 计算机系 ...

  3. 八、mini2440裸机程序之UART(2)UART0与PC串口通信【转】

    转自:http://blog.csdn.net/shengnan_wu/article/details/8309417 版权声明:本文为博主原创文章,未经博主允许不得转载. 1.相关原理图 2.相关寄 ...

  4. mini2440裸机试炼之—RTC闹钟中断,节拍中断

    版权声明:博客地址:http://blog.csdn.net/muyang_ren.源代码能够在我的github上找看看 https://blog.csdn.net/muyang_ren/articl ...

  5. 八、mini2440裸机程序之UART(1)简单介绍【转】

    转自:http://blog.csdn.net/shengnan_wu/article/details/8298869 一.概述          S3C2440通用异步接收和发送(UART)提供了三 ...

  6. mini2440裸机试炼之——看门狗中断和复位操作

    看门狗的工作原理: 设本系统程序完整执行一周期的时间是Tp,看门狗的定时周期为Ti,Ti>Tp,在程序正常执行时,定时器就不会溢出,若因为干扰等原因使系统不能在Tp时刻改动定时器的记数值,定时器 ...

  7. C语言PIC32 serial bootloader和C#语言bootloader PC端串口通信程序

    了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 今天介绍下我新完成的为 ...

  8. C语言RH850 F1KM serial bootloader和C#语言bootloader PC端串口通信程序

    了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 今天我要介绍的RH85 ...

  9. 在thinkPHP3.2.3框架下实现手机和PC端浏览器的切换

    查看thinkphp版本号方法 打开文件“根目录\ThinkPHP\ThinkPHP.php”下的文件ThinkPHP.php,在22--23行可以看到版本信息THINK_VERSION,如下图: 说 ...

随机推荐

  1. tableView镶嵌加入CollectionView实现方法

    创建一个继承UICollectionView的类QHCollectionView在QHCollectionView.h中添加接口方法 @interface QHCollectionView : UIC ...

  2. isAssignableFrom

    instanceof 针对实例  isAssignableFrom针对class对象 isAssignableFrom   是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的超类 ...

  3. codeforce div2 426 D. The Bakery

    D. The Bakery time limit per test 2.5 seconds memory limit per test 256 megabytes input standard inp ...

  4. set基本用法---1

    #include<cstdio> #include<iostream> #include<cstdlib> #include<cmath> #inclu ...

  5. EnableViewState 属性

    原文发布时间为:2009-10-25 -- 来源于本人的百度文章 [由搬家工具导入] 指示是否在页请求之间保持视图状态。如果要保持视图状态,则为 true;否则为 false。默认值为 true。 自 ...

  6. 用正则表达式把页面中的px全部替换成rem

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  7. FTK应用程序编程接口(API)手册-1【转】

    转自:http://blog.csdn.net/absurd/article/details/6702047 框架函数 框架函数支撑FTK的主体,它负责初始化应用程序,启动主循环和退出主循环.它对任何 ...

  8. C#根据反射和特性实现ORM映射实例分析

    本文实例讲述了C#根据反射和特性实现ORM 映射的方法.分享给大家供大家参考.具体如下: (一)关于反射 什么是反射? 反射就是在运行时,动态获取对象信息的方法.比如:运行时获得对象有哪些属性,方法, ...

  9. myeclipse服务器"未能创建视图:抛出意外异常。"

    找到对应目录 Workspaces\.metadata\.plugins\org.eclipse.core.runtime\.settings 下的 com.genuitec.eclipse.ast. ...

  10. 基于WPF系统框架设计(6)-整合MVVM框架(Prism)

    应用场景 我们基础的框架已经搭建起来了,现在整合MVVM框架Prism,在ViewModel做一些逻辑处理,真正把界面设计分离出来. 这样方便我们系统开发分工合作,同时提高系统可维护性和灵活性. 具体 ...