rezident (07.12.2014 02:18, просмотров: 172) ответил Алехин Александр на вот настройка
Давненько я не брал в руки шашки. В том смысле, что два года уже не программировал для MSP430. Поэтому все что напишу не берите на веру, а проверяйте по документации. Насколько я помню, при любом сбое часового генератора (XT1 LF) ACLK переключается на REFO. Соответственно ваши ±10ppm кварца превращаются в ± несколько % REFO. Чтобы это проверить у вас должен быть обработчик прерывания NMI, который при вызове проверяет состояние OFIFG и XT1LFOFFG. Нарушения работы часового генератора могут по нескольким причинам. Навскидку я вижу у вас две возможные причины.
1. нагрузочная емкость часового кварца не соответствует номинальной. Не помню уже точно, что там за нюансы со встроенными в MSP430 конденсаторами, т.к. всегда предпочитал использовать внешние. Для кварца CL=12,5пФ ставил два по 24пФ. Вам для 10пФ кварца нужны два по 18пФ. (18пФ+2пФ)/2=10пФ. ЕМНИП встроенные в MSP конденсаторы пригодны только для кварцев с CL=6пФ или меньше. Но могу и ошибаться, возможно для серии MSP430F5xxx в даташите емкость указана именно нагрузочная для выводов кварца, не емкость каждого вывода MSP430 к которому подключается кварц.
2. вы сразу же уменьшаете амплитуду колебаний часового генератора, не дождавшись пока он нормально "раскочегариться". Рекомендую вам попробовать оставить значение битов XT1DRIVE такое же, как оно есть после сброса 03h. То бишь в строке программы
UCSCTL6 = XT2OFF + XCAP_2; // LF_mode, емкость 8.5 пФ
нужно написать
UCSCTL6 = XT2OFF | XT1DRIVE_3 | XCAP_3; // LF_mode, емкость 12 пФ