Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: работа с LPM4
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
SZ0
Проц 430F2002. ACLK тактируется от XTAL1 32768 Гц. Остальное от DCO. При входе в LPM4 ACLK выключается. А при выходе (поступило прерывание) биты CPUOFF, SCG1 и OSCOFF в SR сбрасываются. Что приводит к запуску ACLK. А т.к. на его запуск требуется время, то такой "холодный" старт сразу приводит к ошибке. В итоге (пока писал вопрос) решил вот так выходить из положения:

программа входит в LPM4. При нажатии клавиши происходит выход из LPM4. Но т.к. XTAL1 не может сразу запуститься, это приводит к обработке ошибки запуска XTAL1. И по вектору обработки ошибки снова происходит его настройка.

Код
;вектора

ORG    0xFFFE
DC16    init    ;
ORG    0xFFFC
DC16    error_
ORG    0xFFE4    ;
DC16    P1_IO


init:

;настройки регистров....

bis.b    #_key,&P1OUT    ;
bis.b    #_key,&P1REN    ;P1.5 pullup
bis.b    #_key,&P1IES    ;P1.5 hi/low edge

;запуск XTAL1
call    #on_XTAL1

eint

main:

bic.b    #_key,&P1IFG;P1.5 IFG Cleared
bis.b    #_key,&P1IE;P1.5 Interrupt enabled
bis    #LPM4,SR    ;LPM4
nop

jmp    main

;обработка нажатия клавиши

P1_IO:

bic    #LPM4,0(SP);LPM4
bic.b    #_key,&P1IFG

reti

;ошибка XTAL1

error_:
    call    #on_XTAL1
    reti


Может есть другой способ выхода из LPM4 при использовании внешнего кварца для XTAL1?
bloodden
А зачем он Вам нужен: LPM4 или ACLK?
Обычно или то, или это используется, но не всё сразу. Может имеет смысл пересмотреть логику работы устройства?
rezident
Используйте не ACLK, а DCO, который за единицы микросекунд запускается. Быстренько сделали, что нужно и тут же опять уснули. Средний ток потребления будет ниже, чем при использовании часового кварца. LFXT за это же время еще прочухаться не успеет.
akl
".
.
.
bic #LPM4,0(SP);LPM4
bic.b #_key,&P1IFG

reti

;ошибка XTAL1

error_:
call #on_XTAL1
reti"

Если сделать так:
.
.
.
bic #LPM4,0(SP);LPM4
bic.b #_key,&P1IFG

error:
call #on_XTAL1
reti
т.е. без ошибки дождаться "устаканивания" XTAL1 и только потом корректно выйти из прерывания.
SZ0
Цитата(bloodden @ Apr 29 2008, 03:07) *
А зачем он Вам нужен: LPM4 или ACLK?


Изучаю процы MSP, поэтому и интересно погонять (изучить) его режимы работы и программные нюансы.

Вообще склоняюсь в данной программе не использовать XTAL1, т.к. DCO достаточно. А возня с XTAL1 для изучения.

В мане написано по поводу входа в LPM:
т.к. проц может спать продолжительное время, то возможно влияние температуры на частоту DCO. И по пробуждению, частота может сильно отличаться от калиброванной. Отсюда следует что в LPM желательно входить с понижением частоты DCO до минимума. А после пробуждения выставлять нужную. Насколько это оправдано?

Цитата(akl @ Apr 29 2008, 08:32) *
".
.
.
bic #LPM4,0(SP);LPM4
bic.b #_key,&P1IFG

reti

;ошибка XTAL1

error_:
call #on_XTAL1
reti"

Если сделать так:
.
.
.
bic #LPM4,0(SP);LPM4
bic.b #_key,&P1IFG

error:
call #on_XTAL1
reti
т.е. без ошибки дождаться "устаканивания" XTAL1 и только потом корректно выйти из прерывания.


А вот здесь я немного запутался...
как только поступает прерывание (нажатие кнопки), откуда запускается проц? Извращаясь с кодом, и пытаясь разобраться откуда начинается работа, я понял что выход из прерывания запускает код с места error_: а не с P1_IO:, куда он попадает только после запуска XTAL1 из обработки в error_

cranky.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.