📄 db__shift_8c-source.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 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 List</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related 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 -> output pin */</span>00019 sbi(SHIFT_DDR, SHIFT_CLK_DDR); <span class="comment">/* serial clock -> output pin */</span>00020 sbi(SHIFT_DDR, SHIFT_OUT_DDR); <span class="comment">/* serial data stream -> 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 & (1 << 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 -> 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 -> 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 -> output pin */</span>00046 sbi(SHIFT_DDR, SHIFT_CLK_DDR); <span class="comment">/* serial clock -> output pin */</span>00047 sbi(SHIFT_DDR, SHIFT_OUT_DDR); <span class="comment">/* serial data stream -> 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 & (1 << 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 -> 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 -> 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 -> output pin */</span>00073 sbi(SHIFT_DDR, SHIFT_CLK_DDR); <span class="comment">/* serial clock -> output pin */</span>00074 sbi(SHIFT_DDR, SHIFT_OUT_DDR); <span class="comment">/* serial data stream -> 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 & (1 << 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 -> 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 -> 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 -> 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 -> 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 -> 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 <<= 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 < 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> © 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 + -