<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>起点博客 &#187; UART</title>
	<atom:link href="http://xinzero.com/tag/uart/feed" rel="self" type="application/rss+xml" />
	<link>http://xinzero.com</link>
	<description>嵌入式软件</description>
	<lastBuildDate>Sun, 06 Jun 2010 03:54:23 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>UART收发数据的讨论</title>
		<link>http://xinzero.com/uart-rx-and-tx.html</link>
		<comments>http://xinzero.com/uart-rx-and-tx.html#comments</comments>
		<pubDate>Mon, 22 Jun 2009 15:27:10 +0000</pubDate>
		<dc:creator>will</dc:creator>
				<category><![CDATA[学习笔记]]></category>
		<category><![CDATA[UART]]></category>
		<category><![CDATA[中断]]></category>
		<category><![CDATA[串口]]></category>

		<guid isPermaLink="false">http://xinzero.com/?p=187</guid>
		<description><![CDATA[UART(Universal Asynchronous Receiver )是通用异步收发接口，在很多芯片中都有应用。一般UART的收与发共用一个数据寄存器（8bit）,通过相应的状态寄存器来判断UART的工作情况。
接收可以有两种方式：一种是查询，另一种是中断。通常使用中断方式。
接收查询方式是通过CPU不停读取UART的状态寄存器，当有数据到来时，读取数据，此方法占用太多的CPU时间，很少使用，在CPU只做数据转发时可以考虑使用。
接收中断方式是通过数据到达后产生中断，在中断处理函数中读取数据。每一个数据（8bit）到来产生一次中断。如果在每个数据中断都调用数据处理函数，当波特率较高，数据帧较长，数据处理时间较长时，可能会出现丢数据的情况。如果在一次中断进入后，while（数据寄存器满）{读取数据}，但波特率不高时，可能出现将一帧数据分多次中断读取，给后来的数据处理带来不便。
在Windows中是将串口（UART）当做一个文件，直接对文件进行读写操作。一般是以一个线程去查询读取数据，基本可以保证整帧数据一次全部读出。也可以一次一个字符(8bit)来读。实际上是Windows的底层驱动将UART（串口）数据接收之后放到一个FIFO缓冲区中。显然在单片机或DSP等专用芯片中也应该用一个FIFO来缓存数据，然后在程序中读FIFO来处理数据。
发送也可以分为两种方式：一种是查询，另一种是中断。通常使用查询方式。
发送查询方式是通过CPU查询UART发送寄存器的状态，当为空的时候，发送数据；当不为空时，等待（适合用while循环判断）。
发送中断方式是将需要发送的数据存入一个缓冲区（FIFO），当发送寄存器为空，进入中断时，将数据发送。需要注意时，一旦开启发送中断，当没有数据发送时，就会一直跳入发送中断处理函数，所以在数据发送完之后一定要关闭发送中断使能。
随机文章

更换博客主题
QQ运动徽章-领取QQ运动徽章的方法
pv uv ip分别指的是什么？
三星i7500搜索联系人的bug
关注灾区，请不要打电话过去

]]></description>
			<content:encoded><![CDATA[<p>UART(Universal Asynchronous Receiver )是通用异步收发接口，在很多芯片中都有应用。一般UART的收与发共用一个数据寄存器（8bit）,通过相应的状态寄存器来判断UART的工作情况。</p>
<p>接收可以有两种方式：一种是查询，另一种是中断。通常使用中断方式。</p>
<p>接收查询方式是通过CPU不停读取UART的状态寄存器，当有数据到来时，读取数据，此方法占用太多的CPU时间，很少使用，在CPU只做数据转发时可以考虑使用。</p>
<p>接收中断方式是通过数据到达后产生中断，在中断处理函数中读取数据。每一个数据（8bit）到来产生一次中断。如果在每个数据中断都调用数据处理函数，当波特率较高，数据帧较长，数据处理时间较长时，可能会出现丢数据的情况。如果在一次中断进入后，while（数据寄存器满）{读取数据}，但波特率不高时，可能出现将一帧数据分多次中断读取，给后来的数据处理带来不便。</p>
<p>在<a title="Windows串口通讯" href="http://xinzero.com/serialport-communication-debug.html" target="_blank">Windows中是将串口</a>（UART）当做一个文件，直接对文件进行读写操作。一般是以一个线程去查询读取数据，基本可以保证整帧数据一次全部读出。也可以一次一个字符(8bit)来读。实际上是Windows的底层驱动将UART（串口）数据接收之后放到一个FIFO缓冲区中。显然在单片机或DSP等专用芯片中也应该用一个FIFO来缓存数据，然后在程序中读FIFO来处理数据。</p>
<p>发送也可以分为两种方式：一种是查询，另一种是中断。通常使用查询方式。</p>
<p>发送查询方式是通过CPU查询UART发送寄存器的状态，当为空的时候，发送数据；当不为空时，等待（适合用while循环判断）。</p>
<p>发送中断方式是将需要发送的数据存入一个缓冲区（FIFO），当发送寄存器为空，进入中断时，将数据发送。需要注意时，一旦开启发送中断，当没有数据发送时，就会一直跳入发送中断处理函数，所以在数据发送完之后一定要关闭发送中断使能。<br />
<h3>随机文章</h3>
<ul class="related_post">
<li><a href="http://xinzero.com/lack-of-money.html" title="Lack of Money">Lack of Money</a></li>
<li><a href="http://xinzero.com/be-feeling-unhappy.html" title="比较郁闷">比较郁闷</a></li>
<li><a href="http://xinzero.com/vc2005-debug-using-trace.html" title="VC2005中TRACE调试">VC2005中TRACE调试</a></li>
<li><a href="http://xinzero.com/ccs3-3-__strasgi-bug.html" title="CCS3.3关于__strasgi的bug">CCS3.3关于__strasgi的bug</a></li>
<li><a href="http://xinzero.com/hope-in-day.html" title="明天，希望">明天，希望</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://xinzero.com/uart-rx-and-tx.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
