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

📄 testsuite_2bravo__validation_2usart_2usart_8c-source.html

📁 avr32100.zip Embedded demo
💻 HTML
📖 第 1 页 / 共 4 页
字号:
<a name="l00388"></a>00388 <a name="l00389"></a>00389 <a name="l00390"></a>00390 <a name="l00391"></a>00391  <span class="comment">/*---------------------------------------------------------------------------+</span><a name="l00392"></a>00392 <span class="comment"> |                                                                            |</span><a name="l00393"></a>00393 <span class="comment"> |                         TRANSMIT/RECEIVE FUNCTIONS                         |</span><a name="l00394"></a>00394 <span class="comment"> |                                                                            |</span><a name="l00395"></a>00395 <span class="comment"> +---------------------------------------------------------------------------*/</span><a name="l00396"></a>00396 <a name="l00397"></a>00397 <span class="comment">/*</span><a name="l00398"></a>00398 <span class="comment"> * Description: While in RS485-mode, receviers only accept data addressed to them.</span><a name="l00399"></a>00399 <span class="comment"> *              A packet/char with the address tag set has to preceed any data.</span><a name="l00400"></a>00400 <span class="comment"> *              usart_send_address() is used to address a receiver. This receiver should read</span><a name="l00401"></a>00401 <span class="comment"> *              all the following data, until an address packet addresses someone else.</span><a name="l00402"></a>00402 <span class="comment"> * Arguments:   *usart:  Base address of the usart</span><a name="l00403"></a>00403 <span class="comment"> *              addr: the address of the target device</span><a name="l00404"></a>00404 <span class="comment"> * Returns:     USART_SUCCESS if the current mode is RS485</span><a name="l00405"></a>00405 <span class="comment"> *              USART_MODE_FAULT if called while in wrong mode</span><a name="l00406"></a>00406 <span class="comment"> */</span><a name="l00407"></a>00407 <a name="l00408"></a><a class="code" href="testsuite_2bravo__validation_2usart_2usart_8c.html#9f2429a7b9d05f100052dd791fb499df">00408</a> <span class="keywordtype">int</span> <a class="code" href="testsuite_2bravo__validation_2usart_2usart_8c.html#9f2429a7b9d05f100052dd791fb499df">usart_send_address</a>(<span class="keyword">volatile</span> avr32_usart_t * usart, <span class="keywordtype">int</span> address)<a name="l00409"></a>00409 {<a name="l00410"></a>00410         <span class="comment">/* Check if usart is in multidrop / RS485 mode */</span><a name="l00411"></a>00411         <span class="keywordflow">if</span> (<a class="code" href="testsuite_2bravo__validation_2usart_2usart_8c.html#cc362133839fdd80c3a8c484ccda0cc6">usart_mode_is_multidrop</a>(usart))<a name="l00412"></a>00412         {<a name="l00413"></a>00413                 <span class="comment">/* Prepare to send an address */</span><a name="l00414"></a>00414                 usart-&gt;cr |= (1&lt;&lt;AVR32_USART_CR_SENDA_OFFSET);<a name="l00415"></a>00415 <a name="l00416"></a>00416                 <span class="comment">/* Write the address to TX */</span><a name="l00417"></a>00417                 <a class="code" href="testsuite_2bravo__validation_2usart_2usart_8c.html#6742a3db6c2d4cf16295223932d33df5">usart_bw_write_char</a>(usart, address);<a name="l00418"></a>00418                 <span class="keywordflow">return</span> <a class="code" href="testsuite_2bravo__validation_2usart_2usart_8h.html#cbf846773f58a382f10f8daf94797059">USART_SUCCESS</a>;<a name="l00419"></a>00419         } <span class="keywordflow">else</span> {<a name="l00420"></a>00420                 <span class="keywordflow">return</span> <a class="code" href="testsuite_2bravo__validation_2pdc_2usart_8h.html#e4cc0f3559c44ca2c72a8bd3a340b480">USART_MODE_FAULT</a>;<a name="l00421"></a>00421         }<a name="l00422"></a>00422 }<a name="l00423"></a>00423 <a name="l00424"></a>00424 <span class="comment">/*</span><a name="l00425"></a>00425 <span class="comment"> * Description: Wait until the transmitter it ready (potentially forever),</span><a name="l00426"></a>00426 <span class="comment"> *              then transmit the given character</span><a name="l00427"></a>00427 <span class="comment"> * Arguments:   *usart:  Base address of the usart</span><a name="l00428"></a>00428 <span class="comment"> *              c:       The character (up to 9 bits) to transmit</span><a name="l00429"></a>00429 <span class="comment"> * Returns:     nothing</span><a name="l00430"></a>00430 <span class="comment"> */</span><a name="l00431"></a><a class="code" href="testsuite_2bravo__validation_2usart_2usart_8h.html#6742a3db6c2d4cf16295223932d33df5">00431</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="testsuite_2bravo__validation_2usart_2usart_8c.html#6742a3db6c2d4cf16295223932d33df5">usart_bw_write_char</a>(<span class="keyword">volatile</span> avr32_usart_t * usart, <span class="keywordtype">int</span> c)<a name="l00432"></a>00432 {<a name="l00433"></a>00433         <span class="keywordflow">while</span> (<a class="code" href="testsuite_2bravo__validation_2usart_2usart_8c.html#0c36f4b2ec5445212642ee7f94672805">usart_write_char</a>(usart, c) != <a class="code" href="testsuite_2bravo__validation_2usart_2usart_8h.html#cbf846773f58a382f10f8daf94797059">USART_SUCCESS</a>) {<a name="l00434"></a>00434         }<a name="l00435"></a>00435 <a name="l00436"></a>00436         <span class="keywordflow">return</span>;<a name="l00437"></a>00437 }<a name="l00438"></a>00438 <a name="l00439"></a><a class="code" href="testsuite_2bravo__validation_2usart_2usart_8h.html#0c36f4b2ec5445212642ee7f94672805">00439</a> <span class="keywordtype">int</span> <a class="code" href="testsuite_2bravo__validation_2usart_2usart_8c.html#0c36f4b2ec5445212642ee7f94672805">usart_write_char</a>(<span class="keyword">volatile</span> avr32_usart_t * usart, <span class="keywordtype">int</span> c)<a name="l00440"></a>00440 {<a name="l00441"></a>00441 <a name="l00442"></a>00442         <span class="keywordflow">if</span> ((usart-&gt;csr &amp; (1&lt;&lt;AVR32_USART_CSR_TXRDY_OFFSET)) != 0) {<a name="l00443"></a>00443                 usart-&gt;thr = c;<a name="l00444"></a>00444                 <span class="keywordflow">return</span> <a class="code" href="testsuite_2bravo__validation_2usart_2usart_8h.html#cbf846773f58a382f10f8daf94797059">USART_SUCCESS</a>;<a name="l00445"></a>00445         }<a name="l00446"></a>00446         <span class="keywordflow">else</span><a name="l00447"></a>00447                 <span class="keywordflow">return</span> <a class="code" href="testsuite_2bravo__validation_2pdc_2usart_8h.html#481df5bfed5fec78ff5697b335ab5947">USART_TX_BUSY</a>;<a name="l00448"></a>00448 }<a name="l00449"></a>00449 <a name="l00450"></a>00450 <a name="l00451"></a><a class="code" href="testsuite_2bravo__validation_2usart_2usart_8h.html#b73fc2f42bd6fe66c03d598b0158436d">00451</a> <span class="keywordtype">int</span> <a class="code" href="testsuite_2bravo__validation_2usart_2usart_8c.html#b73fc2f42bd6fe66c03d598b0158436d">usart_read_char</a>(<span class="keyword">volatile</span> avr32_usart_t * usart, <span class="keywordtype">int</span> * c)<a name="l00452"></a>00452 {<a name="l00453"></a>00453         <span class="comment">/* Check for errors; Frame, parity and overrun In RS485 mode a parity</span><a name="l00454"></a>00454 <span class="comment">                error would mean that we received an address char */</span><a name="l00455"></a>00455         <span class="keywordflow">if</span> (usart-&gt;csr &amp;<a name="l00456"></a>00456                         ((1 &lt;&lt; AVR32_USART_CSR_OVRE_OFFSET) |<a name="l00457"></a>00457                         (1 &lt;&lt; AVR32_USART_CSR_FRAME_OFFSET) |<a name="l00458"></a>00458                         (1 &lt;&lt; AVR32_USART_CSR_PARE_OFFSET))) {<a name="l00459"></a>00459                 <span class="keywordflow">return</span> <a class="code" href="testsuite_2bravo__validation_2pdc_2usart_8h.html#ffa1a7abf4e6ce54c0b64cc0826f8b4d">USART_RX_ERROR</a>;<a name="l00460"></a>00460         }<a name="l00461"></a>00461         <span class="comment">/* No error; if we really did receive a char, read it and return SUCCESS */</span><a name="l00462"></a>00462         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((usart-&gt;csr &amp; (1&lt;&lt;AVR32_USART_CSR_RXRDY_OFFSET)) != 0) {<a name="l00463"></a>00463                 *c = (<span class="keywordtype">unsigned</span> short)usart-&gt;rhr;<a name="l00464"></a>00464                 <span class="keywordflow">return</span> <a class="code" href="testsuite_2bravo__validation_2usart_2usart_8h.html#cbf846773f58a382f10f8daf94797059">USART_SUCCESS</a>;<a name="l00465"></a>00465         } <span class="keywordflow">else</span> {<a name="l00466"></a>00466                 <span class="keywordflow">return</span> <a class="code" href="testsuite_2bravo__validation_2pdc_2usart_8h.html#deb9432170d2d09a4ffbb098a1b4335e">USART_RX_EMPTY</a>;<a name="l00467"></a>00467         }<a name="l00468"></a>00468 } <span class="comment">/* usart_read */</span><a name="l00469"></a>00469 <a name="l00470"></a>00470 <a name="l00471"></a><a class="code" href="testsuite_2bravo__validation_2usart_2usart_8h.html#a751e180b091943b684b48c581aaef3e">00471</a> <span class="keywordtype">int</span> <a class="code" href="testsuite_2bravo__validation_2usart_2usart_8c.html#a751e180b091943b684b48c581aaef3e">usart_getchar</a>(<span class="keyword">volatile</span> avr32_usart_t * usart)<a name="l00472"></a>00472 {<a name="l00473"></a>00473         <span class="keywordtype">int</span> c, ret;<a name="l00474"></a>00474         <span class="keywordflow">while</span> (((ret = <a class="code" href="testsuite_2bravo__validation_2usart_2usart_8c.html#b73fc2f42bd6fe66c03d598b0158436d">usart_read_char</a>(usart, &amp;c)) == <a class="code" href="testsuite_2bravo__validation_2pdc_2usart_8h.html#deb9432170d2d09a4ffbb098a1b4335e">USART_RX_EMPTY</a>)) {<a name="l00475"></a>00475         }<a name="l00476"></a>00476 <a name="l00477"></a>00477         <span class="keywordflow">if</span> (ret == <a class="code" href="testsuite_2bravo__validation_2pdc_2usart_8h.html#ffa1a7abf4e6ce54c0b64cc0826f8b4d">USART_RX_ERROR</a>)<a name="l00478"></a>00478                 <span class="keywordflow">return</span> -1;<a name="l00479"></a>00479         <span class="keywordflow">else</span><a name="l00480"></a>00480                 <span class="keywordflow">return</span> c;<a name="l00481"></a>00481 }<a name="l00482"></a>00482 <a name="l00483"></a>00483 <a name="l00484"></a><a class="code" href="testsuite_2bravo__validation_2usart_2usart_8c.html#2ff96c7ceba22b5663bee08da4633ed9">00484</a> <span class="keywordtype">int</span> <a class="code" href="testsuite_2bravo__validation_2pdc_2usart_8c.html#d8d5a1b7705f01b3ace3de0948930600">usart_putchar</a>(<span class="keyword">volatile</span> avr32_usart_t * usart, <span class="keywordtype">int</span> c)<a name="l00485"></a>00485 {<a name="l00486"></a>00486         <span class="keywordtype">int</span> timeout = <a class="code" href="testsuite_2bravo__validation_2pdc_2usart_8h.html#c8dc7a35914ec78bd7382630499bd856">USART_DEFAULT_TIMEOUT</a>;<a name="l00487"></a>00487 <a name="l00488"></a>00488         <span class="keywordflow">if</span> (c == <span class="charliteral">'\n'</span>){<a name="l00489"></a>00489                 <span class="keywordflow">while</span> ((<a class="code" href="testsuite_2bravo__validation_2usart_2usart_8c.html#0c36f4b2ec5445212642ee7f94672805">usart_write_char</a>(usart, <span class="charliteral">'\r'</span>) != <a class="code" href="testsuite_2bravo__validation_2usart_2usart_8h.html#cbf846773f58a382f10f8daf94797059">USART_SUCCESS</a>) &amp;&amp; --timeout)<a name="l00490"></a>00490                         ;<a name="l00491"></a>00491                 <span class="keywordflow">if</span> (timeout == 0)<a name="l00492"></a>00492                         <span class="keywordflow">return</span> -1;<a name="l00493"></a>00493                 timeout = <a class="code" href="testsuite_2bravo__validation_2pdc_2usart_8h.html#c8dc7a35914ec78bd7382630499bd856">USART_DEFAULT_TIMEOUT</a>;<a name="l00494"></a>00494         }<a name="l00495"></a>00495 <a name="l00496"></a>00496         <span class="keywordflow">while</span> ((<a class="code" href="testsuite_2bravo__validation_2usart_2usart_8c.html#0c36f4b2ec5445212642ee7f94672805">usart_write_char</a>(usart, c) != <a class="code" href="testsuite_2bravo__validation_2usart_2usart_8h.html#cbf846773f58a382f10f8daf94797059">USART_SUCCESS</a>) &amp;&amp; --timeout)<a name="l00497"></a>00497                 ;<a name="l00498"></a>00498         <span class="keywordflow">if</span> (timeout == 0)<a name="l00499"></a>00499                 <span class="keywordflow">return</span> -1;<a name="l00500"></a>00500         <span class="keywordflow">else</span><a name="l00501"></a>00501                 <span class="keywordflow">return</span> 0;<a name="l00502"></a>00502 }<a name="l00503"></a>00503 <a name="l00504"></a>00504 <a name="l00505"></a>00505 <span class="comment">/* Write one character string to the usart */</span><a name="l00506"></a><a class="code" href="testsuite_2bravo__validation_2usart_2usart_8c.html#28b90f556104f041e783662329b64a38">00506</a> <span class="keywordtype">int</span> <a class="code" href="testsuite_2bravo__validation_2usart_2usart_8c.html#28b90f556104f041e783662329b64a38">usart_write_line</a>(<span class="keyword">volatile</span> avr32_usart_t * usart, <span class="keywordtype">char</span> * <a class="code" href="pdc__example_8c.html#ed1cfb225a5fb77461e7972691e68a72">string</a>)<a name="l00507"></a>00507 {<a name="l00508"></a>00508         <span class="keywordflow">while</span> (*string != <span class="charliteral">'\0'</span>)<a name="l00509"></a>00509                 <a class="code" href="testsuite_2bravo__validation_2pdc_2usart_8c.html#d8d5a1b7705f01b3ace3de0948930600">usart_putchar</a>(usart, *string++);<a name="l00510"></a>00510         <span class="keywordflow">return</span> 0;<a name="l00511"></a>00511 }</pre></div><hr size="1"><address style="align: right;"><small>Generated on Thu May 10 14:14:48 2007 for AVR321000 Communication with the AVR32 USART by&nbsp;<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address></body></html>

⌨️ 快捷键说明

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