Господа, разбираюсь с чудом из Техаса в связке с 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 прекрасно работает на нужной скорости.
Заранее спасибо.
|