Вообще какие-то непонятки.
Экспериментально подобрал работающий вариант. А именно: модуль I2C тактируется от ACLK, который представляет собой 6мгц деленные на 4. Удалось-таки получить примерно 100кГц на SCL.
BCSCTL1 = XT2OFF + XTS + DIVA_2; // ACLK = SCLK / 4 I2CTCTL = I2CSSEL_1; // ACLK I2CPSC = 0x00; // I2C prescaler I2CSCLH = 0x06; // High period of SCL I2CSCLL = 0x06; // Low period of SCL
Может быть, для него 6Мгц - слишком быстро... не знаю. Но самое интересное началось дальше. Когда на шине I2C ничего, кроме мастера-контроллера нет, все нормально. Выдается байт адреса, вызывается прерывание NACK и все вроде хорошо. Когда подключаю свой термодатчик и выставляю правильный SLAVE адрес, датчик отвечает, но байт данных не передается. Но это еще не самое интересное. При попытке повторить передачу без сброса контроллера (сделал передачу I2C по команде от RS232) клок снова становится длинным - 6кГц вместо 100!
Ничего подобного не встречал ни в Микрочипе ни в Атмеле, там как-то сразу все работало ((
|