#define Ack 1 #define NotAck 0 //Definition des bits sur le CPU sbit IntLpc32 = P1 ^ 0; //INT du LPC32 sbit SDA = P1 ^ 1; sbit SCL = P1 ^ 2; //Adresse I2C #define AddI2cRead 0x71 //A0=0 #define AddI2cWrite 0x70 //A0=0 /**************************I2C Manuel***************************************/ octet data i2c_mtd[10] ; /* tampon 10 octets à transmettre en master trans*/ octet idata i2c_mrd[10] ; /* tampon 10 octets à recevoir en master rec */ //Programme de base pour l'I2C en assembleur //Voir I2C.A51 extern bit EmisI2c(octet OctI2c); //_EmisI2c(OctetAEnvoyer) retourne C=1 si octet envoyé est acquitté //Attention,si pas ack,EmisI2c(octet OctI2c) fait le stop extern octet RecepI2c(octet Acqt); //OctetAttendu=RecepI2c14m(0 ou 1) ,Acqt=0 pas d'acquit,Acqt=1 acquit extern void StopI2c(); //Stop I2C extern void StartI2c();//Start I2C extern void Tempo5MicroS();//tempo 5 µS //IntLpc28:broche du CPU relié à la broche INT du LPC28 /***************************************************************************************/ /* Envoie 8 octets vers LPC32 sur le bus I2C forme: if(Send8CarLpc32(AddI2cWrite)) */ /* Retourne bit=1 si réponse et acquittement de tous les octets, 0 sinon */ /***************************************************************************************/ bit Send8CarLpc32(add) { unsigned char ii; StartI2c(); if(EmisI2c(add)) {for(ii=0;ii<8;ii++) {if(!EmisI2c(i2c_mtd[ii])) {StopI2c(); return(0); } } } else {StopI2c(); return(0); } StopI2c(); return(1); } /********************************************************************************/ /*Reception de 8 octets du LPC32 dans buffer i2c_mrd[0] à i2c_mrd[7] */ /*Utilisation: if(Rec8CarLpc32(AddI2cRead)) */ /*Retourne bit=1 si réponse du LPC32 ,0 sinon */ /********************************************************************************/ bit Rec8CarLpc32(add) { unsigned char ii; StartI2c(); if(EmisI2c(add)) { for(ii=0;ii<8;ii++) i2c_mrd[ii]=RecepI2c(Ack);//Rec et ack de l'octet StopI2c(); return(1); } else return(0); }