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

📄 uartsw2_8c-source.html

📁 avr应用测试程序
💻 HTML
📖 第 1 页 / 共 2 页
字号:
00155     00156     <span class="comment">// set the start bit</span>00157 <span class="preprocessor">    #ifdef UARTSW_INVERT</span>00158 <span class="preprocessor"></span>    sbi(<a class="code" href="uartsw2conf_8h.html#a2">UARTSW_TX_PORT</a>, <a class="code" href="uartsw2conf_8h.html#a4">UARTSW_TX_PIN</a>);00159 <span class="preprocessor">    #else</span>00160 <span class="preprocessor"></span>    cbi(<a class="code" href="uartsw2conf_8h.html#a2">UARTSW_TX_PORT</a>, <a class="code" href="uartsw2conf_8h.html#a4">UARTSW_TX_PIN</a>);00161 <span class="preprocessor">    #endif</span>00162 <span class="preprocessor"></span>    <span class="comment">// schedule the next bit</span>00163     outb(OCR2, inb(TCNT2) + UartswBaudRateDiv);00164     <span class="comment">// enable OC2 interrupt</span>00165     sbi(TIMSK, OCIE2);00166 }00167 <span class="comment"></span>00168 <span class="comment">//! gets a byte (if available) from the uart receive buffer</span><a name="l00169"></a><a class="code" href="uartsw2_8c.html#a15">00169</a> <span class="comment"></span>u08 <a class="code" href="uartsw_8c.html#a15">uartswReceiveByte</a>(u08* rxData)00170 {00171     <span class="comment">// make sure we have a receive buffer</span>00172     <span class="keywordflow">if</span>(uartswRxBuffer.<a class="code" href="structstruct__cBuffer.html#o1">size</a>)00173     {00174         <span class="comment">// make sure we have data</span>00175         <span class="keywordflow">if</span>(uartswRxBuffer.<a class="code" href="structstruct__cBuffer.html#o2">datalength</a>)00176         {00177             <span class="comment">// get byte from beginning of buffer</span>00178             *rxData = <a class="code" href="group__buffer.html#ga2">bufferGetFromFront</a>(&amp;uartswRxBuffer);00179             <span class="keywordflow">return</span> TRUE;00180         }00181         <span class="keywordflow">else</span>00182         {00183             <span class="comment">// no data</span>00184             <span class="keywordflow">return</span> FALSE;00185         }00186     }00187     <span class="keywordflow">else</span>00188     {00189         <span class="comment">// no buffer</span>00190         <span class="keywordflow">return</span> FALSE;00191     }00192 }00193 <a name="l00194"></a><a class="code" href="uartsw2_8c.html#a16">00194</a> <span class="keywordtype">void</span> <a class="code" href="uartsw_8c.html#a16">uartswTxBitService</a>(<span class="keywordtype">void</span>)00195 {00196     <span class="keywordflow">if</span>(UartswTxBitNum)00197     {00198         <span class="comment">// there are bits still waiting to be transmitted</span>00199         <span class="keywordflow">if</span>(UartswTxBitNum &gt; 1)00200         {00201             <span class="comment">// transmit data bits (inverted, LSB first)</span>00202 <span class="preprocessor">            #ifdef UARTSW_INVERT</span>00203 <span class="preprocessor"></span>            <span class="keywordflow">if</span>( !(UartswTxData &amp; 0x01) )00204 <span class="preprocessor">            #else</span>00205 <span class="preprocessor"></span>            <span class="keywordflow">if</span>( (UartswTxData &amp; 0x01) )00206 <span class="preprocessor">            #endif</span>00207 <span class="preprocessor"></span>                sbi(<a class="code" href="uartsw2conf_8h.html#a2">UARTSW_TX_PORT</a>, <a class="code" href="uartsw2conf_8h.html#a4">UARTSW_TX_PIN</a>);00208             <span class="keywordflow">else</span>00209                 cbi(<a class="code" href="uartsw2conf_8h.html#a2">UARTSW_TX_PORT</a>, <a class="code" href="uartsw2conf_8h.html#a4">UARTSW_TX_PIN</a>);00210             <span class="comment">// shift bits down</span>00211             UartswTxData = UartswTxData&gt;&gt;1;00212         }00213         <span class="keywordflow">else</span>00214         {00215             <span class="comment">// transmit stop bit</span>00216 <span class="preprocessor">            #ifdef UARTSW_INVERT</span>00217 <span class="preprocessor"></span>            cbi(<a class="code" href="uartsw2conf_8h.html#a2">UARTSW_TX_PORT</a>, <a class="code" href="uartsw2conf_8h.html#a4">UARTSW_TX_PIN</a>);00218 <span class="preprocessor">            #else</span>00219 <span class="preprocessor"></span>            sbi(<a class="code" href="uartsw2conf_8h.html#a2">UARTSW_TX_PORT</a>, <a class="code" href="uartsw2conf_8h.html#a4">UARTSW_TX_PIN</a>);00220 <span class="preprocessor">            #endif</span>00221 <span class="preprocessor"></span>        }00222         <span class="comment">// schedule the next bit</span>00223         outb(OCR2, inb(OCR2) + UartswBaudRateDiv);00224         <span class="comment">// count down</span>00225         UartswTxBitNum--;00226     }00227     <span class="keywordflow">else</span>00228     {00229         <span class="comment">// transmission is done</span>00230         <span class="comment">// clear busy flag</span>00231         UartswTxBusy = FALSE;00232         <span class="comment">// disable OC2 interrupt</span>00233         cbi(TIMSK, OCIE2);00234     }00235 }00236 <a name="l00237"></a><a class="code" href="uartsw2_8c.html#a17">00237</a> <span class="keywordtype">void</span> <a class="code" href="uartsw_8c.html#a17">uartswRxBitService</a>(<span class="keywordtype">void</span>)00238 {00239     <span class="comment">// this function runs on either:</span>00240     <span class="comment">// - a rising edge interrupt</span>00241     <span class="comment">// - Timer 0 output compare</span>00242     <span class="keywordflow">if</span>(!UartswRxBusy)00243     {00244         <span class="comment">// UART was not previously busy,</span>00245         <span class="comment">// this must be is a start bit</span>00246         00247         <span class="comment">// disable INT2 interrupt</span>00248         cbi(GICR, INT2);00249         <span class="comment">// schedule data bit sampling 1.5 bit periods from now</span>00250         outb(OCR0, inb(TCNT0) + UartswBaudRateDiv + UartswBaudRateDiv/2);00251         <span class="comment">// clear OC0 interrupt flag</span>00252         sbi(TIFR, OCF0);00253         <span class="comment">// enable OC0 interrupt</span>00254         sbi(TIMSK, OCIE0);00255         <span class="comment">// set busy flag</span>00256         UartswRxBusy = TRUE;00257         <span class="comment">// reset bit counter</span>00258         UartswRxBitNum = 0;00259         <span class="comment">// reset data</span>00260         UartswRxData = 0;00261     }00262     <span class="keywordflow">else</span>00263     {00264         <span class="comment">// start bit has already been received</span>00265         <span class="comment">// we're in the data bits</span>00266         00267         <span class="comment">// shift data byte to make room for new bit</span>00268         UartswRxData = UartswRxData&gt;&gt;1;00269 00270         <span class="comment">// sample the data line</span>00271 <span class="preprocessor">        #ifdef UARTSW_INVERT</span>00272 <span class="preprocessor"></span>        <span class="keywordflow">if</span>( !(inb(<a class="code" href="uartsw2conf_8h.html#a7">UARTSW_RX_PORTIN</a>) &amp; (1&lt;&lt;<a class="code" href="uartsw2conf_8h.html#a8">UARTSW_RX_PIN</a>)) )00273 <span class="preprocessor">        #else</span>00274 <span class="preprocessor"></span>        <span class="keywordflow">if</span>( (inb(<a class="code" href="uartsw2conf_8h.html#a7">UARTSW_RX_PORTIN</a>) &amp; (1&lt;&lt;<a class="code" href="uartsw2conf_8h.html#a8">UARTSW_RX_PIN</a>)) )00275 <span class="preprocessor">        #endif</span>00276 <span class="preprocessor"></span>        {00277             <span class="comment">// serial line is marking</span>00278             <span class="comment">// record '1' bit</span>00279             UartswRxData |= 0x80;00280         }00281 00282         <span class="comment">// increment bit counter</span>00283         UartswRxBitNum++;00284         <span class="comment">// schedule next bit sample</span>00285         outb(OCR0, inb(OCR0) + UartswBaudRateDiv);00286 00287         <span class="comment">// check if we have a full byte</span>00288         <span class="keywordflow">if</span>(UartswRxBitNum &gt;= 8)00289         {00290             <span class="comment">// save data in receive buffer</span>00291             <a class="code" href="group__buffer.html#ga5">bufferAddToEnd</a>(&amp;uartswRxBuffer, UartswRxData);00292             <span class="comment">// disable OC0 interrupt</span>00293             cbi(TIMSK, OCIE0);00294             <span class="comment">// clear INT2 interrupt flag</span>00295             sbi(GIFR, INTF2);00296             <span class="comment">// enable INT interrupt</span>00297             sbi(GICR, INT2);00298             <span class="comment">// clear busy flag</span>00299             UartswRxBusy = FALSE;00300         }00301     }00302 }00303 00304 <a class="code" href="a2d_8c.html#a10">SIGNAL</a>(SIG_INTERRUPT2)00305 {00306     <span class="comment">// run RxBit service routine</span>00307     <a class="code" href="uartsw_8c.html#a17">uartswRxBitService</a>();00308 }</pre></div><hr size="1"><address style="align: right;"><small>Generated on Sun Oct 29 03:41:08 2006 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 + -