📄 yt_temep.lst
字号:
334 if(Get_bit(IO_I2CD->IDR,I2CD)==0)nn&=0XFE;
335 else nn|=1;
336 if(j!=7)
337 nn<<=1;
338 Clr_bit(IO_I2CC->ODR,I2CC);//SCL_C;
339 delay(20);
340 }
341 GPIO_InOut(IO_I2CD,GPIO_Pin_I2CD,1,GPIO_Mode_Out_PP);//SDA_OUT;
342 return(nn);
343 }
344
345
346 /*向虚拟I2C总线上发送n个字节的数据*///WRNBYT(0XA0,0,&FM[0],16);
347 Int8U WRNBYT(Int8U i2c,Int8U i2cadd,Int8U *pos,Int8U number)
348 {
349 Int8U slaw,k,F0,ct_i2c;
350
351 k=i2c,ct_i2c=0;
352 do
353 {
354 sta();
355 WRBYT(k);
356 F0=cack();
357 ct_i2c++;
358 }while(F0==1&&ct_i2c<5);
359 if(ct_i2c>=5)return 1;
360
361 slaw=i2cadd,ct_i2c=0;
362 do
363 {
364 WRBYT(slaw);
365 F0=cack( );
366 ct_i2c++;
367 }while(F0==1&&ct_i2c<5);
368 if(ct_i2c>=5)return 1;
369
370 for(k=0;k<number;k++)
371 {
372 WRBYT(*pos);
373 F0=cack( );
374 ++pos;
375 }
376 stop();
377 return 0;
378 }
379 /*从虚拟I2C总线上读取n个字节的数据*/
380 void RDNBYT(Int8U slar,Int8U subaddr,Int8U *qq,Int8U number)
381 {
382 Int8U rl,F0,ct_i2c;
383
384 rl=slar,ct_i2c=0;
385 do{
386 sta();
387 WRBYT(rl);
388 F0=cack();
389 ct_i2c++;
390 }while(F0==1&&ct_i2c<5);
391
392 if(slar==0xa0)
393 {
394 do
395 {
396 WRBYT(subaddr);
397 F0=cack();
398 ct_i2c++;
399 }while(F0==1&&ct_i2c<5);
400 }
401 if(slar==0x64)slar=4;
402 else slar=0xa1;
403 if(slar==0xa1)sta();
404 do
405 {
406 WRBYT(slar);
407 F0==cack();
408 ct_i2c++;
409 }while(F0==1&&ct_i2c<10);
410
411 for(rl=0;rl<number-1;rl++)
412 {
413 *qq=RDBYT();
414 ++qq;
415 mack();
416 }
417 *qq=RDBYT();
418 mnack();
419 stop();
420 }
421
422
423
424
425 ////////////////////////////////////////////////////////
426 void ReadYear(Int8U *year_buf)
427 {
428 #if STM_I2C
429 ReadI2C(0X64,0,year_buf,16) ;
430 #else
431 RDNBYT(0x64,0,year_buf,16);
432 #endif
433 }
434
435
436
437
438 void WriteYear(Int8U *year_buf)
439 {
440 #if STM_I2C
441 WriteI2C(0X64,0,year_buf,16);
442 #else
443 WRNBYT(0X64,0,year_buf,16);
444 #endif
445 }
446
447 Int16U InitYear(Int8U *year_buf)
448 {
449 Int8U a;
450
451 #if STM_I2C
452 ReadI2C(0X64,0,year_buf,16) ;
453 #else
454 RDNBYT(0x64,0,year_buf,16);
455 #endif
456 a=0x20;
457 #if STM_I2C
458 WriteI2C(0x64,0XE0,&a,1);
459 #else
460 WRNBYT(0x64,0XE0,&a,1);
461 #endif
462 delay_nop(1000);
463 return 0;
464 }
465
466
467
468 Int16U ReadFM24C04(_yt *DATA)
469 {
470 Int16U a,b,c,m;
471 Int8U FM[22];
472 for(m=0;m<3;m++)
473 {
474 //WriteFM24C04(C_FM24C04,&_YT) ;
475 #if STM_I2C
476 ReadI2C(0XA0,0,&FM[0],22);
477 #else
478 RDNBYT(0xA0,0,&FM[0],22);
479 #endif
480 for(a=0,b=0;a<20;a++)b+=FM[a];
481 c=FM[20]<<8,c+=FM[21];
482
483 if(b==c)
484 {
485 DATA->Sensor[0].Type=FM[0];
486 DATA->Sensor[1].Type=FM[1];
487 DATA->Sensor[2].Type=FM[2];
488 DATA->Sensor[3].Type=FM[3];
489 DATA->_TemOver=FM[4];
490 DATA->_TemFast=FM[5];
491 DATA->_TemTime=FM[6];
492 DATA->_TemRoom=FM[7];
493 DATA->_TemFault=FM[8];
494 DATA->_Channal=FM[9]*0X100;
495 DATA->_Channal+=FM[10];
496 DATA->_Yorder=FM[11];
497 DATA->_Address=FM[12];
498 DATA->_Facility=FM[13];
499 DATA->_Rate=FM[14];
500 return FALSE;
501 }
502 else
503 {
504 WRNBYT(0XA0,0,&FM_TAB[0],22);
505 delay_nop(1000);
506 }
507
508 }
509 return TRUE;
510 }
511
512
513
514
515 Int16U WriteFM24C04(Int16U Flag,_yt*DATA)
516 {
517 Int8U I2CDATA[22];
518 Int16U a;
519 Int32U b;
520 if(Flag!=C_FM24C04)return 0;
521
522 I2CDATA[0]=DATA->Sensor[0].Type;
523 I2CDATA[1]=DATA->Sensor[1].Type;
524 I2CDATA[2]=DATA->Sensor[2].Type;
525 I2CDATA[3]=DATA->Sensor[3].Type;
526 I2CDATA[4]=(Int8U)DATA->_TemOver&0XFF;
527 I2CDATA[5]=(Int8U)DATA->_TemFast&0xff;
528 I2CDATA[6]=(Int8U)DATA->_TemTime&0XFF;
529 I2CDATA[7]=(Int8U)DATA->_TemRoom&0xff;
530 I2CDATA[8]=(Int8U)DATA->_TemFault&0xff;
531
532 I2CDATA[9]=DATA->_Channal/0X100;
533 I2CDATA[10]=(Int8U)DATA->_Channal&0XFF;
534 I2CDATA[11]=(Int8U)DATA->_Yorder&0xff;
535 I2CDATA[12]=(Int8U)DATA->_Address&0xff;
536 I2CDATA[13]=(Int8U)DATA->_Facility&0xff;
537 I2CDATA[14]=(Int8U)DATA->_Rate&0xff;
538
539 for(a=0,b=0;a<20;a++)b+=(Int32U)I2CDATA[a];
540 b&=0xffff;
541 I2CDATA[20]=(Int8U)(b>>8),I2CDATA[21]=(Int8U)(b&0XFF);
542 #if STM_I2C
543 WriteI2C(0XA0,0,I2CDATA,22);
544 #else
545 WRNBYT(0xA0,0,&I2CDATA[0],22);
546 #endif
547 return 0;
548
549 }
550
551
552
553
554
555 #if 0
556 void WriteI2C(Int16U ComponentAddress,Int8U SubAddress,Int8U *FM,Int8U I2Clen)
557 {
558 Int8U len;
559 I2C_GenerateSTART(I2C1, ENABLE); /* Send START condition */
560 while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));//while((((u32)(I2C1->SR2) << 16) | (u32)(I2C1->SR1) & 0x00FFFFBF) != I2C_EVENT_MASTER_MODE_SELECT);
561 I2C_Send7bitAddress(I2C1, ComponentAddress, I2C_Direction_Transmitter);//发送方向
562 while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));/* EV6 */ /* Test on EV6 and clear it */
563 I2C_SendData(I2C1, SubAddress); /* Send the RTC Internal address 0 */
564 while(! I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));/* EV8 *//* Test on EV8 and clear it */
565
566 for(len=0;len<I2Clen;++len)
567 {
568 I2C_SendData(I2C1, *FM);
569 while(! I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
570 }
571 I2C_GenerateSTOP(I2C1, ENABLE);
572 }
573
574 void ReadI2C(Int16U ComponentAddress,Int16U SubAddress,Int8U *FM,Int8U I2Clen)
575 {
576 Int8U len;
577
578 I2C_AcknowledgeConfig(I2C1,ENABLE); /* Enable I2C1 acknowledgement if it is already disabled by other function */
579 I2C_GenerateSTART(I2C1, ENABLE);
580 while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); /* EV5 */
581 I2C_Send7bitAddress(I2C1,ComponentAddress,I2C_Direction_Transmitter);
582 asm("nop");
583 while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)); /* EV6 */ /* Test on I2C1 EV6 and clear it */
584 asm("nop");
585
586 if(ComponentAddress==0xa0)
587 {
588 I2C_SendData(I2C1,SubAddress);
589 while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
590 I2C_GenerateSTART(I2C1, ENABLE);
591 while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
592 I2C_Send7bitAddress(I2C1,ComponentAddress+1,I2C_Direction_Receiver);
593 while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
594 while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED));
595 }
596
597 for(len=0;len<I2Clen;++len)//++FM)
598 {
599 /* EV7 */*FM=
600 I2C_ReceiveData(I2C1);
601 I2C_AcknowledgeConfig(I2C1, ENABLE);
602 while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED));
603 }
604
605 I2C_AcknowledgeConfig(I2C1, DISABLE);
606 I2C_GenerateSTOP(I2C1, ENABLE);
607
608 }
609 #endif
610
611
612
613
614
615
616
617
Maximum stack usage in bytes:
Function .cstack
-------- -------
GPIO_InOut 24
InitYear 16
RDBYT 16
RDNBYT 32
ReadFM24C04 48
ReadYear 8
Read_SHT 32
SHTA_ack 16
START_SHT 8
Test_error 0
WRBYT 16
WRNBYT 40
WriteFM24C04 48
WriteYear 8
Write_SHT 24
account_RH 0
account_Temp 0
cack 8
crc8 8
mack 8
mnack 8
read_SHT_data 8
sta 8
stop 8
swapcrc 8
Section sizes:
Function/Label Bytes
-------------- -----
FM_TAB 24
GPIO_InOut 36
START_SHT 196
SHTA_ack 128
Write_SHT 160
Read_SHT 454
crc8 48
swapcrc 56
account_Temp 40
account_RH 68
Test_error 34
read_SHT_data 252
Timecounter 1
sta 76
stop 76
mack 72
mnack 72
cack 112
WRBYT 104
RDBYT 136
WRNBYT 152
RDNBYT 208
ReadYear 18
WriteYear 18
InitYear 48
ReadFM24C04 252
WriteFM24C04 182
1 byte in section .bss
24 bytes in section .data
2 998 bytes in section .text
2 998 bytes of CODE memory
25 bytes of DATA memory
Errors: none
Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -