⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart2_8c-source.html

📁 avr cpu 库源代码 对avr单片机编程很有帮助
💻 HTML
📖 第 1 页 / 共 2 页
字号:
00190 <a name="l00191"></a><a class="code" href="group__uart2.html#ga12">00191</a> <span class="keywordtype">int</span> <a class="code" href="group__uart2.html#ga12">uart0GetByte</a>(<span class="keywordtype">void</span>)00192 {00193     <span class="comment">// get single byte from receive buffer (if available)</span>00194     u08 c;00195     <span class="keywordflow">if</span>(<a class="code" href="group__uart.html#ga8">uartReceiveByte</a>(0,&amp;c))00196         <span class="keywordflow">return</span> c;00197     <span class="keywordflow">else</span>00198         <span class="keywordflow">return</span> -1;00199 }00200 00201 <span class="keywordtype">int</span> uart1GetByte(<span class="keywordtype">void</span>)00202 {00203     <span class="comment">// get single byte from receive buffer (if available)</span>00204     u08 c;00205     <span class="keywordflow">if</span>(<a class="code" href="group__uart.html#ga8">uartReceiveByte</a>(1,&amp;c))00206         <span class="keywordflow">return</span> c;00207     <span class="keywordflow">else</span>00208         <span class="keywordflow">return</span> -1;00209 }00210 00211 <a name="l00212"></a><a class="code" href="group__uart2.html#ga14">00212</a> u08 <a class="code" href="group__uart.html#ga8">uartReceiveByte</a>(u08 nUart, u08* rxData)00213 {00214     <span class="comment">// make sure we have a receive buffer</span>00215     <span class="keywordflow">if</span>(uartRxBuffer[nUart].<a class="code" href="structstruct__cBuffer.html#o1">size</a>)00216     {00217         <span class="comment">// make sure we have data</span>00218         <span class="keywordflow">if</span>(uartRxBuffer[nUart].<a class="code" href="structstruct__cBuffer.html#o2">datalength</a>)00219         {00220             <span class="comment">// get byte from beginning of buffer</span>00221             *rxData = <a class="code" href="group__buffer.html#ga2">bufferGetFromFront</a>(&amp;uartRxBuffer[nUart]);00222             <span class="keywordflow">return</span> TRUE;00223         }00224         <span class="keywordflow">else</span>00225             <span class="keywordflow">return</span> FALSE;           <span class="comment">// no data</span>00226     }00227     <span class="keywordflow">else</span>00228         <span class="keywordflow">return</span> FALSE;               <span class="comment">// no buffer</span>00229 }00230 <a name="l00231"></a><a class="code" href="group__uart2.html#ga16">00231</a> <span class="keywordtype">void</span> <a class="code" href="group__uart.html#ga10">uartFlushReceiveBuffer</a>(u08 nUart)00232 {00233     <span class="comment">// flush all data from receive buffer</span>00234     <a class="code" href="group__buffer.html#ga7">bufferFlush</a>(&amp;uartRxBuffer[nUart]);00235 }00236 <a name="l00237"></a><a class="code" href="group__uart2.html#ga15">00237</a> u08 <a class="code" href="group__uart.html#ga9">uartReceiveBufferIsEmpty</a>(u08 nUart)00238 {00239     <span class="keywordflow">return</span> (uartRxBuffer[nUart].datalength == 0);00240 }00241 <a name="l00242"></a><a class="code" href="group__uart2.html#ga17">00242</a> <span class="keywordtype">void</span> <a class="code" href="group__uart.html#ga11">uartAddToTxBuffer</a>(u08 nUart, u08 data)00243 {00244     <span class="comment">// add data byte to the end of the tx buffer</span>00245     <a class="code" href="group__buffer.html#ga5">bufferAddToEnd</a>(&amp;uartTxBuffer[nUart], data);00246 }00247 <a name="l00248"></a><a class="code" href="group__uart2.html#ga18">00248</a> <span class="keywordtype">void</span> <a class="code" href="group__uart2.html#ga18">uart0AddToTxBuffer</a>(u08 data)00249 {00250     <a class="code" href="group__uart.html#ga11">uartAddToTxBuffer</a>(0,data);00251 }00252 00253 <span class="keywordtype">void</span> uart1AddToTxBuffer(u08 data)00254 {00255     <a class="code" href="group__uart.html#ga11">uartAddToTxBuffer</a>(1,data);00256 }00257 <a name="l00258"></a><a class="code" href="group__uart2.html#ga20">00258</a> <span class="keywordtype">void</span> <a class="code" href="group__uart.html#ga12">uartSendTxBuffer</a>(u08 nUart)00259 {00260     <span class="comment">// turn on buffered transmit</span>00261     <a class="code" href="uart_8c.html#a1">uartBufferedTx</a>[nUart] = TRUE;00262     <span class="comment">// send the first byte to get things going by interrupts</span>00263     <a class="code" href="group__uart.html#ga6">uartSendByte</a>(nUart, <a class="code" href="group__buffer.html#ga2">bufferGetFromFront</a>(&amp;uartTxBuffer[nUart]));00264 }00265 <a name="l00266"></a><a class="code" href="group__uart2.html#ga21">00266</a> u08 <a class="code" href="group__uart.html#ga13">uartSendBuffer</a>(u08 nUart, <span class="keywordtype">char</span> *buffer, u16 nBytes)00267 {00268     <span class="keyword">register</span> u08 first;00269     <span class="keyword">register</span> u16 i;00270 00271     <span class="comment">// check if there's space (and that we have any bytes to send at all)</span>00272     <span class="keywordflow">if</span>((uartTxBuffer[nUart].<a class="code" href="structstruct__cBuffer.html#o2">datalength</a> + nBytes &lt; uartTxBuffer[nUart].<a class="code" href="structstruct__cBuffer.html#o1">size</a>) &amp;&amp; nBytes)00273     {00274         <span class="comment">// grab first character</span>00275         first = *buffer++;00276         <span class="comment">// copy user buffer to uart transmit buffer</span>00277         <span class="keywordflow">for</span>(i = 0; i &lt; nBytes-1; i++)00278         {00279             <span class="comment">// put data bytes at end of buffer</span>00280             <a class="code" href="group__buffer.html#ga5">bufferAddToEnd</a>(&amp;uartTxBuffer[nUart], *buffer++);00281         }00282 00283         <span class="comment">// send the first byte to get things going by interrupts</span>00284         <a class="code" href="uart_8c.html#a1">uartBufferedTx</a>[nUart] = TRUE;00285         <a class="code" href="group__uart.html#ga6">uartSendByte</a>(nUart, first);00286         <span class="comment">// return success</span>00287         <span class="keywordflow">return</span> TRUE;00288     }00289     <span class="keywordflow">else</span>00290     {00291         <span class="comment">// return failure</span>00292         <span class="keywordflow">return</span> FALSE;00293     }00294 }00295 00296 <span class="comment">// UART Transmit Complete Interrupt Function</span><a name="l00297"></a><a class="code" href="group__uart2.html#ga22">00297</a> <span class="keywordtype">void</span> <a class="code" href="group__uart2.html#ga22">uartTransmitService</a>(u08 nUart)00298 {00299     <span class="comment">// check if buffered tx is enabled</span>00300     <span class="keywordflow">if</span>(<a class="code" href="uart_8c.html#a1">uartBufferedTx</a>[nUart])00301     {00302         <span class="comment">// check if there's data left in the buffer</span>00303         <span class="keywordflow">if</span>(uartTxBuffer[nUart].<a class="code" href="structstruct__cBuffer.html#o2">datalength</a>)00304         {00305             <span class="comment">// send byte from top of buffer</span>00306             <span class="keywordflow">if</span>(nUart)00307                 outb(UDR1,  <a class="code" href="group__buffer.html#ga2">bufferGetFromFront</a>(&amp;uartTxBuffer[1]) );00308             <span class="keywordflow">else</span>00309                 outb(UDR0,  <a class="code" href="group__buffer.html#ga2">bufferGetFromFront</a>(&amp;uartTxBuffer[0]) );00310         }00311         <span class="keywordflow">else</span>00312         {00313             <span class="comment">// no data left</span>00314             <a class="code" href="uart_8c.html#a1">uartBufferedTx</a>[nUart] = FALSE;00315             <span class="comment">// return to ready state</span>00316             <a class="code" href="uart_8c.html#a0">uartReadyTx</a>[nUart] = TRUE;00317         }00318     }00319     <span class="keywordflow">else</span>00320     {00321         <span class="comment">// we're using single-byte tx mode</span>00322         <span class="comment">// indicate transmit complete, back to ready</span>00323         <a class="code" href="uart_8c.html#a0">uartReadyTx</a>[nUart] = TRUE;00324     }00325 }00326 00327 <span class="comment">// UART Receive Complete Interrupt Function</span>00328 <span class="keywordtype">void</span> uartReceiveService(u08 nUart)00329 {00330     u08 c;00331     <span class="comment">// get received char</span>00332     <span class="keywordflow">if</span>(nUart)00333         c = inb(UDR1);00334     <span class="keywordflow">else</span>00335         c = inb(UDR0);00336 00337     <span class="comment">// if there's a user function to handle this receive event</span>00338     <span class="keywordflow">if</span>(UartRxFunc[nUart])00339     {00340         <span class="comment">// call it and pass the received data</span>00341         UartRxFunc[nUart](c);00342     }00343     <span class="keywordflow">else</span>00344     {00345         <span class="comment">// otherwise do default processing</span>00346         <span class="comment">// put received char in buffer</span>00347         <span class="comment">// check if there's space</span>00348         <span class="keywordflow">if</span>( !<a class="code" href="group__buffer.html#ga5">bufferAddToEnd</a>(&amp;uartRxBuffer[nUart], c) )00349         {00350             <span class="comment">// no space in buffer</span>00351             <span class="comment">// count overflow</span>00352             <a class="code" href="uart_8c.html#a4">uartRxOverflow</a>[nUart]++;00353         }00354     }00355 }00356 00357 <a class="code" href="group__uart.html#ga17">UART_INTERRUPT_HANDLER</a>(SIG_UART0_TRANS)      00358 {00359     <span class="comment">// service UART0 transmit interrupt</span>00360     <a class="code" href="group__uart2.html#ga22">uartTransmitService</a>(0);00361 }00362 00363 <a class="code" href="group__uart.html#ga17">UART_INTERRUPT_HANDLER</a>(SIG_UART1_TRANS)      00364 {00365     <span class="comment">// service UART1 transmit interrupt</span>00366     <a class="code" href="group__uart2.html#ga22">uartTransmitService</a>(1);00367 }00368 00369 <a class="code" href="group__uart.html#ga17">UART_INTERRUPT_HANDLER</a>(SIG_UART0_RECV)      00370 {00371     <span class="comment">// service UART0 receive interrupt</span>00372     uartReceiveService(0);00373 }00374 00375 <a class="code" href="group__uart.html#ga17">UART_INTERRUPT_HANDLER</a>(SIG_UART1_RECV)      00376 {00377     <span class="comment">// service UART1 receive interrupt</span>00378     uartReceiveService(1);00379 }</pre></div><hr size="1"><address style="align: right;"><small>Generated on Sun Oct 29 03:41:08 2006 for Procyon AVRlib by&nbsp;<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -