реклама на сайте
подробности

 
 
> Twi в SAM7s128, он же I2C
Nikitoc
сообщение Sep 10 2009, 13:30
Сообщение #1


Местный
***

Группа: Validating
Сообщений: 207
Регистрация: 14-01-09
Из: Днепропетровск
Пользователь №: 43 367



Всем доброго времени суток! Я понимаю, что тема избитая, но перечитав с дюжину веток на этом и других форумах, я решения так и не нашел. Надеюсь на понимание уважаемых форумчан. Собственно не могу добиться хотя бы изменения состояния на линиях TWD и TWCK у at91sam7128. Привожу кусок кода который использую для инициализации интерфейса:

/* Function of definition I2C */
void I2C_INIT () {
pPIO -> PIO_PDR = pPIO -> PIO_PDR | 0x18; // disable PA3 PA4 I/O for using by I2C
pPIO -> PIO_PPUDR = 0xFFFFFFE7; // Отключаю pull-up резисторы везде кроме 3 и 4 линий
pPIO -> PIO_ASR = pPIO -> PIO_ASR | 0x18; // наверное необязательно, но указываю что линии 3 и 4 - это периферия А
pPIO -> PIO_MDER = pPIO -> PIO_MDER | 0x18; // линии 3 и 4 с открытым стоком
pP_M_C -> PMC_PCER = pP_M_C -> PMC_PCER | 0x200; // clock enable I2C
AT91C_BASE_TWI -> TWI_CR = AT91C_TWI_SWRST; // программный сброс
AT91C_BASE_TWI -> TWI_CWGR = 0x8383; // частота ~200kHz
AT91C_BASE_TWI -> TWI_MMR = AT91C_TWI_IADRSZ_1_BYTE | ((unsigned int) 0x42 << 16); // adress and size of internal adress
}
/********************************************************/

записи:

/********************************************************/
void I2C_WR (int intadress) {
int status;
AT91C_BASE_TWI -> TWI_IADR = intadress;
AT91C_BASE_TWI -> TWI_MMR &= 0xFFFFEFFF;
AT91C_BASE_TWI -> TWI_CR = AT91C_TWI_START | AT91C_TWI_MSEN | AT91C_TWI_STOP;


//* Set Data register for start transmission
AT91C_BASE_TWI -> TWI_THR = 0xAA; // !!!!!!!!! Здесь ничего не происходит!!!! Содержимое регистра THR и TXDATA не изменяются

status = AT91C_BASE_TWI -> TWI_THR; //..чтение этого регистра дает 0x00 !!!!
//* Wait end transmission
status = AT91C_BASE_TWI -> TWI_SR;
while (!(status & AT91C_TWI_TXCOMP)) {
status = AT91C_BASE_TWI -> TWI_SR;
}
}
///////////////////////////////////////////////////////////////////////////////
Если честно перепробовал кучу вариантов реализации, с учетом рекомендаций Atmel (на их сайте), уже голова кругом. Подскажите, где я делаю что-то неправильно?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Nikitoc
сообщение Sep 21 2009, 11:04
Сообщение #2


Местный
***

Группа: Validating
Сообщений: 207
Регистрация: 14-01-09
Из: Днепропетровск
Пользователь №: 43 367



Всем огромное спасибо за участие и дельные советы. Помучившись чуток я написал свой софтверный I2C специально под удивительную видеокамеру ov7670 (там создатели назвали I2C интерфейс странным словом SCCB smile.gif ) Конечно, лучше всегда иметь под рукой универсальную библиотеку TWI, но так оказалось быстрее. Тему, думаю, можно считать закрытой. Еще раз всем спасибо.
2 Sergey_K: обязательно попробую Ваш вариант инициализации.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 11:14
Рейтинг@Mail.ru


Страница сгенерированна за 0.01386 секунд с 7
ELECTRONIX ©2004-2016