tq2440光盘 百度云无法进行串口通信怎么办

TQ2440(1)
第一天学习总结(串口测试)
1、笔记本没有串口,所以设备管理器中没有(端口)项,
2、接好USB转串口,用驱动之家检测安装驱动。
二、安装SecureCRT(或超级终端),配置参数(serial,com口。等),连接开发板。设置好指定接收文件盒下载文件到PC的文件夹
三、SecureCRT软件在PC上模拟了开发板的shell终端(虚拟开发板),与PC通信。在SecureCRT软件上操作直接影响开发板
四、利用rz,sz命令与PC接收发送文件
五、开发板安装了Linux系统,可以接上键盘对终端键入命令执行
第二天学习总结:(USB烧写配置)(烧写程序(无系统)到NAND FLASH)
一、安装USB烧写工具(如果没有安装.net frameworrk,还要安装同目录下的doNetFx40….软件)。设置参数,配置文件dnw.xml会存放在C盘根目录。以管理员身份运行(因为要可能会修改配置文件,C盘需要管理员身份访问)
二、&&&&&&&&&&连接串口、连接USB下载线、选择NORFLASH。
三、打开电源开关,安装USB下载驱动(打开设备管理器-&找到右击、更新驱动程序-&找到驱动所在文件夹安装)
四、安装编译IDE(ADS)(破解时直接将.dat文件放到liscents文件夹下即可)
五、利用ADS打开工程项目(.mcp文件),compile编译-&make生成.bin文件(即需要下载的文件)
六、如图,选择a命令
七、打开DNW,选择USB下载-&uboot选择文件(.bin文件)。下载成功
八、关掉开关,从NAND FLASH启动
九、通过serial软件操作
十、注:如果serial连接了com2口,则dnw不可以连接了。一个串口只能连接一次。也可以用dnw连接串口下载
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:823次
排名:千里之外2011年8月 硬件/嵌入开发大版内专家分月排行榜第三2011年7月 硬件/嵌入开发大版内专家分月排行榜第三
2011年12月 硬件/嵌入开发大版内专家分月排行榜第三2011年10月 硬件/嵌入开发大版内专家分月排行榜第三2011年6月 硬件/嵌入开发大版内专家分月排行榜第三
2011年12月 硬件/嵌入开发大版内专家分月排行榜第三2011年10月 硬件/嵌入开发大版内专家分月排行榜第三2011年6月 硬件/嵌入开发大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。敬告:Open系列开发板已获得国家专利,包括实用新型专利及外观专利,仿造必追究其法律责任!
SAMSUNG ARM9开发板Open2440是一块以S3C2440AL为主控芯片的开发板,它带有丰富的扩展接口,支持各类外围模块的接入。
地板资源简介
[ 芯片简介 ]
以太网MAC控制器
复位芯片。
[ 其它器件简介 ]
DM9000外部晶振
上、下、左、右、按下,共5个状态。
便于I/O输出测试或显示程序运行状态。
底板电源LED
BOOT选择开关
一体化红外接收头
供电选择开关
[ 模块接口简介 ]
USB type A接口
可接入U盘、USB摄像头等USB设备。
USB mini接口
通过连接线,与计算机进行USB通信。
USB转UART0接口
可与PC机进行串口通信。
可插入网线
方便接入RS232、RS485、USB TO 232模块等。
方便接入摄像头模块。
用于接入LCD模块。
方便接入I2C模块,如I/O扩展芯片PCF8574、EEPROM AT24CXX模块等。
方便接入I2S模块,如音频模块等。
方便接入Micro SD模块,SDIO接口读写SD卡的速度相比SPI接口快的多。
ADC+PWM接口
方便测试AD、PWM。
方便接入RS232、RS485、USB TO 232模块等。
[ 其它接口简介 ]
JTAG/SWD接口
支持下载与调试。
MCU引脚接口
引出未被使用的引脚,方便与外设进行I/O连接。
5V与3.3V电源输入输出接口
常用于对外供电,或与用户板进行共地处理。
1-WIRE接口
方便接入1-WIRE器件(TO-92封装),如温度传感器DS18B20、电子注册码DS2401等。
核心板插座接口
可插入Core2440。
核心板资源简介
[ 芯片简介 ]
内  核:ARM920T 32-bit RISC
特 性:带有MMU控制单元
工作频率:400MHz
工作电压:1.2V-3.3V;
封  装:FBGA289;
资  源:16KB Instruction Cache,16KB Data Cache,MMU
     2 x SPI,3 x UART,1 x I2S,1 x I2C
     1 x SDIO(1.0版SD主接口,兼容2.11版MMC接口)
     1 x 8-bit Camera interface
     2 x USB 1.1 Hos,1 x USB 1.1 Device
     1 x AC97 Audio-CODEC Interface
     60 x Interrupt Controller
     4 x 16-bit PWM(1-ch支持DMA),4 x DMA Controller
     模数转换:8 x AD(10位,500KSPS,直接集成触摸接口)
     调试下载:支持JTAG接口的调试下载
K4S561632N
2 x 32M Byte SDRAM。
K9F2G08U0B
2G Bit NandFlash。
EN29LV160BB(PCB背面)
2M Byte NorFlash。
电源管理芯片。
[ 其它器件简介 ]
32.768K晶振
可供内置RTC使用,或用以校准。
12M晶振(核心板)
可通过倍频设置,提高主频。
[ 接口简介 ]
MCU引脚接口
引出未被使用的引脚,方便与外设进行I/O连接。
主控板及其扩展性图展
Open2440正视图
Open2440正面侧视图
Open2440背面侧视图
Open2440底板正视图
Core2440正面侧视图
Core2440背面侧视图
Open2440接入J-LINK
Open2440接入各类外围模块
QT图形界面主页
QT界面主菜单
QT游戏十五子棋
QT游戏扫雷
QT游戏贪吃蛇
QT游戏射击游戏
接入USB设备
接入UDA1341 Board
接入OV7670 Camera Board
接入W311M无线网卡
接入RS232 Board
接入RS485 Board
接入USB UART Board
接入8 Push Buttons
接入5 IO Keypad
接入AD Keypad
接入Test Board
接入FRAM Board
同时挂多个I2C模块
接入DataFlash Board
接入NRF24L01 RF Board
接入Micro SD Storage Board
接入任意自定义模块,随心搭配
相关说明:
本产品实际配备什么模块,须参考本产品详细配置。(以上图片只表明本产品可以支持该类模块,而不代表配备它们)
本产品实际如何接入模块,需根据本产品实际情况。(以上图片可能引自Open系列其它产品,接入方法仅供参考)
各模块移植性图展
模块接入STM32主控板
模块接入STM8主控板
模块接入NXP Cortex-M3主控板
模块接入NXP Cortex-M0主控板
模块接入ARM9主控板
模块接入AVR主控板
模块接入FPGA主控板
模块接入CPLD主控板
相关说明:
模块的接口具有高度统一性,它们在设计时也考虑了与Open系列主控板的兼容性,因而具备了超强的移植性。
截至2014.05,适合接入Open系列主控板的外围模块已超过30个(各个Open主控板功能不同,适合接入的模块也不尽相同)。
我们将陆续推出:各类传感器,测距、电机、GSM、3G模块等。
Open系列开发板简介
玩转你的ARM变形金刚,召集你的ARM战队,建立你的嵌入式战线,缔造你的电子王国!从这里开始!
市面上大部分开发板的局限性在于它们不具开放性,不够模块化,因而限制了其移植性,扩展性,限制了其应用。
实际上,硬件开发系统可以学习软件工程的设计理念 --开放化,模块化,接口化。
以便让它具备&可移植&,&易扩展&等优越性,以便让它能像软件一样,一次设计,到处使用。
我们决定做一些真正优秀的开发系统,决定将它们更&一般化&,以让它们发挥出更强的威力。
基于以上设计理念的驱动,我们开发了Open系列主控板。
它颠覆了传统开发板的设计方法,真正适用于用户的学习、研发!
Open系列主控板的主要特点是它的&模块化&及&开放性&。这个全新的设计理念带来显著优点:
为初学者而生:
模块化的设计:需要使用什么模块,则接入什么模块,系统简单明了,亦可单独研究各个模块,便于初学者快速入门;
开放性的设计:整个系统高度开放,采用接入式连接,避开了连线的复杂性,避免了由于错误连线导致无法成功调试的可能性;
明了的标识与方便的接口:使得初学者可以简便的使用ARM的所有资源,完成各项入门实验。
为开发者而造:
模块化的设计:需要使用什么模块,则接入什么模块,系统目标明确,亦可移植各个模块到其它系统,便于开发者快速开发;
开放性的设计:整个系统高度开放,大部分I/O开放,开发不受限制。用户亦可自行设计模块,简便的接入到系统。
明了的标识与方便的接口:使得开发者可以轻松发挥ARM的所有资源,debug各类测试程序。
借助主控板及各个模块搭建你的系统,使用它作为产品的初期评估系统,有效减少你的重复劳动,快速开发出你的目标产品。
敬告:Open系列开发板已获得国家专利,包括实用新型专利及外观专利,仿造必追究其法律责任!
Open系列开发板优势
功能强大,不断升级!我们将持续提供常用功能外围模块。外围模块持续更新,系统功能不断升级。
你可以亲力设计属于你的外围模块。量身定做你的外围,倾情打造你的系统。我们需要的只是你的震撼。
资源开放,便于使用!相对于传统开发板其封闭性的设计,开放性的设计带来以下优点:
可以接入用户需要的模块,而不是已经限定的模块;不接入模块,不占用I/O,而不是已经占用大量I/O。
分块设计,持续更新!如软件设计般设计硬件,对功能进行划分,将它们模块化、接口化,便于&调用&。
如软件般,一次设计,到处使用。可用于产品的初期快速评估,避免重复劳动。
支持移植,加速开发!各个模块可从系统分离,接入到其它系统,便于产品的初期快速评估。模块化的设计带来的是超强的移植性,各个模块可以接入其它MCU(如PIC、AVR、51等)或ARM(如ARM7/ARM9/ARM11/A8/A9、Coretex-M0/M3/M4等)。
接口丰富,利于扩展!包括1-WIRE,I2S,I2C,SPI,USART,USB,CAN,Ethernet,SDIO,PS/2,DCMI接口等。(各Open主控板的MCU不同,功能不同,所以,不一定都带上述所有接口)
接入设计,易于使用!模块通过接口直接接入系统,灵活的同时做到了易用,让你从学习爽到开发:
对比资源开放的,不需连线,便于学习。对比资源封闭的,不易受限,利于开发。
附送常用模块C语言驱动程序,提供μC/OS-II示例程序。
给出各类软硬件设计教程,方便用户快速入门ARM。
敬告:Open系列开发板已获得国家专利,包括实用新型专利及外观专利,仿造必追究其法律责任!
JTAG接口定义
特别说明:
本产品支持通过u-boot下载程序,但是使用过程中如果使Norflash中的u-boot损坏,则需购买下载器重新下载u-boot
本产品不自带仿真调试,需接入仿真器才能进行仿真调试!(需另行购买)
产品配套光盘中有如下内容:
Linux平台工具(交叉编译工具arm920t-eabi-4.1.2)
Windows平台开发工具包(包括ADS、图片转换工具、DNW等开发工具)
Linux资源(QT编译后安装文件包、Uboot修改后文件包、Linux移植驱动后源码包)
OPEN2440开发板配套电路图及PCB封装库(PDF格式原理图、相关芯片)
OPEN2440开发板手册及教材集(包括UBUNTU12.04环境搭建、LINUX动移植、UBOOT移册,手册持续更新中)
OPEN2440开发板配套芯片手册(各类器件Datasheet)
UBUNTU镜像(UBUNTU12.04镜像)
出厂烧录测试镜像合集
附赠嵌入式相关的学习资料(包括bootloader、C语言、驱动开发、QT开发、PCB设计、ubuntu培训等方面电子版书籍)
三星网站的S3C2440资料(三星公司网站提供的所有S3C2440A的资料)
OPEN2440模块资料(OPEN2440外围扩展模块原理图和相应资料)
整板外设裸机测试程序
软件源代码包(包括内核源码,qt源码,uboot源码,驱动和测试程序源码,文件系统源码等)
标准版配置
Open2440开发板 x1
USB线 type A公口 转 mini-B公口 x2
4PIN实验连接线 x2
2PIN实验连接线 x2
5V电源适配器 x1
资料光盘 x1
温馨提示:你可选购、,以搭建适合自己的平台!由于项目需求,要实现S3C2440串口与PC机的通讯。通过实验手册上的串口通讯示例了解串口的工作原理,实现简单的串口通讯实验。为进一步利用串口编程实现更加复杂的功能做准备。
实验效果:PC机上按下任意键,通过串口将字符传送至又通过串口返回至PC机,并在DNW终端或超级终端显示该字符。
二、实验原理
PC机&&&&&& &-------&&&&&&&& S3C2440开发板
S3C2440的UART提供了三个独立的异步串行I/O端口,每个都可以在中断和DMA两种模式下进行,他们支持的最高波特率是115.2Kbps。每个UART通道包含两个64字节的FIFO,分别提供数据接收和发送。
每个UART包含波特率发生器、接收器、发送器和控制单元。其中,波特率发生器以MCLK为时钟源。发送器和接收器包含64字节FIFO寄存器和移位寄存器。当发送数据时,数据先写到FIFO,然后拷贝到发送移位寄存器,再从数据输出端口(TxDn)依次被移位输出。被接受的数据也同样从接收端口(RxDn)移位输入到移位寄存器,然后拷贝到FIFO中。
1、数据发送操作
数据发送帧的格式是可编程的,它包含一个开始位,5到8个数据位,一个可选的奇偶位和1或2个停止位,这些可通过线性控制器(ULCONn)来设置。
2、数据接收操作
与数据发送一样,数据接收的帧也是可编程的。接收器能够检测溢出错误、奇偶校验错误、帧错误和中止状况,每种情况下都将会产生一个错误标志置位。
3、波特率发生器
每个UART的波特率发生器为传输提供了串行移位始终。波特率发生器的时钟源可以从S3C2440的内部系统时钟或UEXTCLK中来选择。波特率由时钟源(PCLK、FCLK、或UEXTCLK)16分频和UART波特率除数寄存器(UBRDIVn)指定的16位除数决定。UBRDIVn的值可按照下式确定:
UBRDIVn = (int)(UART clock/(bps*16)) & 1
(UART clock为PCLK、FCLK或UEXTCLK) 除数的范围为1到(216-1)。
例如,若波特率为115200bps,且UART为40MHz,则UBRDIVn为:
UBRDIVn =(int)(5200*16))-1
&&&&&&&&&&&&& = (int)(21.7) & 1
&&&&&&&&&&&&& = 22 & 1
&&&&&&&&&&&&& = 21
三、代码实现
主程序部分:serial.c
#define ULCON0 (*(volatile unsigned *)0X) //UART线控制寄存器#define UCON0
(*(volatile unsigned *)0X) //UART控制寄存器#define UFCON0 (*(volatile unsigned *)0X) //FIFO控制寄存器#define UTRSTAT0 (*(volatile unsigned*)0X) //UART状态寄存器#define UBRDIV0 (*(volatile unsigned *)0X) //波特率#define UTXH0
(*(volatile unsigned *)0X)
//发送数据寄存器8位#define URXH0
(*(volatile unsigned *)0X)
//接收数据寄存器8位int TSmain(){ char
ULCON0 &=0XFFFFFF00;
ULCON0 |=0X03;
//1位起始位,8位数据位 UCON0
//串口时钟PCLK,查询方式 UBRDIV0 =0X1A;
//波特率115200 while(1) {
if(UTRSTAT0 & 0X01)
//接收是否完毕 =1结束
buf=URXH0;
//读取数据
while(!(UTRSTAT0 & 0X04));//是否允许发送 =1允许
return 0;}
引导程序部分
AREA |DATA|,CODE,READONLY ENTRY ldr r13,=0x1000 IMPORT TSmain b TSmain END
上述程序分析:
首先,宏定义各个寄存器,例如地址0X处为UART线控制寄存器,0X处为UART控制寄存器,等等。进入TSmain()函数,定义char类型的变量buf,用于接收PC机传来的字符。接着ULCON0寄存器的低8位清零,设置低八位值为03,即帧传输模式为1位起始位,8位数据位,串口始终寄存器置为0x0805,表示串口时钟源为PCLK,查询模式,对于UBRDIV0寄存器的设置,表示波特率为115200。
下面进入while(1)语句,查看UTRSTAT0寄存器最低位是否为1,若为1,表示接收完毕,把URXH0中的内容置于buf中,查看UTRSTAT0寄存器第2位是否为1,若为1,表示允许发送数据,把buf中的数据置于UTXH0寄存器中,完成简单的串口通讯。
四、实验小结
通过此程序,了解了S3C2440串口通讯的实现原理,特别是各个寄存器的设置以及各个位的含义,为下一步通过串口通信,访问NAND Flash做好铺垫!
阅读(...) 评论()随笔 - 57&
文章 - 0&评论 - 27&trackbacks - 0
++++++++++++++++++++++++++++++++++++++++++
本文系本站原创,欢迎转载! 转载请注明出处:
通用异步接收器和发送器简称。通常是嵌入式设备中默认都会配置的通信接口。这是因为,很多嵌入式设备没有显示屏,无法获得嵌入式设备实时数据信息,通过串口和超级终端相连,打印嵌入式设备输出信息。并且在对嵌入式系统进行跟踪和调试时,串口了是必要的通信手段。比如:网络路由器,交换机等都要通过串口来进行配置。串口还是许多硬件数据输出的主要接口,如接收器就是通过串口输出接收数据的。
图同步信号与异步信号
同步通信技术
在发送数据信号的时候,会同时送出一根同步时钟信号,用来同步发送方和接收方的数据采样频率。如图所示,同步通信时,信号线是一根同步时钟信号线,以固定的频率进行电平的切换,其频率周期为,在每个电平的上升沿之后进行对同步送出的数据信号线进行采样(高电平代表,低电平代表),根据采样数据电平高低取得输出数据信息。如果双方没有同步时钟的话,那么接收方就不知道采样周期,也就不能正常的取得数据信息。
异步通信技术
在异步通信技术中,数据发送方和数据接收方没有同步时钟,只有数据信号线,只不过发送端和接收端会按照协商好的协议(固定频率)来进行数据采样。数据发送方以每秒钟的速度发送数据,接收方也以的速度去接收数据,这样就可以保证数据的有效和正确。通常异步通信中使用波特率()来规定双方传输速度,其单位为(每秒传输位数)。
串行通信好比是一列纵队,每个数据元素依次纵向排列。如图所示,传输时一个比特一个比特的串行传输,每个时钟周期传输一个比特,这种传输方式相对比较简单,速度较慢,但是使用总线数较少,通常一根接收线,一根发送线即可实现串行通信。它的缺点是要增加额外的数据来控制一个数据帧的开始和结束。
并行通信好比一排横队,齐头并进同时传输。这种通信方式每个时钟周期传输的数据量和其总线宽度成正比,但是实现较为复杂。通信采用的是串行方式进行通信的。
图串行数据通信与并行数据通信
在数据通信过程中,发送方和接收方为了实现数据的正确发送和接收,通常会有一个状态寄存器来描述当前数据接收和发送状态,当发送方有数据发送时,会查看发送状态寄存器,看是否允许发送数据(如果上一次数据还没有发送完毕,不允许继续数据发送),在发送允许情况下再送出新数据。同样,接收端通过查看接收状态寄存器,确定是否有新数据到达,如果有数据到达,将去接收数据缓冲区读取数据。
()轮询模式
通过程序执行流,不停的检测状态寄存器的结果,如果当前可发送或接收,则发送或接收数据。其过程可以用下面伪代码来表示。
轮询方式实现数据发送伪代码
if(发送状态可发送
执行数据发送操作
轮询方式实现数据接收伪代码
if(接收状态有数据到达
执行数据接收操作
由程序可知,这种方式实现简单,但在进行数据接收和发送时都要进入循环检查状态寄存器的值,当没有数据到达或数据不可发送时,会一直空转,其它程序又得不到的执行权,很影响系统的效率。
()中断模式
中断方式是指,当数据到达或数据可发送时,产生中断,通知去发送或接收数据,这种方式将通信硬件和独立出来,通信硬件只有在发送或接收条件准备好之后中,才通知去处理数据,在通信条件没有准备好的时候,去处理其它程序,显然这种方式更合理,这种方式要求通信硬件要求比较高,需要支持产生中断信号。
通常实现数据的转移或拷贝时,将从源地址处复制数据到寄存器,然后将寄存器数据再写入目的地址处,该复制过程需要来执行。支持传输模式,传输是指在不干涉的情况下,硬件自动实现数据的转移和复制,在传输过程中,几乎不用干涉,这样可以让安心的去做自己的事情。虽然如此,但是在传输数据过程中要占用总线,在大批数据传输时,系统总线会被通道占用,也会影响系统的效率。控制器支持方式传输串口通信数据。
UART控制器
控制器,提供了三个独立的异步串行端口,每个端口都可以在中断模式或模式下工作,换而言之,可以生成中断或请求用于和之间的数据传输。串口挂接在总线上,总线最高可以达到工作频率,在使用时钟频率时可以达到最高波特率的通信速度。如果串口接收外部设备提供(外部时钟),可以在更高的速度下工作。每个串口在接收装置和发送装置里分别包含一个的缓冲区,用于缓存发送数据和接收数据。
由于是串行异步通信方式,因此在通信过程中每次只能传输位()若干位组成一个数据帧(),帧是通信中最基本单元,它主要包含:开始位,数据位,校验位(如果开启了数据校验,要包含校验位),和停止位,帧结构如图所示。
图数据帧结构
在通信之前要在发送端和接收端约定好帧结构,也就是约定好传输数据帧格式。
l开始位:必须包含在数据帧中,表示一个帧的开始。
l数据位:可选,,,位,该位长度可由编程人员指定。
l校验位:如果在开启了数据校验时,该位必须指定。
l停止位:可选,位,该位长度可由编程人员指定。
通信双方约定好帧格式后,指定同一波特率,以保证双方数据传输的同步。
UART串口工作原理
每个包含一个波特率产生器,发送器,接收器和一个控制单元,如下图所示:
图硬件结构
是以异步方式实现通信的,其采样速度由波特率决定,波特率产生器的工作频率可以由(外围设备频率),(工作频率的分频),(外部输入时钟)三个时钟作为输入频率,波特率设置寄存器是可编程的,用户可以设置其波特率决定发送和接收的频率。发送器和接收器包含了的和数据移位器。通信是面向字节流的,待发送数据写到之后,被拷贝到数据移位器(字节大小)里,数据通过发送数据管脚发出。同样道理,接收数据通过管脚来接收数据(字节大小)到接收移位器,然后将其拷贝到接收缓冲区里。
()数据发送
发送的数据帧可编程的,它的一个帧长度是用户指定的,它包括一个开始位,个数据位,一个可选的奇偶校验位和个停止位,数据帧格式可以通过设置寄存器来设置。发送器也可以产生一个终止信号,它是由一个全部为的数据帧组成。在当前发送数据被完全传输完以后,该模块发送一个终止信号。在终止信号发送后,它可以继续通过()或发送保持寄存器()发送数据。
()数据接收
同样接收端的数据也是可编程的,接收器可以侦测到溢出错误奇偶校验错误,帧错误和终止条件,每个错误都可以设置一个错误标志。
l溢出错误是指在旧数据被读取到之前,新数据覆盖了旧数据
l奇偶校验错误是指接收器侦测到了接收数据校验结果失败,接收数据无效
l帧错误是指接收到的数据没有一个有效的停止位,无法判定数据帧结束
l终止条件是指接收到保持逻辑状态持续长于一个数据帧的传输时间
()自动流控()
和支持有和的自动流控,不支持流控。在情况下,通信双方和管脚分别连接对方的和管脚。通过软件控制数据帧的发送和接收。
在开启时,发送端接收发送前要判断信号状态,当接收到激活信号时,发送数据帧。该管脚连接对方管脚。接收端在准备接收数据帧前,其接收器有大于个字节的空闲空间,管脚会发送激活信号,当其接收小于个字节的空闲空间,必须置非激活状态。如图所示。
图自动流控数据传输
()波特率
在中波特率发生器为发送器和接收器提供工作时钟。波特率发生器的时钟源可以选择的内部系统时钟,或(外部时钟源),可以通过设置寄存器来设置波特率发生器的输入时钟源。通常我们选择使用作为工作时钟。
控制器中没有对波特率进行设置的寄存器,而是通过设置一个除数因子,来决定其波特率。其计算公式如下:
其中:的取值范围应该为。例如:波特率为,时钟为其工作频率,采用,为:
在系统时钟未初始化时,,如果波特率采用,那么为:
当使用外部时钟源时,如果外部时钟小于时钟,则应该设置为。
()波特率的错误容忍率()
数据信号在传输过程中由于外界电磁干扰,信号减弱等原因,当时钟频率较低,传输速率较高时会产生误差,当误差达到一定值时,会出现数据信号不能正常识别,造成通信异常。好比如,在普通列车轨道上试图行驶高速列车一样,由于高速列车对轨道要求很高,当速度达到一定程度,很可能造成事故。业界的波特率的错误容忍率为,如果大于该值则应该选择较低的波特率或提高输入时钟频率。
错误容忍率计算公式为:
注: tUPCLK为UART的真实工作时钟频率:tUPCLK = (UBRDIVn + 1) * 16 * 1Frame / PCLK
tUEXACT为UART理想工作时钟频率:tUEXACT = 1Frame / baud-rate
其中:为数据帧的长度开始位数据位可选校验位停止位
假如,波特率采用,时钟为,波特率除数因子为(通过前面计算公式算出),采用个停止位,个数据位,无校验的方式通信时,其错误容忍率为:
tUPCLK = 27 * 16 * 10 / 50M = 0.0000864
tUEXACT = 10 / 115200 = 0.0000868
UART Error& = | 0.0000864 - 0.0000868 | / 0.0000868 = 0.46%
在开发板没有初始化系统时钟前,开发板工作在下,假如我们将波特率设置为,采用为系统默认时钟,数据帧格式通信,那么:
其错误容忍率:
tUPCLK = 7 * 16 * 10 / 12M = 0.0000933
tUEXACT = 10 / 115200 = 0.0000868
UART Error = | 0.0000933 - 0.0000868 | / 0.0000868 = 7.5%
其错误容忍率大于,因此在频率下,波特率不能设置为,现在将波特率设置为,采用数据帧格式通信,那么:
UBRDIVn = (int)(12M / (57600 * 16)) - 1 = 12
tUPCLK = 13 * 16 * 10 / 12M = 0.000173
tUEXACT = 10 / 57600 = 0.0001736
UART Error = | 0. 000173 - 0. 0001736 | / 0. 0001736 = 0.345%
采用波特率为,数据帧格式通信时,其错误容忍率小于标准的,因此可以正常工作。
图开发板串口硬件图
图为开发板引出串口接线图,它采用接口公头(有接线柱的端口,只有接线孔的为母头),其有根信号线,通信过程中用到了信号线(数据发送管脚)它和串口线母头信号线相接(代表号,号,号串口),信号(数据接收管脚)和串口线母头相接(代表号,号,号串口),信号线(接地管脚),信号线(数据发送流控制管脚)和串口线母头相接,信号线(数据接收流控制管脚)和串口线母头相接。如果中没有开启流控的话,只要用到信号线,信号线和信号线。
图串口管脚接线
通过硬件管脚图可以看出,和连接到的和管脚上的,而和是复用管脚,因此我们要对和对应寄存器进行设置,其对应寄存器为。
表端口设置寄存器()
复位默认值
GPIO端口H配置寄存器
GPIO端口H数据寄存器
GPIO端口H上拉无效寄存器
初始值
设置当前管脚功能:
00 = 输入端口&
01 = 输出端口
10 = RXD[0]配置为串口0的接收数据管脚
设置当前管脚功能:
00 = 输入端口&
01 = 输出端口
10 = RXD[0]配置为串口0的接收数据管脚
和为和管脚设置位,将其功能设置为了专用通信管脚,因此应该设置其为,分别用于数据的接收和发送。
表端口上拉电阻设置寄存器()
初始值
设置对应管脚GPHn的是否启用上拉功能
0 = 启用上拉功能
1 = 禁用上拉功能
上拉电阻设置寄存器:上拉电阻用来稳定电平信号,保障传输数据的正确,里设置其内部上拉。
表串行控制寄存器()
复位默认值
串口0串行控制寄存器
初始值
选择串口0是否使用红外模式:
正常通信模式
红外通信模式
设置串口0在数据接收和发送时采用的校验方式:
强制校验/检测是否为1
强制校验/检测是否为0
设置串口0停止位数:
每个数据帧一个停止位
每个数据帧二个停止位
设置串口0数据位数:
00 = 5个数据位&
01 = 6个数据位
10 = 7个数据位&
11 = 8个数据位
通过设置来设置通信方式,选择通信方式为一般通信模式或红外通信模式,设置串口校验方式,设置串口停止位数,:设置串口的数据位数。
我们选择一般通信模式,无校验位,个停止位,个数据位的数据通信方式。因此:
表串口控制寄存器()
复位默认值
串口0控制寄存器
初始值
FCLK分频因子
当UART0选择FCLK作为时钟源时,设置其FCLK的分频因子
工作时钟频率 = FCLK/ FCLK分频因子 + 6
UART时钟源选择
选择UART0的工作时钟PCLK,UEXTCLK,FCLK/n:
00,10 = PCLK
01 = UEXTCLK
11 = FCLK/n
当选择FCLK/n作为UART0工作时钟时还要做其它设置,具体请读者自行查看硬件手册
发送数据中断
设置UART0中断请求类型,在非FIFO传输模式下,一旦发送数据缓冲区为空,立即产生中断信号,在FIFO传输模式下达到发送数据触发条件时立即产生中断信号:
接收数据中断
设置UART0中断请求类型,在非FIFO传输模式下,一旦接收到数据,立即产生中断信号,在FIFO传输模式下达到接收数据触发条件时立即产生中断信号:
接收数据超时
设置当接收数据时,如果数据超时,是否产生接收中断:
不开启超时中断&
1 = 开启超时中断
10 = 7个数据位&
11 = 8个数据位
接收数据错误中断
设置当接收数据时,如果产生异常,如传输中止,帧错误,校验错误时,是否产生接收状态中断信号:
不产生错误状态中断&
1 = 产生错误状态中断
设置该位时UART会进入回送模式,该模式仅用于测试
1 = 回送模式
发送终止信号
设置该位时,UART会发送一个帧长度的终止信号,发送完毕后,该位自动恢复为0
1 = 发送终止信号
设置采用哪个方式执行数据写入发送缓冲区
中断请求或查询模式
10 = DMA0请求
设置采用哪个方式执行数据写入接收缓冲区
中断请求或查询模式
10 = DMA0请求
通常串口采用作为输入工作时钟,采用简单的轮询方式进行数据接收和发送,不开启数据接收超时,数据产生错误时不产生错误状态中断,因此:
表控制寄存器()
复位默认值
串口控制寄存器
初始值
设置FIFO发送模式的触发级别:
00 = FIFO为空触发&&
01 = 16字节触发
10 = 32字节触发&&&&
11 = 48字节触发
设置FIFO接收模式的触发级别:
00 = FIFO为空触发&&
01 = 16字节触发
10 = 32字节触发&&&&
11 = 48字节触发
发送FIFO重置
在重置FIFO后自动清除发送缓冲区
正常模式&&&&&&
1 = 自动清除
接收FIFO重置
在重置FIFO后自动清除接收缓冲区
正常模式&&&&&&
1 = 自动清除
不启用FIFO&&&&
1 = 启用FIFO
表控制寄存器()
复位默认值
0x5000000C
串口MODEM控制寄存器
初始值
必须全部置0
AFC自动流控
不开启流控&&&&
1 = 开启流控
必须全部置0
如果启用AFC,该位无效,S3C2440会自动控制nRTS,如果不启用AFC,nRTS必须由软件控制
高电平激活nRTS&&&&&
1 = 低电平激活nRTS
表发送接收状态寄存器()
复位默认值
串口发送接收状态寄存器
初始值
发送器为空
当发送缓存寄存器中没有数据要发送且发送移位寄存器为空时,自动置1
发送器为空(发送缓存和移位寄存器)
发送缓存寄存器为空
当发送缓存寄存器为空时,自动置1
发送缓存寄存器非空
发送缓存寄存器为空
接收缓存寄存器为空
当接收缓存寄存器有数据到达时,自动置1
接收缓存寄存器为空
缓存寄存器接收数据
表发送缓存寄存器()
复位默认值
串口发送缓存寄存器
表接收缓存寄存器()
复位默认值
串口接收缓存寄存器
表波特率除数寄存器()
复位默认值
串口0波特率除数寄存器
初始值
波特率除数
设置波特率除数(大于0)使用外部输入时钟时可以置0
上述寄存器是是和通信相关寄存器,使用简单的无,无自动流控时,设置如下:
// 不使用流控
// 波特率为
// 波特率为
&&&&&&&& // 波特率为
和分别是数据发送和接收寄存器,发送数据时通过轮询方式判断发送状态寄存器的状态,当可以发送数据时,执行寄存器写入操作,接收数据时,以轮询方式检测接收状态寄存器状态,当有数据到达时,读取寄存器里的数据即可取得串口数据。
TXD0READY&& (1&&2)& //发送数据状态OK
RXD0READY&& (1)&&&& //接收数据状态OK
/* UART串口单个字符打印函数 */
extern void putc(unsigned char c)
while( ! (UTRSTAT0 & TXD0READY) );
/* UART串口接受单个字符函数 */
extern unsigned char getc(void)
while( ! (UTRSTAT0 & RXD0READY) );
return URXH0;
串口驱动实验
:本程序文件对看门狗,内存等基本硬件做初始化,然后跳入到中的函数执行。
EQU&&& & 0x
EQU&&& & 0x
AREA Init, CODE, READONLY
ldr r0, = 0x&& ; 将看门狗控制寄存器地址放入
mov r1, #0
str r1, [r0]&&&&&&&&&&& &&&&&&&&
; 设置看门狗控制寄存器的值为
bl initmem&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ; 跳转到代码段,初始化内存
IMPORT xmain&&&&&&&&&&&&&&&&&&&& ; 引入中的函数
ldr sp, =0x&&&&&&&&&&&& ; 调用程序之前先初始化栈指针
ldr lr, =loop&&&&&&&&&&&&&&&&&&&&&&&&&&& ; 设置函数的返回地址
ldr pc, =xmain&&&&&&&&&&&&&&&&&&&&&&& ; 跳转到程序中的函数的入口处执行
b loop&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
; 内存初始化
ldr r0, =0x&&&&&&&&&&&&& ; 加载内存相关寄存器首地址
ldr r1, =0x&&&&&&&&&&&&& ; 加载内存相关寄存器尾地址到
adr r2, memdata&&&&&&&&&&&&&&&&&&&& ; 将寄存器配置数据地址段首地址加载到
ldr r3, [r2], #4&&&&&&&&&&&&&& ; 循环设置存寄存器
str r3, [r0], #4
teq r0, r1
bne initmemloop&&&&&&&&&&&&&&&&&&& ; 循环到最后一个寄存器时退出函数
DCD 0x &&&&&&&&&&&&&&
DCD 0x&&&&&&&&&&&&&&&&
;BANKCON0&&&&
DCD 0x&&&&&&&&&&&&&&&&
;BANKCON1&&&&
DCD 0x&&&&&&&&&&&&&&&&
;BANKCON2&&&&
DCD 0x& &&&
;BANKCON3&&&&&&&&&&&&&
DCD 0x&&&&&&&&&&&&&&&&
;BANKCON4&&&&
DCD 0x&&&&&&&&&&&&&&&&
;BANKCON5&&&&
DCD 0x&&&&&&&&&&&&&&&&
;BANKCON6&&&&
DCD 0x&&&&&&&&&&&&&&&&
;BANKCON7&&&&
DCD 0x008e07a3&&&&&&&&&&&&&&&&&
;REFRESH&&&&&&&&
DCD 0x&&&&&&&&&&&&&&&&
;BANKSIZE&&&&&&
DCD 0x&&&&&&&&&&&&&&&&
DCD 0x&&&&&&&&&&&&&&&&
:函数对进行初始化,然后进入死循环内,不停打印字符串“串口打印试验”。
GPHCON&&&&&&&&&&&&&&&&&&&&&&&&&&&&& (*(volatile unsigned long *)0x)
GPHDAT&&&&&&&&&&&&&&&&&&&&&&&&&&&&& (*(volatile unsigned long *)0x)
GPHUP&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& (*(volatile unsigned long *)0x)
ULCON0&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& (*(volatile unsigned long *)0x)
UCON0&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& (*(volatile unsigned long *)0x)
UFCON0&&&&&&&&&&&&&&&&&&&& &&&&&&
(*(volatile unsigned long *)0x)
UMCON0&&&&&&&&&&&&&&&&&&&&&&&&&&&& (*(volatile unsigned long *)0x5000000c)
UTRSTAT0&&&&&&&&&&&&&&&&&&&&&&&&&& (*(volatile unsigned long *)0x)
UTXH0&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&
(*(volatile unsigned char *)0x)
URXH0&&&&&&&&&&&&& &&&&&&&&&&&&&&&&
(*(volatile unsigned char *)0x)
UBRDIV0&&&&&&&&&&&&&&&&&&&&&&&&&&&& (*(volatile unsigned long *)0x)
TXD0READY&&& (1&&2)& //发送数据状态
RXD0READY&& (1)&&&&&&&&&&&&& //接收数据状态
串口初始化
GPHCON |= 0xa0;&&&&&&&&&&&&&&& //GPH2,GPH3 used as TXD0,RXD0
GPHUP&&&& = 0x0;&&&&&&&&&&&&&&&
//GPH2,GPH3内部上拉
= 0x03;&&& &&&&&&&& //8N1&&&&&&&&&
UCON0&&&& = 0x05;&&& &&&&&&&&
//查询方式为轮询或中断时钟选择为
UFCON0 = 0x00;&&&&&&&&&&&&&&&& //不使用
UMCON0 = 0x00;&&&&&&&&&&&&&&& //不使用流控
UBRDIV0 = 12;&&&&&&&&& &&&&&&&&
//波特率为
串口单个字符打印函数
while( ! (UTRSTAT0 & TXD0READY) );
串口接受单个字符函数
while( ! (UTRSTAT0 & RXD0READY) );
return URXH0;
串口字符串打印函数
int i = 0;
while( str[i] ){
&&&&&&&& putc( (unsigned char) str[i++] );
for(i = 1000; i & 0; i--)
&&&&&&&& for(j = msec*10; j & 0; j--)
&&&&&&&& /* do nothing */;
通过串口打印字符串
uart_init();
while(1) {
&& &&&&&&&& delay(10);
&&&&&&&&&&& printk(&Uart串口打印试验
&& return 0;
当编译并将生成Norflash,在-&所有程序-&通讯mini2440,在之后弹出的COM波特率1个停止位,PC串口(笔记本通常没有串口,可以买一个Uart串口打印试验”字符串。
++++++++++++++++++++++++++++++++++++++++++
本文系本站原创,欢迎转载! 转载请注明出处:
阅读(...) 评论()

我要回帖

更多关于 天嵌tq2440光盘资料 的文章

 

随机推荐