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

📄 db__shift_8c-source.html

📁 针对AVR单片机开发的嵌入式操作系统
💻 HTML
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head>    <meta name="robots" content="noindex">    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">    <title>Ethernut WebPort</title>    <link href="doxygen.css" rel="stylesheet" type="text/css"></head><body bgcolor="#ffffff"><!-- Generated by Doxygen 1.4.1 --><div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div><div class="nav"><a class="el" href="dir_000000.html">webport</a></div><h1>db_shift.c</h1><div class="fragment"><pre class="fragment">00001 <span class="preprocessor">#ifndef _DEV_BOARD_SHIFT_C</span>00002 <span class="preprocessor"></span><span class="preprocessor">#define _DEV_BOARD_SHIFT_C</span>00003 <span class="preprocessor"></span>00004 <span class="comment">/*</span>00005 <span class="comment"> * This code has been taken from the Charon Development Board</span>00006 <span class="comment"> * Toolkit and slightly modified.</span>00007 <span class="comment"> * Harald Kipp</span>00008 <span class="comment"> */</span>00009 00010 <span class="preprocessor">#include "db_shift.h"</span>00011 00012 <span class="comment">/*</span>00013 <span class="comment"> * Send data to 8x shift LED shift interface.</span>00014 <span class="comment"> */</span>00015 <span class="keywordtype">void</span> DevBoardShiftLedOut( u_char val )00016 { u_char i=8;00017 00018   sbi(SHIFT_DDR, SHIFT_LED_SET_DDR);  <span class="comment">/* parallel write -&gt; output pin */</span>00019   sbi(SHIFT_DDR, SHIFT_CLK_DDR);      <span class="comment">/* serial clock -&gt; output pin */</span>00020   sbi(SHIFT_DDR, SHIFT_OUT_DDR);      <span class="comment">/* serial data stream -&gt; output pin */</span>00021 00022   cbi(SHIFT_PORT, SHIFT_LED_SET);00023   cbi(SHIFT_PORT, SHIFT_CLK);00024 00025   <span class="keywordflow">while</span>( i-- )00026   { <span class="comment">/* send data to 74595, MSB (most significant bit) first */</span>00027     <span class="keywordflow">if</span>( val &amp; (1 &lt;&lt; i) ) sbi(SHIFT_PORT, SHIFT_OUT);00028     <span class="keywordflow">else</span> cbi(SHIFT_PORT, SHIFT_OUT);00029 00030     DevBoardShiftDelay( SHIFT_IO_DELAY ); <span class="comment">/* small delay between two I/O operations */</span>00031     sbi(SHIFT_PORT, SHIFT_CLK);           <span class="comment">/* 0 -&gt; 1 data valid */</span>00032     DevBoardShiftDelay( SHIFT_IO_DELAY ); <span class="comment">/* small delay between two I/O operations */</span>00033     cbi(SHIFT_PORT, SHIFT_CLK);00034   }00035 00036   sbi(SHIFT_PORT, SHIFT_LED_SET);       <span class="comment">/* 0 -&gt; 1 parallel write */</span>00037 }00038 00039 <span class="comment">/*</span>00040 <span class="comment"> * Send data to 2x16 LCD shift interface.</span>00041 <span class="comment"> */</span>00042 <span class="keywordtype">void</span> DevBoardShiftLcdOut( u_char val )00043 { u_char i=8;00044 00045   sbi(SHIFT_DDR, SHIFT_LCD_SET_DDR);  <span class="comment">/* parallel write -&gt; output pin */</span>00046   sbi(SHIFT_DDR, SHIFT_CLK_DDR);      <span class="comment">/* serial clock -&gt; output pin */</span>00047   sbi(SHIFT_DDR, SHIFT_OUT_DDR);      <span class="comment">/* serial data stream -&gt; output pin */</span>00048 00049   cbi(SHIFT_PORT, SHIFT_LCD_SET);00050   cbi(SHIFT_PORT, SHIFT_CLK);00051 00052   <span class="keywordflow">while</span>( i-- )00053   { <span class="comment">/* send data to 74595, MSB (most significant bit) first */</span>00054     <span class="keywordflow">if</span>( val &amp; (1 &lt;&lt; i) ) sbi(SHIFT_PORT, SHIFT_OUT);00055     <span class="keywordflow">else</span> cbi(SHIFT_PORT, SHIFT_OUT);00056 00057     DevBoardShiftDelay( SHIFT_IO_DELAY ); <span class="comment">/* small delay between two I/O operations */</span>00058     sbi(SHIFT_PORT, SHIFT_CLK);           <span class="comment">/* 0 -&gt; 1 data valid */</span>00059     DevBoardShiftDelay( SHIFT_IO_DELAY ); <span class="comment">/* small delay between two I/O operations */</span>00060     cbi(SHIFT_PORT, SHIFT_CLK);00061   }00062 00063   sbi(SHIFT_PORT, SHIFT_LCD_SET);       <span class="comment">/* 0 -&gt; 1 parallel write */</span>00064 }00065 00066 <span class="comment">/*</span>00067 <span class="comment"> * OBSOLETE: Used on dev. board's version 2.8 to access shift io peripherials.</span>00068 <span class="comment"> */</span>00069 <span class="keywordtype">void</span> DevBoardShiftWordOut( u_int val )00070 { u_char i=16;00071 00072   sbi(SHIFT_DDR, SHIFT_LED_SET_DDR);  <span class="comment">/* parallel write -&gt; output pin */</span>00073   sbi(SHIFT_DDR, SHIFT_CLK_DDR);      <span class="comment">/* serial clock -&gt; output pin */</span>00074   sbi(SHIFT_DDR, SHIFT_OUT_DDR);      <span class="comment">/* serial data stream -&gt; output pin */</span>00075 00076   cbi(SHIFT_PORT, SHIFT_LED_SET);00077   cbi(SHIFT_PORT, SHIFT_CLK);00078 00079   <span class="keywordflow">while</span>( i-- )00080   { <span class="comment">/* send data to 74595, MSB (most significant bit) first */</span>00081     <span class="keywordflow">if</span>( val &amp; (1 &lt;&lt; i) ) sbi(SHIFT_PORT, SHIFT_OUT);00082     <span class="keywordflow">else</span> cbi(SHIFT_PORT, SHIFT_OUT);00083 00084     DevBoardShiftDelay( SHIFT_IO_DELAY ); <span class="comment">/* small delay between two I/O operations */</span>00085     sbi(SHIFT_PORT, SHIFT_CLK);           <span class="comment">/* 0 -&gt; 1 data valid */</span>00086     DevBoardShiftDelay( SHIFT_IO_DELAY ); <span class="comment">/* small delay between two I/O operations */</span>00087     cbi(SHIFT_PORT, SHIFT_CLK);00088   }00089 00090   sbi(SHIFT_PORT, SHIFT_LED_SET);       <span class="comment">/* 0 -&gt; 1 parallel write */</span>00091 }00092 00093 <span class="comment">/*</span>00094 <span class="comment"> * Read data from 8x shift input interface.</span>00095 <span class="comment"> */</span>00096 u_char DevBoardShiftByteIn( <span class="keywordtype">void</span> )00097 { u_char in_byte=0,00098          i=7;00099 00100   sbi(SHIFT_DDR, SHIFT_IN_LOAD_DDR);    <span class="comment">/* shift/!load set as output pin */</span>00101   sbi(SHIFT_DDR, SHIFT_CLK_DDR);        <span class="comment">/* clock set as output pin */</span>00102   cbi(SHIFT_DDR, SHIFT_IN_DDR);         <span class="comment">/* serial data set as input pin */</span>00103 00104   cbi(SHIFT_PORT, SHIFT_CLK);           <span class="comment">/* set clock low  */</span>00105   cbi(SHIFT_PORT, SHIFT_IN_LOAD);       <span class="comment">/* set load low  -&gt; parallel in */</span>00106   DevBoardShiftDelay( SHIFT_IO_DELAY ); <span class="comment">/* small delay between two I/O operations */</span>00107   sbi(SHIFT_PORT, SHIFT_IN_LOAD);       <span class="comment">/* set load high -&gt; serial out */</span>00108 00109                                         <span class="comment">/* read bit, MSB(most significant bit) first */</span>00110   bit_is_set(SHIFT_PIN, SHIFT_IN) ? (in_byte |= 1) : (in_byte |= 0);00111 00112   <span class="keywordflow">while</span>(i--)00113   { sbi(SHIFT_PORT, SHIFT_CLK);         <span class="comment">/* 0 -&gt; 1 next databit on serial output is valid */</span>00114 00115     DevBoardShiftDelay( SHIFT_IO_DELAY ); <span class="comment">/* small delay between two I/O operations */</span>00116     in_byte &lt;&lt;= 1;                        <span class="comment">/* shift one bit left */</span>00117 00118     bit_is_set(SHIFT_PIN, SHIFT_IN) ? (in_byte |= 1) : (in_byte |= 0); <span class="comment">/* read next bit */</span>00119 00120     cbi(SHIFT_PORT, SHIFT_CLK);00121     DevBoardShiftDelay( SHIFT_IO_DELAY );00122   }00123 00124   <span class="keywordflow">return</span>(in_byte);                       <span class="comment">/* return received byte */</span>00125 }00126 00127 00128 <span class="comment">/*</span>00129 <span class="comment"> * Delay by executing a given number of NOPs.</span>00130 <span class="comment"> */</span>00131 <span class="keywordtype">void</span> DevBoardShiftDelay(<span class="keywordtype">long</span> nops)00132 {00133     <span class="keywordtype">long</span> i;00134 00135     <span class="keywordflow">for</span> (i = 0; i &lt; nops; i++) {00136         _NOP();00137     }00138 }00139 00140 <span class="preprocessor">#endif</span>00141 <span class="preprocessor"></span>00142 <span class="comment">/* ---------------------------- End Of File ------------------------------ */</span>00143 </pre></div><hr><address>  <small>    &copy;&nbsp;2002-2004 by egnite Software GmbH -     visit <a href="http://www.ethernut.de/">http://www.ethernut.de/</a>  </small></address></body></html>

⌨️ 快捷键说明

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