atx-6951怎么实现10路uart串口

10W+数据的Excel下载,该怎么处理_ARM9
uart实验的时候编译不能通过 异常提示如下 请教是什么有关问题啊_asp.net 2.0 SQL Server 2005下的一个不理解的有关问题,高分求解__脚本百事通
稍等,加载中……
^_^请注意,有可能下面的2篇文章才是您想要的内容:
10W+数据的Excel下载,该怎么处理
uart实验的时候编译不能通过 异常提示如下 请教是什么有关问题啊
asp.net 2.0 SQL Server 2005下的一个不理解的有关问题,高分求解
10W+数据的Excel下载,该怎么处理
10W+数据的Excel下载需求:
1.数据量大,超过10W,所以excel 2003不符合要求;
2.服务器配置不安装office,安装少量的组件能接受;
3.数据文件不能太大,10W * 16 的数据不要超过10M;
4.下载速度,从数据源DataSet copy至Excel的时间,10W数据不要超过30s
5.能操作Excel最好,比如合并单元格,设置列的单元格格式为数字,还是文本
简单来说就是希望用最少的时间下载最多的数据,服务器还不能安装office
200分希望能找到好的解决办法。
1.MyXls组件已经pass掉
2.保存为csv文件已经pass掉
3.目前的NPOI只支持office 2003,pass掉
------解决方案--------------------10W * 16 的数据不要超过10M;
10M = 1000万
10W * 16 = 160万
每条数据占用6字节。很难做到。
应该分页、分文件。------解决方案--------------------我觉得LZ可以试试用SSIS做个包然后.net里面去调 不知道你们的server上装的是什么DB Server2005自带的企业商务智能套件应该有吧------解决方案--------------------如果从数据源DataSet copy至Excel的时间,10W数据要控制到30s以内有点够呛吧------解决方案--------------------用datareader直接读数据库,以2进制流方式直接输出到客户端,提供下载,当datareader读一批数据如1w条时候,提示用户保存文件2,然后继续读,直到完成------解决方案--------------------/------解决方案--------------------直接用数据库导出Excel看看用时和大小------解决方案--------------------使用silverlight的oob模式,可以与客户端excel交互。例如
http://kevinfan./686
你的程序可以在客户端动态创建一个Excel工作表,然后一边异步从服务器上下载数据(例如100行数据一次下载),一边同时把数据填入Excel工作表。用户就可以眼睛看着数据填充的过程。等填充完,你的程序就可以调用excel工作簿对象来保存数据到本地(直接访问本地磁盘目录)。------解决方案--------------------当然最重要地是,客户端不需要预先安装.net framework,应用程序部署在web服务器上就可以自动给上万、几十万客户端安装和更新程序版本。------解决方案--------------------可以试试 aspose.cells 服务器不用装Office
uart实验的时候编译不能通过 异常提示如下 请教是什么有关问题啊
uart实验的时候编译不能通过 错误提示如下 请问是什么问题啊?2410slib.sLink ......
.\debug\2410lib.o(.text+0x120): In function `Delay':D:/software/JXARM/examples/common/2410lib.c:53: undefined reference to `__divsi3'.\debug\2410lib.o(.text+0x35c): In function `Uart_Init':D:/software/JXARM/examples/common/2410lib.c:194: undefined reference to `__floatsidf'.\debug\2410lib.o(.text+0x370):D:/software/JXARM/examples/common/2410lib.c:194: undefined reference to `__divdf3'.\debug\2410lib.o(.text+0x380):D:/software/JXARM/examples/common/2410lib.c:194: undefined reference to `__floatsidf'.\debug\2410lib.o(.text+0x39c):D:/software/JXARM/examples/common/2410lib.c:194: undefined reference to `__divdf3'.\debug\2410lib.o(.text+0x3a8):D:/software/JXARM/examples/common/2410lib.c:194: undefined reference to `__fixdfsi'.\debug\2410lib.o(.text+0x3ec):D:/software/JXARM/examples/common/2410lib.c:199: undefined reference to `__floatsidf'.\debug\2410lib.o(.text+0x400):D:/software/JXARM/examples/common/2410lib.c:199: undefined reference to `__divdf3'.\debug\2410lib.o(.text+0x410):D:/software/JXARM/examples/common/2410lib.c:199: undefined reference to `__floatsidf'.\debug\2410lib.o(.text+0x42c):D:/software/JXARM/examples/common/2410lib.c:199: undefined reference to `__divdf3'.\debug\2410lib.o(.text+0x438):D:/software/JXARM/examples/common/2410lib.c:199: undefined reference to `__fixdfsi'.\debug\2410lib.o(.text+0x490):D:/software/JXARM/examples/common/2410lib.c:204: undefined reference to `__floatsidf'.\debug\2410lib.o(.text+0x4a4):D:/software/JXARM/examples/common/2410lib.c:204: undefined reference to `__divdf3'.\debug\2410lib.o(.text+0x4b4):D:/software/JXARM/examples/common/2410lib.c:204: undefined reference to `__floatsidf'.\debug\2410lib.o(.text+0x4d0):D:/software/JXARM/examples/common/2410lib.c:204: undefined reference to `__divdf3'.\debug\2410lib.o(.text+0x4dc):D:/software/JXARM/examples/common/2410lib.c:204: undefined reference to `__fixdfsi'.\debug\2410lib.o(.text+0x914): In function `Uart_GetIntNum':D:/software/JXARM/examples/common/2410lib.c:348: undefined reference to `strlen'.\debug\2410lib.o(.text+0x9a4):D:/software/JXARM/examples/common/2410lib.c:362: undefined reference to `atoi'.\debug\2410lib.o(.text+0xb04):D:/software/JXARM/examples/common/2410lib.c:382: undefined reference to `_ctype_'.\debug\2410lib.o(.text+0xd1c): In function `Uart_Printf':D:/software/JXARM/examples/common/2410lib.c:452: undefined reference to `vsprintf'.\debug\2410lib.o(.text+0xe78): In function `Adc_Get_Data':D:/software/JXARM/examples/common/2410lib.c:517: undefined reference to `__divsi3'uart.elf - build uncompleted.------解决方案--------------------检查一下库文件的路径
asp.net 2.0 SQL Server 2005下的一个不理解的有关问题,高分求解
asp.net 2.0 SQL Server 2005下的一个不理解的问题,高分求解!大家好
asp.net2.0下
数据库访问用的微软的企业库,
有一个时时请求数据库的asp.net页面(是做像聊天信息内容更新一样的一个页面),通过dataset每秒访问查询一次数据库。将内容再呈现再页面上。
这时资源管理器中
进程sqlserver.exe
用户network
service的 "内存使用 "
不停增长,
离开这个页面即停止增长。但是过很长时间它也并不会再减少,只用重启sql服务才会重新变小。。
请问这是怎么回事,是页面缓存还是SQL
2005那里设置的缘故?
sqlserver.exe
用户network
service占用的 "内存 "是做什么用的?
怎么解决啊?
高手指点小弟一下吧!!------解决方案--------------------数据库链接关闭了没有;
------解决方案--------------------连接用完要关闭,NET的回收不是及时的
------解决方案--------------------connection用完必须关闭,需要再用就再打开
我觉得你的流程大致是这样的:
页面载入 - 打开到数据库的链接 - 查询 - (刷新,返回页面载入的步骤)
也就是说,每次你都重新创建了一个到数据库链接的实例,而且没有关闭
另外,1sec刷新1次是不是太快了点……
------解决方案--------------------可以用连接池,优化,但是你参考一下ADO.net 2.0第四章 80页
------解决方案--------------------正常现象,sql server的动态内存分配机制,将大量复杂的查询结果放到内存中,增加查询速度,不要管它,时间长了不使用的内容就自动释放.
------解决方案--------------------应该是SQL临时表造成的吧,缓存
连接用完一定要CLOSE(),对你关闭,其实是放问连接池,不要占着不放
------解决方案--------------------1、如果只是显示的话,不要使用DataSet改用DataTable;
2、db对象使用过之后销毁;
3、不用担心重复连接的效率问题,因为重复的连接是由连接池来管理的,可以参阅一下相关的资料;
------解决方案--------------------你肯定是不停地连接数据库了,那就不停地关吧,再连接
------解决方案--------------------连接过多是xp的iis连接数有限制
用破解的tcpip.sys替换系统自带的即可
也可以用bitcomet0.8以上版本的破解tcpip -.-
如果您想提高自己的技术水平,欢迎加入本站官方1号QQ群:&&,&&2号QQ群:,在群里结识技术精英和交流技术^_^
本站联系邮箱:随笔 - 57&
文章 - 0&评论 - 23&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串口打印试验”字符串。
++++++++++++++++++++++++++++++++++++++++++
本文系本站原创,欢迎转载! 转载请注明出处:
阅读(...) 评论()}

我要回帖

更多关于 uart接口 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信