?lang_form? ?lang_select? ?lang_submit? ?lang_endform?
{HEADER END}
{BLAME START}

library

?curdirlinks? -

Blame information for rev 3

Line No. Rev Author Line
1 3 kaklik ///////////////////////////////////////////////////////////////////////////////
2 //
3 // KNIHOVNA PRO PRACI S EXTERNI PAMETI EEPROM RADY 93XX (MICROWIRE SBERNICE)
4 //
5 ///////////////////////////////////////////////////////////////////////////////
6 //
7 // PEFI S.ICZ a.s. 2003
8 //
9 // Verze 1.0 - uvodni verze
10 //
11 //////////////////////////////////////////////////////////////////////////////
12 //
13 // funkce:
14 // ExtEE_init()
15 // - inicializuje porty
16 // EXTEE_DATA_WIDTH_TYPE ExtEE_read_item(EXTEE_ADR_WIDTH_TYPE adr)
17 // - precte bajt/word z pameti
18 //
19 // ExtEE_read_array(EXTEE_ADR_WIDTH_TYPE adr,EXTEE_DATA_WIDTH_TYPE *data, int8 len)
20 // - precte pole bajtu/wordu z pameti
21 //
22 // ExtEE_write_enable()
23 // - povoli smazani a zapis do pameti
24 //
25 // ExtEE_write_disable()
26 // - zakaze smazani a zapis do pameti
27 //
28 // ExtEE_write_item(EXTEE_ADR_WIDTH_TYPE adr,EXTEE_DATA_WIDTH_TYPE data)
29 // - zapise bajt/word do pameti
30 //
31 // ExtEE_write_array(EXTEE_ADR_WIDTH_TYPE adr,EXTEE_DATA_WIDTH_TYPE *data,int8 len)
32 // - zapise pole bajtu/wodru do pameti
33 //
34 // ExtEE_write_all(EXTEE_DATA_WIDTH_TYPE data)
35 // - vyplni celou pamet zadanym bajtem/wordem
36 //
37 // ExtEE_erase_item(EXTEE_ADR_WIDTH_TYPE adr)
38 // - smaze bajt/word v pameti
39 //
40 // ExtEE_erase_all()
41 // - smaze celou pamet (vyplni 0xFF/0xFFFF)
42 //
43 // definice a prepinace
44 // #define EXTEE_CS /* pin, na kterem je pripojen signal CS */
45 // #define EXTEE_DI /* pin, na kterem je pripojen signal DI */
46 // #define EXTEE_DO /* pin, na kterem je pripojen signal DO */
47 // #define EXTEE_CLK /* pin, na kterem je pripojen signal CLK */
48 // #define EXTEE_DATA_WIDTH /* pocet bitu dat, bud 8 nebo 16 bitu */
49 // #define EXTEE_ADR_WIDTH /* pocet bitu adresy */
50 //
51 //
52 // defaultni definice
53 #ifndef EXTEE_CS
54 #define EXTEE_CS PIN_A5 /* pin, na kterem je pripojen signal CS */
55 #endif
56 #ifndef EXTEE_DI
57 #define EXTEE_DI PIN_C4 /* pin, na kterem je pripojen signal DI */
58 #endif
59 #ifndef EXTEE_DO
60 #define EXTEE_DO PIN_C5 /* pin, na kterem je pripojen signal DO */
61 #endif
62 #ifndef EXTEE_CLK
63 #define EXTEE_CLK PIN_C3 /* pin, na kterem je pripojen signal CLK */
64 #endif
65  
66 #ifndef EXTEE_DATA_WIDTH
67 #define EXTEE_DATA_WIDTH 8 /* pocet bitu dat 8 nebo 16*/
68 #endif
69 #ifndef EXTEE_ADR_WIDTH
70 #define EXTEE_ADR_WIDTH 7 /* pocet bitu adresy */
71 #endif
72 // POZN: Nastaveni sirky dat a adresy odpovida pameti 93C46 v 8 bitovem provedeni
73  
74  
75  
76 /****************************************************************************************************/
77 // Privatni sekce, cist jen v pripade, ze neco nefunguje
78 /****************************************************************************************************/
79 // definice prikazu
80 // prikazy jsou umisteny pred nejvyssi bajt adresy
81 // u prikazu WEN,WDS,ERAL,WRAL prikaz zasahuje do dvou nejvyssich bitu adresy
82 #define EXTEE_READ_CMD (0x06l<<EXTEE_ADR_WIDTH) /* prikaz pro cteni bajtu/wordu z pameti */
83 #define EXTEE_WRITE_CMD (0x05l<<EXTEE_ADR_WIDTH) /* prikaz pro zapis bajtu/wordu do pameti */
84 #define EXTEE_ERASE_CMD (0x07l<<EXTEE_ADR_WIDTH) /* prikaz pro smazani bajtu/wordu v pameti */
85 #define EXTEE_WEN_CMD (0x13l<<EXTEE_ADR_WIDTH-2) /* prikaz pro povoleni zapisu */
86 #define EXTEE_WDS_CMD (0x10l<<EXTEE_ADR_WIDTH-2) /* prikaz pro zakaz zapisu */
87 #define EXTEE_ERAL_CMD (0x12l<<EXTEE_ADR_WIDTH-2) /* prikaz pro smazani cele pameti */
88 #define EXTEE_WRAL_CMD (0x11l<<EXTEE_ADR_WIDTH-2) /* prikaz,pro vyplneni cele pameti */
89 //
90 // definice typu pro data a adresy
91 #if EXTEE_DATA_WIDTH==8
92 #define EXTEE_DATA_WIDTH_TYPE int8
93 #elif EXTEE_DATA_WIDTH==16
94 #define EXTEE_DATA_WIDTH_TYPE int16
95 #else Error Unable data width. Supported width is 8 or 16 bit only.
96 #endif
97 #if EXTEE_ADR_WIDTH>8
98 #define EXTEE_ADR_WIDTH_TYPE int16
99 #else
100 #define EXTEE_ADR_WIDTH_TYPE int8
101 #endif
102  
103 //////////////////////////////////////////////////////////
104 ///// FUNKCE pro inicializaci a pomocne funkce
105 //////////////////////////////////////////////////////////
106 // inicializuje port
107 //
108 void ExtEE_init()
109 {
110 output_low(EXTEE_CS);
111 output_low(EXTEE_CLK);
112 output_low(EXTEE_DI);
113 }
114  
115  
116 // pomocna funkce
117 // zapise prikaz a adresu do pameti
118 //
119 void ExtEE_write_cmd_adr(int16 cmdadr)
120 {
121 int8 i;
122  
123 for(i=0;i<EXTEE_ADR_WIDTH+3;i++)
124 {
125 if(bit_test(cmdadr,EXTEE_ADR_WIDTH+3-1)) output_high(EXTEE_DI); // serializujeme z nejvyssiho bitu zaznamu
126 else output_low(EXTEE_DI);
127 output_high(EXTEE_CLK); // hodiny do 1
128 output_low(EXTEE_CLK); // hodiny do 0
129 cmdadr=cmdadr<<1;
130 }
131 }
132  
133  
134  
135  
136  
137 //////////////////////////////////////////////////////////
138 // FUNKCE PRO CTENI Z PAMETI
139 //////////////////////////////////////////////////////////
140 // pomocna funkce pro cteni
141 // precte data z pameti, nestara se o adresu ani o vyber pameti, jen prevede seriova data na paralelni
142 //
143 EXTEE_DATA_WIDTH_TYPE ExtEE_read_data()
144 {
145 EXTEE_DATA_WIDTH_TYPE data;
146 int8 i;
147  
148 data=0;
149 for(i=0;i<EXTEE_DATA_WIDTH;i++)
150 {
151 data=data<<1;
152 output_high(EXTEE_CLK); // hodiny do 1
153 data=data | input(EXTEE_DO);
154 output_low(EXTEE_CLK); // hodiny do 0
155 }
156 return(data);
157 }
158  
159  
160 // precte bajt/word z pameti
161 //
162 EXTEE_DATA_WIDTH_TYPE ExtEE_read_item(EXTEE_ADR_WIDTH_TYPE adr)
163 {
164 EXTEE_DATA_WIDTH_TYPE data;
165  
166 output_high(EXTEE_CS); // vyber pamet
167 ExtEE_write_cmd_adr(EXTEE_READ_CMD | adr); // posli prikaz a adresu
168 data=ExtEE_read_data(); // precti bajt/word dat
169 output_low(EXTEE_CS); // uvolni pamet
170 return(data);
171 }
172  
173  
174 // precte pole bajtu/wordu z pameti
175 //
176 void ExtEE_read_array(EXTEE_ADR_WIDTH_TYPE adr,EXTEE_DATA_WIDTH_TYPE *data, int8 len)
177 {
178 output_high(EXTEE_CS); // vyber pamet
179 ExtEE_write_cmd_adr(EXTEE_READ_CMD | adr); // posli prikaz a adresu
180 do
181 {
182 *data=ExtEE_read_data(); // precti bajt/word dat
183 data++;
184 } while(--len);
185 output_low(EXTEE_CS); // uvolni pamet
186 }
187  
188  
189  
190  
191  
192  
193  
194  
195  
196 //////////////////////////////////////////////////////////
197 ///// FUNKCE pro povoleni/zakazani zapisu/mazani pameti
198 //////////////////////////////////////////////////////////
199 // povoli smazani a zapis do pameti
200 //
201 void ExtEE_write_enable()
202 {
203 output_high(EXTEE_CS); // vyber pamet
204 ExtEE_write_cmd_adr(EXTEE_WEN_CMD); // posli prikaz a adresu
205 output_low(EXTEE_CS); // uvolni pamet
206 }
207  
208  
209 // zakaze smazani a zapis do pameti
210 //
211 void ExtEE_write_disable()
212 {
213 output_high(EXTEE_CS); // vyber pamet
214 ExtEE_write_cmd_adr(EXTEE_WDS_CMD); // posli prikaz a adresu
215 output_low(EXTEE_CS); // uvolni pamet
216 }
217  
218  
219  
220  
221  
222 //////////////////////////////////////////////////////////
223 ///// FUNKCE pro zapis do pameti
224 //////////////////////////////////////////////////////////
225 // zapise bajt/word do pameti
226 //
227 void ExtEE_write_item(EXTEE_ADR_WIDTH_TYPE adr,EXTEE_DATA_WIDTH_TYPE data)
228 {
229 int8 i;
230  
231 output_high(EXTEE_CS); // vyber pamet
232 ExtEE_write_cmd_adr(EXTEE_WRITE_CMD | adr); // posli prikaz a adresu
233 for(i=0;i<EXTEE_DATA_WIDTH;i++)
234 {
235 if(bit_test(data,EXTEE_DATA_WIDTH-1)) output_high(EXTEE_DI); // serializujeme z nejvyssiho bitu dat
236 else output_low(EXTEE_DI);
237 output_high(EXTEE_CLK); // hodiny do 1
238 output_low(EXTEE_CLK); // hodiny do 0
239 data=data<<1;
240 }
241 output_low(EXTEE_CS); // uvolni pamet, zahaji se zapis v pameti
242 output_high(EXTEE_CS); // vyber pamet
243 while(!input(EXTEE_DO)); // cekej az pamet bajt zapise
244 output_low(EXTEE_CS); // uvolni pamet
245 }
246  
247  
248 // zapise pole bajtu/wodru do pameti
249 //
250 void ExtEE_write_array(EXTEE_ADR_WIDTH_TYPE adr,EXTEE_DATA_WIDTH_TYPE *data,int8 len)
251 {
252 do
253 {
254 ExtEE_write_item(adr++,*data);
255 data++;
256 }while(--len);
257 }
258  
259  
260 // vyplni celou pamet zadanym bajtem
261 //
262 void ExtEE_write_all(EXTEE_DATA_WIDTH_TYPE data)
263 {
264 int8 i;
265  
266 output_high(EXTEE_CS); // vyber pamet
267 ExtEE_write_cmd_adr(EXTEE_WRAL_CMD); // posli prikaz a adresu
268 for(i=0;i<EXTEE_DATA_WIDTH;i++)
269 {
270 if(bit_test(data,EXTEE_DATA_WIDTH-1)) output_high(EXTEE_DI); // serializujeme z nejvyssiho bitu dat
271 else output_low(EXTEE_DI);
272 output_high(EXTEE_CLK); // hodiny do 1
273 output_low(EXTEE_CLK); // hodiny do 0
274 data=data<<1;
275 }
276 output_low(EXTEE_CS); // uvolni pamet, zahaji se zapis v pameti
277 output_high(EXTEE_CS); // vyber pamet
278 while(!input(EXTEE_DO)); // cekej az pamet bajt zapise
279 output_low(EXTEE_CS); // uvolni pamet
280 }
281  
282  
283  
284  
285  
286 //////////////////////////////////////////////////////////
287 ///// FUNKCE pro mazani pameti
288 //////////////////////////////////////////////////////////
289 // smaze bajt/word v pameti
290 //
291 void ExtEE_erase_item(EXTEE_ADR_WIDTH_TYPE adr)
292 {
293 output_high(EXTEE_CS); // vyber pamet
294 ExtEE_write_cmd_adr(EXTEE_ERASE_CMD | adr); // posli prikaz a adresu
295 output_low(EXTEE_CS); // uvolni pamet, zahaji se mazani v pameti
296 output_high(EXTEE_CS); // vyber pamet
297 while(input(!EXTEE_DO)); // cekej az pamet bajt smaze
298 output_low(EXTEE_CS); // uvolni pamet
299 }
300  
301  
302 // smaze celou pamet (vyplni 0xFF)
303 //
304 void ExtEE_erase_all()
305 {
306 output_high(EXTEE_CS); // vyber pamet
307 ExtEE_write_cmd_adr(EXTEE_ERAL_CMD); // posli prikaz a adresu
308 output_low(EXTEE_CS); // uvolni pamet, zahaji se mazani pameti
309 output_high(EXTEE_CS); // vyber pamet
310 while(!input(EXTEE_DO)); // cekej az se pamet smaze
311 output_low(EXTEE_CS); // uvolni pamet
312 }
313 // End of File
{BLAME END}
{FOOTER START}

Powered by WebSVN v2.8.3