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

 
 
> I2C в MSP430F169
Slonic
сообщение Mar 16 2006, 09:08
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 84
Регистрация: 3-10-05
Из: Москва-Троицк
Пользователь №: 9 174



Господа, разбираюсь с чудом из Техаса в связке с IAR EW 3.2 Проблема с моим непониманием, как должен работать модуль I2C. С UARTом все получилось довольно просто, а здесь что-то застопорилось.

Итак, задача. Есть контроллер с резонатором 6Мгц на месте XCLK1. Конфигурируем источник тактовой частоты и затем модуль I2C:

BCSCTL1 = 0xC0; // select clock source
BCSCTL2 = 0xC8;

P3SEL |= 0x0a; // Assign I2C pins to module
U0CTL |= I2C + SYNC; // Switch USART0 to I2C mode
U0CTL &= ~I2CEN; // Recommended I2C init procedure
I2CTCTL = 0x30; // SMCLK
I2CSCLH = 0x1D; // High period of SCL
I2CSCLL = 0x1D; // Low period of SCL
I2CNDAT = 0x01; // Transmit one byte
I2CSA = 0x4F; // Slave address = 0 1001 111
I2CIE = RXRDYIE; // Enable RXRDYIFG interrupt
U0CTL |= I2CEN; // Enable I2C, 7 bit addr,
_EINT(); // Enable interrupts

По идее, на входе модуля должна быть исходная тактовая частота 6мгц. Частота SCL соответственно должна быть 6000кГц / ((29 + 1) * 2) = 100кГц. При контроле этого пина осциллографом вижу там частоту в районе 2кГц. Откуда она берется - непонятно. При этом UART1 прекрасно работает на нужной скорости.

Заранее спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Slonic
сообщение Mar 21 2006, 15:51
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 84
Регистрация: 3-10-05
Из: Москва-Троицк
Пользователь №: 9 174



С частотой вроде разобрался.

Нужно было включить знаменитую задержку (см. FAQ) при включении, до переключения на тактирование от кварца. Раньше мне это в голову не приходило, т.к. UART работал нормально и все проблемы были связаны только с I2C. Но оказалось, что все частоты встали на свое место после введения этой задержки.

Но обмен по-прежнему так и не работает. Кто-нибудь может мне сказать, правильно ли я понимаю, что по команде

I2CTCTL |= I2CTRX + I2CSTT + I2CSTP;

должно передаваться два байта: адрес и данные? у меня передается один адрес, после чего вызывается прерывание Transmit Ready. И вот если после этого записать что-то в регистр данных I2С, тогда только происходит реальная передача байта данных. Судя по мануалу, что-то не так. Или...?
Go to the top of the page
 
+Quote Post



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

 


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


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