📄 uart2_8c-source.html
字号:
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,&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,&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>(&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>(&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>(&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>(&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 < uartTxBuffer[nUart].<a class="code" href="structstruct__cBuffer.html#o1">size</a>) && 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 < 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>(&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>(&uartTxBuffer[1]) );00308 <span class="keywordflow">else</span>00309 outb(UDR0, <a class="code" href="group__buffer.html#ga2">bufferGetFromFront</a>(&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>(&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 <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 + -