LINUX.ORG.RU

История изменений

Исправление alegz, (текущая версия) :

UTCTL0 |= SSEL1 + SSEL0 + URXSE;          // UCLK = SMCLK, start edge detect

Никогда не понимал, зачем так себя мучить. Есть же техасовская DriverLib (MSPWare430) с человеческими именами функций, она даже в исходниках.

Кварц 32768 Гц подключен к соответствующим ножкам.

#define DELTA 488                           // Target DCO = DELTA*(4096) = 2MHz

Не знаю про серию 1xxx, но в 5xxx эта подсистема называется UCS. Кури про нее доки. Для внешнего кварца, возможно, надо еще ноги XIN/XOUT настраивать. Взрослые дяди делают как-то так:

void clocks_init(unsigned long freq)
{
    UCS_bypassXT1(UCS_XT1_HIGH_FREQUENCY);
    UCS_clockSignalInit(UCS_ACLK, UCS_XT1CLK_SELECT, UCS_CLOCK_DIVIDER_1);
    UCS_clockSignalInit(UCS_MCLK, UCS_XT1CLK_SELECT, UCS_CLOCK_DIVIDER_1);
    UCS_clockSignalInit(UCS_SMCLK, UCS_XT1CLK_SELECT, UCS_CLOCK_DIVIDER_1);
    UCS_setExternalClockSource(freq, 0);

    __bis_SR_register(SCG0);    // выкл FLL
    __bis_SR_register(SCG1);    // выкл DCO
}

И зря ты пока с режимами пониженного энергопотребления связываешься:

__bis_SR_register(LPM3_bits + GIE);     // Enter LPM3, int's active

Там бывает много всякой неочевидной магии. Сначала сделай чтоб оно вообще хоть как-то заработало.

Исходная версия alegz, :

UTCTL0 |= SSEL1 + SSEL0 + URXSE;          // UCLK = SMCLK, start edge detect

Никогда не понимал, зачем так себя мучить. Есть же техасовская DriverLib (MSPWare430) с человеческими именами функций, она даже в исходниках.

Кварц 32768 Гц подключен к соответствующим ножкам.

#define DELTA 488                           // Target DCO = DELTA*(4096) = 2MHz

Не знаю про серию 1xxx, но в 5xxx эта подсистема называется UCS. Кури про нее доки. Для внешнего кварца, возможно, надо еще ноги XT0/XT1 настраивать. Взрослые дяди делают как-то так:

void clocks_init(unsigned long freq)
{
    UCS_bypassXT1(UCS_XT1_HIGH_FREQUENCY);
    UCS_clockSignalInit(UCS_ACLK, UCS_XT1CLK_SELECT, UCS_CLOCK_DIVIDER_1);
    UCS_clockSignalInit(UCS_MCLK, UCS_XT1CLK_SELECT, UCS_CLOCK_DIVIDER_1);
    UCS_clockSignalInit(UCS_SMCLK, UCS_XT1CLK_SELECT, UCS_CLOCK_DIVIDER_1);
    UCS_setExternalClockSource(freq, 0);

    __bis_SR_register(SCG0);    // выкл FLL
    __bis_SR_register(SCG1);    // выкл DCO
}

И зря ты пока с режимами пониженного энергопотребления связываешься:

__bis_SR_register(LPM3_bits + GIE);     // Enter LPM3, int's active

Там бывает много всякой неочевидной магии. Сначала сделай чтоб оно вообще хоть как-то заработало.