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

📄 uart2_8c-source.html

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