Использование I2C

27-11-2013, 14:09 От: admin Посмотрели: 972
Доброго времени суток, пытаюсь понять основы данного протокола.

Имеется простенькая библиотека I2C (см. код ниже) с двумя осн. функциями: установки значения по адресу и чтение



В данной библиотеке запись и чтение идёт с адресацией в пределах 1 байта, мне же нужно использовать её в соответствии со стандартом, используя двухбайтную адресацию данных (вначале старший байт, потом младший) для чтения и записи.



Буду благодарен, если подправите эту библиотеку исходя из этой задачи. Заранее спасибо!




#define RTC_RESET_POINTER 0xff
#define ADDRESS 80 //адрес устройства

void RTC_SetValue(uint8_t adr, uint8_t data)
{
/*формируем состояние СТАРТ*/
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
while(!(TWCR & (1<<TWINT)));

/*выдаемна шину пакет SLA-W*/
TWDR = (ADDRESS <<1)|0;
TWCR = (1<<TWINT)|(1<<TWEN);
while(!(TWCR & (1<<TWINT)));

/*передаем адрес регистра ds1307*/
TWDR = adr; // запись 8-ми битной переменной адресации
TWCR = (1<<TWINT)|(1<<TWEN);
while(!(TWCR & (1<<TWINT)));

/*передаем данные или пропускаем*/
if (data != RTC_RESET_POINTER){
/*это чтобы привести данные к BCD формату*/
data = ((data/10)<<4) + data%10;

TWDR = data;
TWCR = (1<<TWINT)|(1<<TWEN);
while(!(TWCR & (1<<TWINT)));
}

/*формируем состояние СТОП*/
TWCR = (1<<TWINT)|(1<<TWSTO)|(1<<TWEN);
}
uint8_t RTC_GetValue(void)
{
uint8_t data;

/*формируем состояние СТАРТ*/
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
while(!(TWCR & (1<<TWINT)));

/*выдаемна шину пакет SLA-R*/
TWDR = (ADDRESS<<1)|1;
TWCR = (1<<TWINT)|(1<<TWEN);
while(!(TWCR & (1<<TWINT)));

/*считываем данные*/
TWCR = (1<<TWINT)|(1<<TWEN);
while(!(TWCR & (1<<TWINT)));
data = TWDR;

/*формируем состояние СТОП*/
TWCR = (1<<TWINT)|(1<<TWSTO)|(1<<TWEN);

return data;
}

Раздел: AVR

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться, либо войти на сайт под своим именем.

Обсудить на форуме


На момент добавления Использование I2C все ссылки были рабочие.
Все публикации статей, книг и журналов, представлены на этом сайте, исключительно для ознакомления,
авторские права на эти публикации принадлежат авторам статей, книг и издательствам журналов!
Подробно тут | Жалоба

Добавление комментария

Ваше имя:*
E-Mail:*
Текст:
Вопрос:
Решите уравнения x+2x=789
Ответ:*
Введите два слова, показанных на изображении:



Опрос

Ваши предпочтения в TRX


Одинарное преобразование
Двойное преобразование
Прямое преобразование
SDR
Другое
Мне всё равно

Календарь новостей
«    Апрель 2024    »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
2930