Пытаюсь включить модуль I2C у LPC2000 чтобы пообщаться с EEPROM 24C64.
Работу я хочу построить не по прерываниям, а по опросу состояния флагов и статусного регистра. Из user-manual'a не совсем понятен алгоритм действий.
Передача Master trasmitter mode(передача байта) в моем случае:
PHP код:
|
I2C0_I2CONCLR=0x3C;//очистить биты
I2C0_I2CONSET=0x20;//бит STA выдать условие СТАРТ
while(!(I2C0_I2CONSET & 0x08));//ждать бита SI
I2C0_I2CONCLR=0x08|0x20;//очистить SI & STA
I2C0_I2DAT=data;//выдать данные на шину, например SLA+RW
while(!(I2C0_I2CONSET & 0x08));//ждать бита SI - окончания передачи
I2C0_I2CONCLR=0x08;//очистить SI
|
Вопросы:
1)Для занятия шины мастером нужно записать бит STA. Этот бит надо очищать после его передачи и до посылки байта данных(SLA+RW), или он может быть установленным в течение всей транзакции?
Теперь Master receiver mode:
1.установить бит AA в I2C0CONSET(для возможности квитирования - ACK)
2.как-то надо инициировать прием байта
3.считать принятый байт из регистра I2C0_I2DAT
2)С передачей байта вроде понятно, а с приемом - нет. Надо как-то сформировать на шине 9 тактовых импульсов, чтобы слейв выбросил данные, а мастер овтетил ACK/NACK, но как?