📄 sdio.lst
字号:
206 1 for( i=0;i<time_count;time_count++)
207 1 delay_us(30);
208 1 }
209
C51 COMPILER V7.05 SDIO 06/14/2007 16:16:46 PAGE 5
210 void Oscillator_Init(void)
211 {
212 1 OSCICL=0x08; //Internal Oscillator programme to 24MHz.
213 1 OSCICN=0xC3; //Enable Internal oscilator and set dividor to 1
214 1 }
215
216 void Watchdog_close(void)
217 {
218 1 PCA0MD&=~0X40; //COSE WATCHDOG
219 1 }
220
221 void IO_Init(void)
222 {
223 1 P2MDOUT=0x08; //Config P2.0-P2.3(CLK,CMD,DATA0,led) as push_pull
224 1 P1MDOUT=0x00;
225 1 XBR1=0x60; //Crossbar enabled
226 1 P1MDIN&=~0x30;
227 1 Uart_Reg_Rv_Count=0;
228 1 Int_Pending=0;
229 1 Uart_Reg_IIR=0;
230 1 Data_index=0;
231 1 Acc_Request_Flag=0;
232 1 }
233
234 void ADC_Init(void)
235 {
236 1 AMX0P=0x04; //P1.5 x_axis
237 1 AMX0N=0x1F; //GND(ADC in single-ended mode)
238 1 ADC0CN=0xC0;
239 1 ADC0CF=0x38; //Right ajusted
240 1 REF0CN=0x0A; // Vdd used as voltage reference, internal temperature sensor off
-
241 1 }
242
243 void Interrupts_Init()
244 {
245 1 IE=0xA0; //Enabled T2 interrupt enabled all
246 1 }
247
248 void ADC(void)
249 {
250 1 AMX0P=0x05;
251 1 AD0BUSY=0X01;
252 1 while(AD0BUSY);
253 1 AD0BUSY=0X01;
254 1 while(AD0BUSY);
255 1 Data_Send[0]=ADC0H;
256 1 Data_Send[1]=ADC0L;
257 1 AMX0P=0x04;
258 1 AD0BUSY=0X01;
259 1 while(AD0BUSY);
260 1 AD0BUSY=0X01;
261 1 while(AD0BUSY);
262 1 Data_Send[2]=ADC0H;
263 1 Data_Send[3]=ADC0L;
264 1 }
265
266 void Timer_Init(void)
267 {
268 1 TMR2CN =0x04; //Timer2 enabled, clock is the system clock divided by 12
-
269 1 TMR2RLL=0x00;
C51 COMPILER V7.05 SDIO 06/14/2007 16:16:46 PAGE 6
270 1 TMR2RLH=0xc0;
271 1 TMR2L =0x00;
272 1 TMR2H =0xc0;
273 1 timer_index=0;
274 1 }
275
276 void Timer2_ISR (void) interrupt 5 using 1
277 {
278 1
279 1 //IE=0;
280 1 TMR2CN&=0x7F; // clear inturrupt overflow flag
281 1 //if(++timer_index==1)
282 1 //{
283 1 // timer_index=0;
284 1 SD_BUSY_LED^=1;
285 1 //SD_BUSY_LED=0;
286 1 //}
287 1 ADC();
288 1 }
289
290 unsigned char Read_Byte_SD(void) //MCU Data READ
291 {
292 1 unsigned char temp=0;
293 1 unsigned char i;
294 1 for (i=0; i<8; i++) //MSB First
295 1 {
296 2 while(SD_CLK_PIN==1) ; //WAITING Clock Impuls (Low)
297 2 temp=(temp<<1)|SD_DATA0_PIN; //read data from master
298 2 while(SD_CLK_PIN==0); //WAITING Clock Impuls (LOW)
299 2 }
300 1 return (temp);
301 1 }
302
303 unsigned char code mask[8]={0x80,0x40,0x20,0x10,8,4,2,1};
304 void Write_Res_SD_CMD53(unsigned char value1,unsigned char value2) //MCU CMD WRITE
305 {
306 1 unsigned char i;
307 1 for (i=0; i<8; i++)
308 1 {
309 2 while(SD_CLK_PIN==0); //WAITING Clock Impuls (Low)
310 2 if((value1 & mask[i])!=0)
311 2 SD_CMD_PIN=1;
312 2 else SD_CMD_PIN=0;
313 2 if((value2 & mask[i])!=0)
314 2 SD_DATA0_PIN=1;
315 2 else SD_DATA0_PIN=0;
316 2 while(SD_CLK_PIN==1); //WAITING Clock Impuls (High)
317 2 }
318 1 }
319
320 void Write_Byte_SD(unsigned char value) //MCU Data WRITE
321 {
322 1 unsigned char i;
323 1 for (i=0; i<8; i++)
324 1 {
325 2 while(SD_CLK_PIN==0); //WAITING Clock Impuls (Low)
326 2 if((value & mask[i])!=0)
327 2 SD_DATA0_PIN=1; //Send bit by bit(MSB First)
328 2 else SD_DATA0_PIN=0;
329 2 while(SD_CLK_PIN==1); //WAITING Clock Impuls (High)
330 2 }
331 1 }
C51 COMPILER V7.05 SDIO 06/14/2007 16:16:46 PAGE 7
332
333 void Write_Res_SD(unsigned char value) //MCU CMD WRITE
334 {
335 1 unsigned char i;
336 1 for (i=0; i<8; i++)
337 1 {
338 2 while(SD_CLK_PIN==0); //WAITING Clock Impuls (Low)
339 2 if((value&mask[i])!=0)
340 2 SD_CMD_PIN=1; //Send bit by bit(MSB First)
341 2 else SD_CMD_PIN=0;
342 2 while(SD_CLK_PIN==1); //WAITING Clock Impuls (High)
343 2 }
344 1 }
345
346 unsigned char Read_CMD_SD(void) //MCU CMD READ
347 {
348 1 unsigned char temp=0;
349 1 unsigned char i;
350 1 for (i=0; i<8; i++) //MSB First
351 1 {
352 2 while(SD_CLK_PIN==1) ; //WAITING Clock Impuls (Low)
353 2 temp=(temp<<1)|SD_CMD_PIN; //read data from master
354 2 while(SD_CLK_PIN==0); //WAITING Clock Impuls (High)
355 2 }
356 1 return (temp);
357 1 }
358
359 unsigned char CRC7(unsigned char * chr, int cnt)
360 {
361 1 unsigned int i,a;
362 1 unsigned char crc_7,Data;
363 1 crc_7=0;
364 1 for(a=0;a<cnt;a++)
365 1 {
366 2 Data=chr[a];
367 2 for (i=0;i<8;i++)
368 2 {
369 3 crc_7<<=1;
370 3 if((Data&0x80)^(crc_7&0x80))
371 3 crc_7^=0x09;
372 3 Data <<=1;
373 3 }
374 2 }
375 1 crc_7=(crc_7<<1)|1;
376 1 return(crc_7);
377 1 }
378
379 //ITU-T V.41
380 //x^16 + x^12 + x^15 + 1
381 unsigned short
382 sp_crc16(
383 unsigned char *buf,
384 unsigned char size
385 )
386 {
387 1 unsigned short crc;
388 1 unsigned char *data1 = buf;
389 1
390 1 crc = 0;
391 1 while (size )
392 1 {
393 2 crc = crc16_table[((crc >> 8) ^ *(data1++)) & 0xFF] ^ (crc << 8);
C51 COMPILER V7.05 SDIO 06/14/2007 16:16:46 PAGE 8
394 2 size--;
395 2 }
396 1
397 1 return crc;
398 1 }
399 /*unsigned char insert_crc7 (unsigned char *path_trace_message,int cnt)
400 {
401 unsigned char crc7_accum = 0;
402 int i;
403 unsigned char j;
404 path_trace_message[0] &= ~0x7f;
405 for (i=0;i<=cnt;++i)
406 {
407 crc7_accum =crc7_syndrome_table[(crc7_accum << 1)^path_trace_message[i]];
408 }
409 path_trace_message[0] ^= crc7_accum;
410 path_trace_message[0]=(path_trace_message[0]<<1)|1;
411 j=path_trace_message[0];
412 return(path_trace_message[0]);
413 }*/
414
415 /*unsigned int CRC16(unsigned char * chr, int cnt)
416 {
417 unsigned int i,j;
418 //unsigned char crc_16;
419 unsigned int crc_16=0xffff;
420 for(i=0;i<cnt;i++)
421 {
422 crc_16=crc_16^((unsigned int)chr[i]);
423 for (j=0;j<8;j++)
424 {
425 if(crc_16&0x0001)
426 {
427 crc_16=(crc_16>>1)^0x8408;
428 }
429 else
430 crc_16=(crc_16>>1);
431 }
432 }
433 crc_16= ~crc_16;
434 return(crc_16);
435 }*/
436
437 void Data_Write(void)
438 {
439 1 Write_Byte_SD(Adc_X);
440 1 Write_Byte_SD(Adc_Y);
441 1 }
442
443 void Timing_Sync(void)
444 {
445 1 while(SD_CLK_PIN==0);
446 1 while(SD_CLK_PIN==1);
447 1 while(SD_CLK_PIN==0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -