Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: MSP430F249 и 16 MHz
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
fox1
Добрый день !

Пытаюсь инициализировать MSP430F249 на 16 MHz - не работает
Все вроде по эррате

BCSCTL1 = XT2OFF + RSEL2 + RSEL1 + RSEL0;
DCOCTL = CALDCO_16MHZ;
BCSCTL1 = CALBC1_16MHZ;

и вообще при загрузке калибровочных коэффициентов не работает
так же не работает и при
BCSCTL1 |= (RSEL0 | RSEL1 | RSEL2 | RSEL3);

а при

BCSCTL1 = XT2OFF + RSEL2 + RSEL1 + RSEL0;
DCOCTL = (DCO0 | DCO1 | DCO2) | (!MOD0 | !MOD1 | !MOD2 | !MOD3 | !MOD4);

Все работает ....
Что может быть не так ?????
rezident
Цитата(fox1 @ Dec 24 2012, 11:50) *
Что может быть не так ?????

Вполне вероятно, что во время манипуляций по программированию памяти вы затерли сегмент с калибровочными константами. Если есть отладчик, то посмотрите содержимое памяти Flash по адресам 0x10C0-0x10FF. Если там сплошные 0xFF, то так и есть - калибровочные контакты были затерты при загрузке программы.
igorle
Цитата(fox1 @ Dec 24 2012, 09:50) *
BCSCTL1 = XT2OFF + RSEL2 + RSEL1 + RSEL0;
DCOCTL = CALDCO_16MHZ;
BCSCTL1 = CALBC1_16MHZ;

А если так попробовать?
DCOCTL = CALDCO_16MHZ;
BCSCTL1 = CALBC1_16MHZ;
BCSCTL1 |= XT2OFF + RSEL2 + RSEL1 + RSEL0;
В вашем-же случае третья строка перетирает данные, записанные в первой строке.
Shread
Обычно вот такой кусочек втыкаю в прогу для детекта отсутствия нужных констант. От левых чисел не спасет, но все же)
if (CALBC1_16MHZ ==0xFF || CALDCO_16MHZ == 0xFF)
{
while(1);
}

Внутри цикла по желанию. В простейшем случае прога трапается и далее не идет.
И еще убедитесь что питание в норме для 16мгц(см даташит). Вполне может оказаться что питание маловато, и иногда работает, а иногда - нет.
fox1
Цитата(igorle @ Dec 24 2012, 21:11) *
А если так попробовать?
DCOCTL = CALDCO_16MHZ;
BCSCTL1 = CALBC1_16MHZ;
BCSCTL1 |= XT2OFF + RSEL2 + RSEL1 + RSEL0;
В вашем-же случае третья строка перетирает данные, записанные в первой строке.

Ничего там не перетирается
Все из ерраты

slaz184.pdf
стр. 4
the 3-step clock startup sequence

C:
BCSCTL1 = XT2OFF + RSEL2 + RSEL1 + RSEL0; // BCL12 Workaround, first set RSELx=7
DCOCTL = CALDCO_1MHZ; // Then set target DCOx and MODx
BCSCTL1 = CALBC1_1MHZ; // Finally set target RSELx
fox1
Заработало на 15 Мгц

BCSCTL1 = (XT2OFF | RSEL2 | RSEL1 | RSEL0); // BCL12 Workaround, first set RSELx=7

DCOCTL = (DCO0 | DCO1 | DCO2) | (!MOD0 | !MOD1 | !MOD2 | !MOD3 | !MOD4);

BCSCTL1 |= (RSEL0 | RSEL1 | RSEL2 | RSEL3);

Но похоже затерлись калибровочные константы при прошивке

Показывает
CALDCO_16MHZ = 0xFF;
CALBC1_16MHZ = 0xFF;

Прошиваю

msp430-bsl.exe -c0 -m10 -1 --invert-test -epvrw 3010I_430_01_01.elf>log.txt

Есть какой-либо прошивальщик bsl, который не затирает инфо мем, а шьет только программную память ???
Кто нибудь может привести значение CALDCO_16MHZ и CALBC1_16MHZ. Что там должно быть примерно ????
rezident
Цитата(fox1 @ Dec 25 2012, 12:15) *
Заработало на 15 Мгц
Интересно, а как вы определили частоту? Частота DCO зависит как от установки RSEL и DCO, так и от температуры кристалла и напряжения питания. При RSEL=15 и DCO=7 диапазон частот генерируемый DCO находится от 16МГц до 26МГц. См. строку fDCO(15,7) DCO frequency (15, 7) в таблице DCO frequency на странице 42 в datasheet MSP430F249.
Цитата(fox1 @ Dec 25 2012, 12:15) *
Есть какой-либо прошивальщик bsl, который не затирает инфо мем, а шьет только программную память ???
Программируйте через JTAG. Для него в программе обычно есть опция, которая сохраняет область INFO_A неизменной.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.