[an error occurred while processing this directive]
|
Скажите, пожалуйста, где я не прав. Функция чтения данных из EEPOM 24FC512 "опускает" шину SCL и не поднимает, на чем собственно кночается все...
Вот исходник:
void ReadFromPZU()
{//Функция чтения ByteReadFromPZU из ПЗУ AdrPZU по адресу AdrInPZUH&AdrInPZUL
//Start condition
I2CCONbits.SEN = 1;
while(I2CCONbits.SEN);
//Send I2C address byte and wait till address is transmitted
I2CTRN = AdrPZU;
while(I2CSTATbits.TBF);
while(I2CSTATbits.ACKSTAT);
// Transmit EE ADDR High and wait till address is transmitted
I2CTRN = AdrInPZUH;
while(I2CSTATbits.TBF);
while(I2CSTATbits.ACKSTAT);
IdleI2C();
// Transmit EE ADDR Low and wait till address is transmitted
I2CTRN = AdrInPZUL;
while(I2CSTATbits.TBF);
while(I2CSTATbits.ACKSTAT);//Здесь повисает!!!!!!!!!!
IdleI2C();
//Start condition (Restart)
I2CCONbits.RSEN = 1;
while(I2CCONbits.RSEN);
//Send I2C address byte and Wait till address is transmitted
I2CTRN = AdrPZU|0x1;
while(I2CSTATbits.TBF);
while(I2CSTATbits.ACKSTAT);
// Read data
I2CCONbits.RCEN = 1;
while(I2CCONbits.RCEN);
while(!I2CSTATbits.RBF); //Здесь тоже закисает...
ByteReadFromPZU = I2CRCV;
//Stop I2C and wait till stop sequence is completed
I2CCONbits.ACKDT = 0; //NACK
I2CCONbits.ACKEN = 1; //NACK Send
while(I2CCONbits.ACKEN);
I2CCONbits.PEN = 1; //STOP
while(I2CCONbits.PEN);
}
Спасибо.
E-mail: info@telesys.ru