Liste der Anhänge anzeigen (Anzahl: 1)
	
	
		I2C – Datenbyte wird nicht gesendet.
	
	
		Hallo Kollegen,
hat nicht lange gedauert und ….   da bin ich wieder mit ne Frage 
Bin am „basteln“ am I2C Protokoll,  STM32F103.
Funktionier erstmal zu 50% - das Adress-Byte wird gesendet und acknowledget.
Aber Data Bytes werden nicht gesendet.
Hat jemand `ne Idee woran es liegen kann?
Eistellungen für GPIO, Clock, ...   sind gemacht.
+++++++++++++++++++++++++++++++++++
Anhang 34226
Der leerer Raum zwischen dem Address Byte und der STOP-Sequenz is durch die Schleife 
for(k=0; k<350; k++){}     verursacht.
+++++++++++++++++++++++++++++++++++
	Code:
	
void I2c2Init(void) {
        uI2C_CCR * pI2c2Ccr         = (uI2C_CCR *)(I2C2_ADR + I2C_CCR_OFFSET);
        uI2C_CCR    I2c2Ccr;
        uI2C_CR1 * pI2c2Cr1         = (uI2C_CR1 *)(I2C2_ADR + I2C_CR1_OFFSET);
        uI2C_CR1    I2c2Cr1;
        uI2C_CR2 * pI2c2Cr2         = (uI2C_CR2 *)(I2C2_ADR + I2C_CR2_OFFSET);
        uI2C_CR2    I2c2Cr2;
        uI2C_TRISE * pI2c2Trise = (uI2C_TRISE *)(I2C2_ADR + I2C_TRISE_OFFSET);
        uI2C_TRISE    I2c2Trise;
                                                //RefMannual page 782-783
        I2c2Cr2.All = 0;
        I2c2Cr2.Bit.FREQ =                 0x36;                        //36;                                        //0x08
        pI2c2Cr2->All = I2c2Cr2.All;
        I2c2Ccr.All = 0;
        I2c2Ccr.Bit.CCR = 0x00B4;                                //0x28;                                        //Specification, page 70
        pI2c2Ccr->All = I2c2Ccr.All;
        I2c2Trise.All = 0;
        I2c2Trise.Bit.TRISE = 0x12;                            //0x09;
        pI2c2Trise->All = I2c2Trise.All;
        I2c2Cr1.All = 0;
        I2c2Cr1.Bit.ACK = 1;                                        //1: Acknowledge returned after a byte is received
        I2c2Cr1.Bit.PE = 1;
        pI2c2Cr1->All = I2c2Cr1.All;
}
void I2cSend(void){
        extern tTASTER TasterData[15];
        uI2C_DR   *pI2c2Dr                 = (uI2C_DR  *)(I2C2_ADR + I2C_DR_OFFSET);
        uI2C_DR    I2c2Dr;
        uI2C_CR1  *pI2c2Cr1         = (uI2C_CR1 *)(I2C2_ADR + I2C_CR1_OFFSET);
        uI2C_CR1    I2c2Cr1;
        uI2C_SR1  *pI2c2Sr1         = (uI2C_SR1 *)(I2C2_ADR + I2C_SR1_OFFSET);
        uI2C_SR1    I2c2Sr1;
        uI2C_SR2  *pI2c2Sr2         = (uI2C_SR2 *)(I2C2_ADR + I2C_SR2_OFFSET);
        uI2C_SR2    I2c2Sr2;
        unsigned char AddressI2c = 0;
        unsigned char MessageI2c = 0;
        unsigned char i = 0;
        unsigned int  k = 0;
        for(i = 1; i<=14; i++){
                AddressI2c = TasterData[i].AddressI2c;        //daten aus Array bereitstellen
                MessageI2c = TasterData[i].MessageI2c;        //um Verzögerungen beim Senden zu vermeiden
                while(0 != pI2c2Sr2->Bit.BUSY){                        //wait for free bus
                        asm("NOP");
                }
                I2c2Dr.All = 0;
                I2c2Cr1.All = pI2c2Cr1->All;
                I2c2Cr1.Bit.START = 1;
                pI2c2Cr1->All = I2c2Cr1.All;
                while(1 != pI2c2Sr2->Bit.MSL){                        //is Master Mode set?
                        asm("NOP");
                }
                I2c2Sr1.All = pI2c2Sr1->All;                        //SB=1, cleared by reading SR1 register ...
                I2c2Dr.Bit.DR         = AddressI2c;                        //...followed by writing DR register with Address.
                pI2c2Dr->All  = I2c2Dr.All;                                //write address in DR.
                I2c2Sr1.All = pI2c2Sr1->All;                        //ADDR=1, cleared by reading SR1 register ...
                I2c2Sr2.All = pI2c2Sr2->All;                        //...followed by reading SR2
                while(0 != pI2c2Sr1->Bit.ADDR){                        //Is the address send?
                        asm("NOP");
                }
                while(1 != pI2c2Sr1->Bit.TxE){                        //TxE=1, shift register empty, data register empty
                        asm("NOP");
                }
                I2c2Dr.Bit.DR         = MessageI2c;
                pI2c2Dr->All  = I2c2Dr.All;                                //write Data in DR.
//                for(k=0; k<350; k++){}
                I2c2Cr1.All = pI2c2Cr1->All;
                I2c2Cr1.Bit.STOP = 1;
                pI2c2Cr1->All = I2c2Cr1.All;
        }
}