Что-то ты тень на плетень наводишь. В твоем же исходнике все нормально!?
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Алексей Мусин 23 июля 2004 г. 11:47
В ответ на: наоборот отправлено =L.A.= 23 июля 2004 г. 10:14


signed char i2c_ReadAcknowledge(void)
{
unsigned char ack;
SCL = 0;
SCL_DIR = I2C_OUTPUT;
SDA=1;
SDA_DIR = I2C_INPUT;/* disable data line - listen for ack */
DelayUs(I2C_TM_SCL_TO_DATA);/* SCL low to data out valid */
SCL_DIR = I2C_INPUT;/* float clock high */
DelayUs(I2C_TM_DATA_SU);
ack = SDA;/* read the acknowledge */
/* wait for slave to release clock line after processing byte */

if(i2c_WaitForSCL())
return I2C_ERROR;

return ack;
}

только непонятно, зачем второй SCL_DIR = I2C_INPUT; ?
посмотрел это место в своем исходнике:


/* теперь ждем ACK */
PIN_DIRECT(I2C_SDA, I);
I2C_DELAY5();
PIN_ON(I2C_SCK);

I2C_DELAY5(); /* ждем установки ACK */

if (PIN_SIGNAL(I2C_SDA))
{
/* если нет ACK от слейва - это плохо! */
PIN_OFF(I2C_SCK);
PIN_DIRECT(I2C_SDA, O);
I2c_Stop();
return(FALSE);
}

PS. Весь исходник не имею права показать.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru