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. 【02】 Vue 之 数据绑定

    2.1. 什么是双向绑定? Vue框架很核心的功能就是双向的数据绑定. 双向是指:HTML标签数据 绑定到 Vue对象,另外反方向数据也是绑定的.通俗点说就是,Vue对象的改变会直接影响到HTML的标 ...

  2. 【01】Vue 之hello wolrd

    1.1. Vue简介 Vue是一个前端的双向绑定类的框架,发音[读音 /vjuː/, 类似于 view].新的Vue版本参考了React的部分设计,当然也有自己独特的地方,比如Vue的单文件组件开发方 ...

  3. UOJ Goodbye Bingshen

    在叶子童鞋的推荐下打了这场比赛... 感觉被虐爆了... 怎么这么多构造题... 我还没写过呢... 交互题是毛线...看了好久没看懂...就放弃了...(我语文好差QAQ...) 最后只会T1... ...

  4. Javascript&Html-延迟调用和间歇调用

    Javascript&Html-延迟调用和间歇调用 Javascript 是一种单线程语言,所有的javascript任务都会放到一个任务列表中,这些javascript任务会按照插入到列表中 ...

  5. javascript屏蔽脏字

    原文发布时间为:2009-04-16 -- 来源于本人的百度文章 [由搬家工具导入] <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tran ...

  6. windows 加入域

    点击computer,右击选system ,点 change setting,填写domain和computer-name 加入域,下次登陆加入,在域中会检查computer name

  7. [LeetCode] Remove Duplicates from Sorted List II 链表

    Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numb ...

  8. AtCoder Regular Contest 090 C D E F

    C - Candies 题意 求左上角走到右下角最大的数字和. 思路 直接\(dp\) Code #include <bits/stdc++.h> #define maxn 110 usi ...

  9. AI创投的冰与火之歌:泡沫、跟风、短板和有钱花不出去的沮丧【转】

    转自:http://36kr.com/p/5071386.html 国内的AI行业仍处于野蛮生长阶段.热钱不少,优质项目却不多.创业者拿钱难,投资者有钱却花不出去. 编者按:本文来自微信公众号“刺猬公 ...

  10. sql查询 ,多行数据合并成一行,并且显示合并后某一列的值拼接结果

    select  [value] = stuff((select ','+modmb003  from modmb detail where modmb=18 for xml path('')), 1, ...