📄 encoder_8c-source.html
字号:
00114 <span class="comment">// disable encoder interrupts</span>00115 <span class="preprocessor"> #ifdef ENC0_SIGNAL</span>00116 <span class="preprocessor"></span> <span class="comment">// disable interrupts</span>00117 sbi(<a class="code" href="encoder_8h.html#a0">IMSK</a>, INT0); <span class="comment">// ISMK is auto-defined in encoder.h</span>00118 <span class="preprocessor"> #endif</span>00119 <span class="preprocessor"></span><span class="preprocessor"> #ifdef ENC1_SIGNAL</span>00120 <span class="preprocessor"></span> <span class="comment">// disable interrupts</span>00121 sbi(<a class="code" href="encoder_8h.html#a0">IMSK</a>, INT1); <span class="comment">// ISMK is auto-defined in encoder.h</span>00122 <span class="preprocessor"> #endif</span>00123 <span class="preprocessor"></span><span class="preprocessor"> #ifdef ENC2_SIGNAL</span>00124 <span class="preprocessor"></span> <span class="comment">// disable interrupts</span>00125 sbi(<a class="code" href="encoder_8h.html#a0">IMSK</a>, INT2); <span class="comment">// ISMK is auto-defined in encoder.h</span>00126 <span class="preprocessor"> #endif</span>00127 <span class="preprocessor"></span><span class="preprocessor"> #ifdef ENC3_SIGNAL</span>00128 <span class="preprocessor"></span> <span class="comment">// disable interrupts</span>00129 sbi(<a class="code" href="encoder_8h.html#a0">IMSK</a>, INT3); <span class="comment">// ISMK is auto-defined in encoder.h</span>00130 <span class="preprocessor"> #endif</span>00131 <span class="preprocessor"></span>}00132 00133 <span class="comment">// encoderGetPosition() reads the current position of the encoder </span><a name="l00134"></a><a class="code" href="encoder_8h.html#a4">00134</a> s32 <a class="code" href="encoder_8c.html#a3">encoderGetPosition</a>(u08 encoderNum)00135 {00136 <span class="comment">// sanity check</span>00137 <span class="keywordflow">if</span>(encoderNum < NUM_ENCODERS)00138 <span class="keywordflow">return</span> EncoderState[encoderNum].<a class="code" href="structstruct__EncoderState.html#o0">position</a>;00139 <span class="keywordflow">else</span>00140 <span class="keywordflow">return</span> 0;00141 }00142 00143 <span class="comment">// encoderSetPosition() sets the current position of the encoder</span><a name="l00144"></a><a class="code" href="encoder_8h.html#a5">00144</a> <span class="keywordtype">void</span> <a class="code" href="encoder_8c.html#a4">encoderSetPosition</a>(u08 encoderNum, s32 position)00145 {00146 <span class="comment">// sanity check</span>00147 <span class="keywordflow">if</span>(encoderNum < NUM_ENCODERS)00148 EncoderState[encoderNum].<a class="code" href="structstruct__EncoderState.html#o0">position</a> = position;00149 <span class="comment">// else do nothing</span>00150 }00151 00152 <span class="preprocessor">#ifdef ENC0_SIGNAL</span>00153 <span class="preprocessor"></span><span class="comment">//! Encoder 0 interrupt handler</span>00154 <span class="comment"></span><a class="code" href="a2d_8c.html#a10">SIGNAL</a>(ENC0_SIGNAL)00155 {00156 <span class="comment">// encoder has generated a pulse</span>00157 <span class="comment">// check the relative phase of the input channels</span>00158 <span class="comment">// and update position accordingly</span>00159 <span class="keywordflow">if</span>( ((inb(ENC0_PHASEA_PORTIN) & (1<<ENC0_PHASEA_PIN)) == 0) ^00160 ((inb(ENC0_PHASEB_PORTIN) & (1<<ENC0_PHASEB_PIN)) == 0) )00161 {00162 EncoderState[0].<a class="code" href="structstruct__EncoderState.html#o0">position</a>++;00163 }00164 <span class="keywordflow">else</span>00165 {00166 EncoderState[0].<a class="code" href="structstruct__EncoderState.html#o0">position</a>--;00167 }00168 }00169 <span class="preprocessor">#endif</span>00170 <span class="preprocessor"></span>00171 <span class="preprocessor">#ifdef ENC1_SIGNAL</span>00172 <span class="preprocessor"></span><span class="comment">//! Encoder 1 interrupt handler</span>00173 <span class="comment"></span><a class="code" href="a2d_8c.html#a10">SIGNAL</a>(ENC1_SIGNAL)00174 {00175 <span class="comment">// encoder has generated a pulse</span>00176 <span class="comment">// check the relative phase of the input channels</span>00177 <span class="comment">// and update position accordingly</span>00178 <span class="keywordflow">if</span>( ((inb(ENC1_PHASEA_PORTIN) & (1<<ENC1_PHASEA_PIN)) == 0) ^00179 ((inb(ENC1_PHASEB_PORTIN) & (1<<ENC1_PHASEB_PIN)) == 0) )00180 {00181 EncoderState[1].<a class="code" href="structstruct__EncoderState.html#o0">position</a>++;00182 }00183 <span class="keywordflow">else</span>00184 {00185 EncoderState[1].<a class="code" href="structstruct__EncoderState.html#o0">position</a>--;00186 }00187 }00188 <span class="preprocessor">#endif</span>00189 <span class="preprocessor"></span>00190 <span class="preprocessor">#ifdef ENC2_SIGNAL</span>00191 <span class="preprocessor"></span><span class="comment">//! Encoder 2 interrupt handler</span>00192 <span class="comment"></span><a class="code" href="a2d_8c.html#a10">SIGNAL</a>(ENC2_SIGNAL)00193 {00194 <span class="comment">// encoder has generated a pulse</span>00195 <span class="comment">// check the relative phase of the input channels</span>00196 <span class="comment">// and update position accordingly</span>00197 <span class="keywordflow">if</span>( ((inb(ENC2_PHASEA_PORTIN) & (1<<ENC2_PHASEA_PIN)) == 0) ^00198 ((inb(ENC2_PHASEB_PORTIN) & (1<<ENC2_PHASEB_PIN)) == 0) )00199 {00200 EncoderState[2].<a class="code" href="structstruct__EncoderState.html#o0">position</a>++;00201 }00202 <span class="keywordflow">else</span>00203 {00204 EncoderState[2].<a class="code" href="structstruct__EncoderState.html#o0">position</a>--;00205 }00206 }00207 <span class="preprocessor">#endif</span>00208 <span class="preprocessor"></span>00209 <span class="preprocessor">#ifdef ENC3_SIGNAL</span>00210 <span class="preprocessor"></span><span class="comment">//! Encoder 3 interrupt handler</span>00211 <span class="comment"></span><a class="code" href="a2d_8c.html#a10">SIGNAL</a>(ENC3_SIGNAL)00212 {00213 <span class="comment">// encoder has generated a pulse</span>00214 <span class="comment">// check the relative phase of the input channels</span>00215 <span class="comment">// and update position accordingly</span>00216 <span class="keywordflow">if</span>( ((inb(ENC3_PHASEA_PORTIN) & (1<<ENC3_PHASEA_PIN)) == 0) ^00217 ((inb(ENC3_PHASEB_PORTIN) & (1<<ENC3_PHASEB_PIN)) == 0) )00218 {00219 EncoderState[3].<a class="code" href="structstruct__EncoderState.html#o0">position</a>++;00220 }00221 <span class="keywordflow">else</span>00222 {00223 EncoderState[3].<a class="code" href="structstruct__EncoderState.html#o0">position</a>--;00224 }00225 }00226 <span class="preprocessor">#endif</span></pre></div><hr size="1"><address style="align: right;"><small>Generated on Sun Oct 29 03:41:06 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 + -