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

📄 testsuite_2bravo__validation_2usart_2usart_8c-source.html

📁 avr32100.zip Embedded demo
💻 HTML
📖 第 1 页 / 共 4 页
字号:
<a name="l00255"></a>00255         <span class="keywordtype">int</span> retval;<a name="l00256"></a>00256 <a name="l00257"></a>00257         <span class="comment">/* First: Setup standard RS323 */</span><a name="l00258"></a>00258         <span class="keywordflow">if</span> ((retval = <a class="code" href="testsuite_2bravo__validation_2usart_2usart_8c.html#093c5ad113e1ab43603c0d815ad8dc54">usart_init_rs232</a>(usart, opt, cpu_hz)) != <a class="code" href="testsuite_2bravo__validation_2usart_2usart_8h.html#cbf846773f58a382f10f8daf94797059">USART_SUCCESS</a>)<a name="l00259"></a>00259                 <span class="keywordflow">return</span> retval;<a name="l00260"></a>00260 <a name="l00261"></a>00261 <span class="comment">//      if (opt-&gt;paritytype &lt; 6)</span><a name="l00262"></a>00262 <span class="comment">//              /* RS485 need multidrop parity (6|7) */</span><a name="l00263"></a>00263 <span class="comment">//              return USART_MODE_FAULT;</span><a name="l00264"></a>00264 <a name="l00265"></a>00265         <span class="comment">/* Clear previous mode */</span><a name="l00266"></a>00266         usart-&gt;mr &amp;= ~(0xf &lt;&lt; AVR32_USART_MR_USART_MODE_OFFSET);<a name="l00267"></a>00267         <span class="comment">/* Set Modem mode */</span><a name="l00268"></a>00268         usart-&gt;mr |= (<a class="code" href="testsuite_2bravo__validation_2pdc_2usart_8h.html#a2946a63275da85d3b578044a88bbd7d">USART_MODE_RS485</a> &lt;&lt; AVR32_USART_MR_USART_MODE_OFFSET);<a name="l00269"></a>00269         <span class="keywordflow">return</span> <a class="code" href="testsuite_2bravo__validation_2usart_2usart_8h.html#cbf846773f58a382f10f8daf94797059">USART_SUCCESS</a>;<a name="l00270"></a>00270 }<a name="l00271"></a>00271 <a name="l00272"></a>00272 <a name="l00273"></a>00273 <span class="comment">/*</span><a name="l00274"></a>00274 <span class="comment"> * Description: Setup the usart to use ISO7816 T=0 or T=1 smartcard protocol</span><a name="l00275"></a>00275 <span class="comment"> * Arguments:   *usart: Base address of the usart</span><a name="l00276"></a>00276 <span class="comment"> *              *opt:   Options needed to set up ISO7816 (see iso7816_options_t)</span><a name="l00277"></a>00277 <span class="comment"> *              t:      Which ISO7816 mode to use (T=0 or T=1)</span><a name="l00278"></a>00278 <span class="comment"> * Returns:     USART_SUCCESS or USART_INVALID_INPUT</span><a name="l00279"></a>00279 <span class="comment"> */</span><a name="l00280"></a><a class="code" href="testsuite_2bravo__validation_2usart_2usart_8c.html#ded86d5a38f2f0093c3b923ceba13ced">00280</a> <span class="keywordtype">int</span> <a class="code" href="testsuite_2bravo__validation_2usart_2usart_8c.html#ded86d5a38f2f0093c3b923ceba13ced">usart_init_iso7816</a>(<span class="keyword">volatile</span> avr32_usart_t * usart, <span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structiso7816__options__t.html">iso7816_options_t</a> * opt, <span class="keywordtype">int</span> t, <span class="keyword">const</span> <span class="keywordtype">long</span> cpu_hz)<a name="l00281"></a>00281 {<a name="l00282"></a>00282         <span class="keywordtype">int</span> retval;<a name="l00283"></a>00283 <a name="l00284"></a>00284         <span class="comment">/* Reset the usart and shutdown RX and TX */</span><a name="l00285"></a>00285         <a class="code" href="testsuite_2bravo__validation_2pdc_2usart_8c.html#31cf4d67fd204fb4684fff9d7994cb4c">usart_reset</a>(usart);<a name="l00286"></a>00286 <a name="l00287"></a>00287         <span class="keywordflow">if</span> (opt == 0)<a name="l00288"></a>00288                 <span class="comment">/* Null pointer */</span><a name="l00289"></a>00289                 <span class="keywordflow">return</span> <a class="code" href="testsuite_2bravo__validation_2usart_2usart_8h.html#50b4e9378f434da8823badca3af2f15d">USART_INVALID_INPUT</a>;<a name="l00290"></a>00290 <a name="l00291"></a>00291         <span class="comment">/* Don't care about charlength, parity or channelmode; All these fields</span><a name="l00292"></a>00292 <span class="comment">           are ignored in iso7816 mode. 8bit characters and even parity is always</span><a name="l00293"></a>00293 <span class="comment">           used */</span><a name="l00294"></a>00294 <a name="l00295"></a>00295         <span class="keywordflow">if</span> (t == 0)<a name="l00296"></a>00296         {<a name="l00297"></a>00297                 <span class="comment">/* Set USART mode to ISO7816, T=0 */</span><a name="l00298"></a>00298                 <span class="comment">/* The T=0 protocol always use 2 stop bits */</span><a name="l00299"></a>00299                 usart-&gt;mr = (<a class="code" href="testsuite_2bravo__validation_2pdc_2usart_8h.html#af44f2a4560d84b228624189aad26d5e">USART_MODE_ISO7816_T0</a> &lt;&lt; AVR32_USART_MR_USART_MODE_OFFSET) |<a name="l00300"></a>00300                             (2 &lt;&lt; AVR32_USART_MR_NBSTOP_OFFSET) |<a name="l00301"></a>00301                             (opt-&gt;<a class="code" href="structiso7816__options__t.html#96af893cd6275fd35a063a235f489a82">bit_order</a> &lt;&lt; AVR32_USART_MR_MSBF_OFFSET); <span class="comment">/* Allow MSBF in T=0 */</span><a name="l00302"></a>00302         }<a name="l00303"></a>00303         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (t == 1)<a name="l00304"></a>00304         {<a name="l00305"></a>00305                 <span class="comment">/* Only LSB first in the T=1 protocol */</span><a name="l00306"></a>00306                 <span class="keywordflow">if</span> (opt-&gt;<a class="code" href="structiso7816__options__t.html#96af893cd6275fd35a063a235f489a82">bit_order</a> != 0)<a name="l00307"></a>00307                         <span class="keywordflow">return</span> <a class="code" href="testsuite_2bravo__validation_2usart_2usart_8h.html#50b4e9378f434da8823badca3af2f15d">USART_INVALID_INPUT</a>;<a name="l00308"></a>00308                 <span class="comment">/* max_iterations field is only used in T=0 mode */</span><a name="l00309"></a>00309                 <span class="keywordflow">if</span> (opt-&gt;<a class="code" href="structiso7816__options__t.html#4c74df529ed76d2962f54cd1f0f5027f">max_iterations</a> != 0)<a name="l00310"></a>00310                         <span class="keywordflow">return</span> <a class="code" href="testsuite_2bravo__validation_2usart_2usart_8h.html#50b4e9378f434da8823badca3af2f15d">USART_INVALID_INPUT</a>;<a name="l00311"></a>00311                 <span class="comment">/* Set USART mode to ISO7816, T=1 */</span><a name="l00312"></a>00312                 usart-&gt;mr = (<a class="code" href="testsuite_2bravo__validation_2pdc_2usart_8h.html#20cc4cd0b851232cd6b3680713792a44">USART_MODE_ISO7816_T1</a> &lt;&lt; AVR32_USART_MR_USART_MODE_OFFSET);<a name="l00313"></a>00313                 <span class="comment">/* The T=1 protocol always use 1 stop bit (no change needed) */</span><a name="l00314"></a>00314         }<a name="l00315"></a>00315         <span class="keywordflow">else</span><a name="l00316"></a>00316                 <span class="keywordflow">return</span> <a class="code" href="testsuite_2bravo__validation_2usart_2usart_8h.html#50b4e9378f434da8823badca3af2f15d">USART_INVALID_INPUT</a>;<a name="l00317"></a>00317 <a name="l00318"></a>00318         <span class="keywordflow">if</span> ((retval = <a class="code" href="testsuite_2bravo__validation_2pdc_2usart_8c.html#38c10272f6d0b8e873a213dd39d5d1cf">usart_set_baudrate</a>(usart, opt-&gt;<a class="code" href="structiso7816__options__t.html#6670bdcae159decd3ff5c00f6f3f4fcc">iso7816_hz</a>, cpu_hz)) != <a class="code" href="testsuite_2bravo__validation_2usart_2usart_8h.html#cbf846773f58a382f10f8daf94797059">USART_SUCCESS</a>)<a name="l00319"></a>00319                 <span class="keywordflow">return</span> retval;<a name="l00320"></a>00320 <a name="l00321"></a>00321         <span class="comment">/* Set FIDI register: bit rate = selected clock/FI_DI_ratio/16 */</span><a name="l00322"></a>00322         usart-&gt;fidi = opt-&gt;<a class="code" href="structiso7816__options__t.html#bf0d2900a6f8f97c0163176f2600551c">fidi_ratio</a>;<a name="l00323"></a>00323         <span class="comment">/* Set ISO7816 spesific options in the MODE register */</span><a name="l00324"></a>00324         usart-&gt;mr |= (opt-&gt;<a class="code" href="structiso7816__options__t.html#128f4d404bb0369177a591eb8a0a9269">inhibit_nack</a> &lt;&lt; AVR32_USART_MR_INACK_OFFSET) |<a name="l00325"></a>00325                      (opt-&gt;<a class="code" href="structiso7816__options__t.html#b8d335e18629f4fcf625e1a7e23e35be">dis_suc_nack</a> &lt;&lt; AVR32_USART_MR_DSNACK_OFFSET) |<a name="l00326"></a>00326                      (opt-&gt;<a class="code" href="structiso7816__options__t.html#4c74df529ed76d2962f54cd1f0f5027f">max_iterations</a> &lt;&lt; AVR32_USART_MR_MAX_ITERATION_OFFSET) |<a name="l00327"></a>00327                      (1 &lt;&lt; AVR32_USART_MR_CLKO_OFFSET); <span class="comment">/* Enable clock output */</span><a name="l00328"></a>00328 <a name="l00329"></a>00329         <span class="comment">/* Setup complete; enable input */</span><a name="l00330"></a>00330         <span class="comment">/* Leave TX disabled for now */</span><a name="l00331"></a>00331         usart-&gt;cr |= (1&lt;&lt;AVR32_USART_CR_RXEN_OFFSET);<a name="l00332"></a>00332 <a name="l00333"></a>00333         <span class="keywordflow">return</span> <a class="code" href="testsuite_2bravo__validation_2usart_2usart_8h.html#cbf846773f58a382f10f8daf94797059">USART_SUCCESS</a>;<a name="l00334"></a>00334 }<a name="l00335"></a>00335 <a name="l00336"></a>00336 <a name="l00337"></a>00337 <a name="l00338"></a>00338 <a name="l00339"></a>00339  <span class="comment">/*---------------------------------------------------------------------------+</span><a name="l00340"></a>00340 <span class="comment"> |                                                                            |</span><a name="l00341"></a>00341 <span class="comment"> |                     READ AND RESET ERROR STATUS BITS                       |</span><a name="l00342"></a>00342 <span class="comment"> |                                                                            |</span><a name="l00343"></a>00343 <span class="comment"> +---------------------------------------------------------------------------*/</span><a name="l00344"></a>00344 <a name="l00345"></a>00345 <span class="comment">/*</span><a name="l00346"></a>00346 <span class="comment"> * Description: This function resets the status bits indicating that a parity error,</span><a name="l00347"></a>00347 <span class="comment"> *              framing error or overrun has occured. The rxbreak bit, indicating</span><a name="l00348"></a>00348 <span class="comment"> *              a start/end of break condition on the rx-line, is also reset.</span><a name="l00349"></a>00349 <span class="comment"> * Arguments:   *usart:  Base address of the usart</span><a name="l00350"></a>00350 <span class="comment"> * Returns:     nothing</span><a name="l00351"></a>00351 <span class="comment"> */</span><a name="l00352"></a><a class="code" href="testsuite_2bravo__validation_2usart_2usart_8h.html#526363b4ce2f098ac507b7461b9adf0c">00352</a> <span class="keywordtype">void</span> <a class="code" href="testsuite_2bravo__validation_2usart_2usart_8c.html#526363b4ce2f098ac507b7461b9adf0c">usart_reset_status</a>(<span class="keyword">volatile</span> avr32_usart_t * usart)<a name="l00353"></a>00353 {<a name="l00354"></a>00354         usart-&gt;cr |= (1&lt;&lt;AVR32_USART_CR_RSTSTA_OFFSET);<a name="l00355"></a>00355 }<a name="l00356"></a>00356 <a name="l00357"></a>00357 <span class="comment">/*</span><a name="l00358"></a>00358 <span class="comment"> * Description: Checks if a parity error has occured since last status reset</span><a name="l00359"></a>00359 <span class="comment"> * Arguments:   *usart:  Base address of the usart</span><a name="l00360"></a>00360 <span class="comment"> * Returns:     1 if a parity error has been detected, otherwise 0</span><a name="l00361"></a>00361 <span class="comment"> */</span><a name="l00362"></a><a class="code" href="testsuite_2bravo__validation_2usart_2usart_8c.html#f8545b625339cd0c1f27dd467f9ff673">00362</a> <span class="keywordtype">int</span> <a class="code" href="testsuite_2bravo__validation_2usart_2usart_8c.html#f8545b625339cd0c1f27dd467f9ff673">usart_parity_error</a>(<span class="keyword">volatile</span> avr32_usart_t * usart)<a name="l00363"></a>00363 {<a name="l00364"></a>00364         <span class="keywordflow">return</span> ((usart-&gt;csr &amp; (1&lt;&lt;AVR32_USART_CSR_PARE_OFFSET)) != 0);<a name="l00365"></a>00365 }<a name="l00366"></a>00366 <a name="l00367"></a>00367 <a name="l00368"></a>00368 <span class="comment">/*</span><a name="l00369"></a>00369 <span class="comment"> * Description: Checks if a framing error has occured since last status reset</span><a name="l00370"></a>00370 <span class="comment"> * Arguments:   *usart:  Base address of the usart</span><a name="l00371"></a>00371 <span class="comment"> * Returns:     1 if a framing error has been detected, otherwise 0</span><a name="l00372"></a>00372 <span class="comment"> */</span><a name="l00373"></a><a class="code" href="testsuite_2bravo__validation_2usart_2usart_8c.html#9b41b7d6439778a70b3c7bae5495190e">00373</a> <span class="keywordtype">int</span> <a class="code" href="testsuite_2bravo__validation_2usart_2usart_8c.html#9b41b7d6439778a70b3c7bae5495190e">usart_framing_error</a>(<span class="keyword">volatile</span> avr32_usart_t * usart)<a name="l00374"></a>00374 {<a name="l00375"></a>00375         <span class="keywordflow">return</span> ((usart-&gt;csr &amp; (1&lt;&lt;AVR32_USART_CSR_FRAME_OFFSET)) != 0);<a name="l00376"></a>00376 }<a name="l00377"></a>00377 <a name="l00378"></a>00378 <a name="l00379"></a>00379 <span class="comment">/*</span><a name="l00380"></a>00380 <span class="comment"> * Description: Checks if a overrun error has occured since last status reset</span><a name="l00381"></a>00381 <span class="comment"> * Arguments:   *usart:  Base address of the usart</span><a name="l00382"></a>00382 <span class="comment"> * Returns:     1 if a overrun error has been detected, otherwise 0</span><a name="l00383"></a>00383 <span class="comment"> */</span><a name="l00384"></a><a class="code" href="testsuite_2bravo__validation_2usart_2usart_8c.html#4aadffc324ff58ec1e77ca53cc67b5ff">00384</a> <span class="keywordtype">int</span> <a class="code" href="testsuite_2bravo__validation_2usart_2usart_8c.html#4aadffc324ff58ec1e77ca53cc67b5ff">usart_overrun_error</a>(<span class="keyword">volatile</span> avr32_usart_t * usart)<a name="l00385"></a>00385 {<a name="l00386"></a>00386         <span class="keywordflow">return</span> ((usart-&gt;csr &amp; AVR32_USART_CSR_OVRE_OFFSET)) != 0;<a name="l00387"></a>00387 }

⌨️ 快捷键说明

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