Просмотрел "по диагонали", но вроде алгоритм верный. 32768/4*375=3072000Гц. Вам нужна частота около 3МГц? ИМХО ваш алгоритм несколько усложнен. ИМХО достаточно было бы провести натурный эксперимент с выводом MCLK на пин, чтобы примерно подобрать значение DCO, MOD и RSEL и "плясать" уже от найденного значения. Тогда подстройка частоты происходила быстрее бы. Я бы взял начальные условаия RSEL=7 и DCO=3. Потом DCO и MOD определить программно. Хотя если у вас батарейное питание, а не фиксированное, тогда делаете вполне разумно.
И все-таки остается непонятным, почему же при тактовой 3МГц не успевают обрабатываться 1мс прерывания?
P.S. если хотите, чтобы желание разобраться в вашем исходнике возникло у бОльшего кол-ва людей, то пользуйтесь стандартными для TI обозначениями битов и оформляйте вставку кода в сообщение тэгами [ code ] [ /code ].
P.P.S. кстати, вы контролировали генерацию на часовом кварце или частоту ACLK? Он стартует надежно? Именно на частоте 32768?
В даташите рекомендуется притягивать выход генератора XOUT к DVss резистором 5,1МОм при питании 2,5В и меньше. Но опытным путем (и не только мной) было выяснено, что этот резистор отнюдь не мешает и при более высоком напряжении питании (3,3В например). С этим резистором LFXT генератор стартует более надежно и с любыми часовыми кварцами, правда выход на нормальный режим колебаний увеличивается почти до 1с. Некоторые люди решили, что притягивать XOUT нужно не к DVss, а к DVcc. Но я пока не проверял эффективности этого способа. См. вот эти ветки обсуждений.
http://caxapa.ru/87886.html?todo=full и
http://caxapa.ru/88056.html?todo=fullP.P.P.S. еще вспомнил про одну ошибку начинающих. Если вы используете обычный часовой кварц с CL=12,5pF (а именно такие чаще всего продаются), то встроенных в LF-генератор MSP430 конденсаторов 12,5pF недостаточного! Нужно дополнительно на XIN и XOUT подключить еще по конденсатору на 12pF.