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

 
 
> MSP430FR4133 LPM, Прошу помощи
SasaVitebsk
сообщение Feb 10 2016, 14:07
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Очень редкие проекты у меня на MSP. А с режимами сна вообще дел не имел.
Немного повозился - понял, что там вообще свой подход к написанию проектов нужен. А он у меня не выработан. ((
Короче проект маленький. ОС не нужна не разу. Потребление - основное.
Периферии много задействовано. 3 ноги (прерывания), RTC, LCD, 2 таймера, ADC, USART и I2C. На постоянку только ноги, LCD и RTC. То есть LPM3.5.
Остальная периферия запускается разово. По даташиту на МК нашёл табл. 6-1 "Operating Modes (continued)", где указано что I2C и UART работают только в LPM0 (собственно эти узлы тактируются только SMCLK).
Остальная периферия может спать в LPM3.
Я сейчас в ячейке храню битовый список запущенных узлов. Чтобы знать в какой именно режим сна я имею возможность войти. Но у мне не совсем понятно с выходом из сна.
Приведу пример.
Я работаю с усартом. То есть нахожусь в LPM0. Тут приходит прерывание от ножки (геркон) я просыпаюсь выполняю работу запускаю таймер для задержки на дребезг и надо выйти в голову. То есть выйти из LPM0.
Но если я не работаю с UART, то мне надо выходить из прерывания по LPM3.
И я что-то недогоняю. Достаточно ли мне сделать __bic_SR_register_on_exit(LPM3_bits) и это решит проблему в обоих случаях. Или мне требуется анализировать из какого режима я попал в прерывание?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
k155la3
сообщение Feb 10 2016, 15:39
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Извиняюсь за бестактный вопрос.
У Вас есть работающий пример с LPM ?
msp430x54xA_LPM3_1.c Enters LPM3 (ACLK = LFXT1)
msp430x54xA_LPM3_2.c Enters LPM3 (ACLK = VLO)
msp430x54xA_LPM4.c Enters LPM4; LFXT1, REF0 disabled, SVS disabled
slac166m.zip - это для семейства F543xA.


PS - Вы не указали тип процессора.
Вот пример "украденный" из исходников FreeRTOS, serial.c

Код
    /*
     * UART Tx interrupt service routine.
     */
    #pragma vector=UART1TX_VECTOR
    __interrupt void vTxISR( void )
    {
    signed char cChar;
    portBASE_TYPE xTaskWoken = pdFALSE;
    
        /* The previous character has been transmitted.  See if there are any
        further characters waiting transmission. */
    
        if( xQueueReceiveFromISR( xCharsForTx, &cChar, &xTaskWoken ) == pdTRUE )
        {
            /* There was another character queued - transmit it now. */
            U1TXBUF = cChar;
        }
        else
        {
            /* There were no other characters to transmit. */
            sTHREEmpty = pdTRUE;
        }

        /* Make sure any low power mode bits are clear before leaving the ISR. */
        __bic_SR_register_on_exit( SCG1 + SCG0 + OSCOFF + CPUOFF );
    }
    /*-----------------------------------------------------------*/



Сообщение отредактировал k155la3 - Feb 11 2016, 06:18
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st August 2025 - 08:52
Рейтинг@Mail.ru


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