реклама на сайте
подробности

 
 
> работа с LPM4, проблема выхода из LPM4 связанная с запуском XTAL1
SZ0
сообщение Apr 28 2008, 19:39
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 326
Регистрация: 14-02-06
Пользователь №: 14 331



Проц 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?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
bloodden
сообщение Apr 28 2008, 21:07
Сообщение #2


Бывалый
***

Группа: Validating
Сообщений: 375
Регистрация: 19-10-05
Из: Kiev, UA
Пользователь №: 9 853



А зачем он Вам нужен: LPM4 или ACLK?
Обычно или то, или это используется, но не всё сразу. Может имеет смысл пересмотреть логику работы устройства?


--------------------
Заходите кому надо на мой сайт
Go to the top of the page
 
+Quote Post
rezident
сообщение Apr 28 2008, 22:26
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Используйте не ACLK, а DCO, который за единицы микросекунд запускается. Быстренько сделали, что нужно и тут же опять уснули. Средний ток потребления будет ниже, чем при использовании часового кварца. LFXT за это же время еще прочухаться не успеет.
Go to the top of the page
 
+Quote Post
akl
сообщение Apr 29 2008, 02:32
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 127
Регистрация: 4-04-07
Из: Ижевск
Пользователь №: 26 773



".
.
.
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 и только потом корректно выйти из прерывания.

Сообщение отредактировал akl - Apr 29 2008, 02:36
Go to the top of the page
 
+Quote Post
SZ0
сообщение Apr 29 2008, 05:13
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 326
Регистрация: 14-02-06
Пользователь №: 14 331



Цитата(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
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 06:38
Рейтинг@Mail.ru


Страница сгенерированна за 0.01396 секунд с 7
ELECTRONIX ©2004-2016