Приветсвую всех.
Спецы, помогите пожалуйста разобраться с тактированием.
Проблема обстоит так.
Есть контроллер MSP430F413
Настраиваюю FLL при тактировании от кварца 32768 Гц следующим образом.
Код:
|
FLL_CTL0 |= DCOPLUS + XCAP10PF;
SCFQCTL |= SCFQ_4M;
SCFI0 |= FLLD_2; |
т.е. подразумевается что MCLK = 32768*128*2 = 8 388 608 Гц.
Теперь настраиваем Таймер А таким образом, чтобы прерывание по сравнению срабатывало каждые 50мкс.
Код:
|
TACTL = TASSEL_2 + TACLR;
TACTL |= MC_1;
CCTL0 = CCIE; |
т.е. тактирование от SMCLK, режим счет вверх до значения CCR0 и разрешить прерывание по событию совпадение.
теперь если посчитать, то нам необходимо 420 тактов чтобы прерывание возникало каждые 50мкс.
значит в CCR0 необходимо записать 420.
Изменяя значение порта по каждому событию прерывания на осцилографе вижу, что время далеко не 50 мкс, а где-то 64-69 мкс.
Опытным путем было подобрано значение CCR0 и оно = 340.
Среда IAR, JTAG-ом смотрю все регистры все честно.
Скажите уважаемые, или так нельзя делать в принципе или я что-то не допонимаю.
С AVR никогда таких проблем не было, но там и кварц 4-16 МГц использовался и напрямую на какой-нить таймер (без делителей/умножителей). Все четко работало. MSP430 только начал осваивать и на таком месте напороться.
Отсюда проблема вытекает с программным _delay_us или _delay_ms потому как нет уверености, что частота тактирования действительно та, о которой я думаю 8 388 608 Гц.