📄 uart2_8c-source.html
字号:
00186 u08 c;00187 <span class="keywordflow">if</span>(<a class="code" href="group__uart.html#ga8">uartReceiveByte</a>(0,&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,&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>(&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>(&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>(&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>(&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 < uartTxBuffer[nUart].<a class="code" href="structstruct__cBuffer.html#o1">size</a>) && 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 < 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>(&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>(&uartTxBuffer[1]) );00300 <span class="keywordflow">else</span>00301 outb(UDR0, <a class="code" href="group__buffer.html#ga2">bufferGetFromFront</a>(&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>(&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 <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 + -