Jump to content
    

DCO 1MHz и состояние регистров DCOCTL, BCSCTL1,2,3 после сброса

Вопросы спецам по MSP430 (сильно не пинайте, с MSP430 раньше не работал, доки читаю):

1) После сброса MSP430F2274 потребляет ток ~150мкА. - Какие биты установлены в DCOCTL, BCSCTL1,2,3 после сброса?

Пытаюсь получить такой же ток установкой регистров - то ~600мкА.

Как правильно запрограммировать эти регистры для 1МГц MCLK с минимальным потреблением?

 

void SetLowPowerMode()
{
  BCSCTL1 |= XT2OFF | DIVA_3;               // ACLK =8/8 =1МГц
//  BCSCTL1 &= ~XTS;                        // LFXT1 = LF XTAL 
  BCSCTL2 |= DCOR;                          // Rosc   
  BCSCTL1 &= ~(RSEL1 + RSEL0);              // RSEL = 4  
}

 

2) И здесь же: необходимо периодически включать внешний кварц на 8МГц для формирования синуса PWM и потом опять включать DCO 1МГц - Как это правильно сделать?

3) И последнее: необходимо в режиме тактирования от внешнего кварца 8МГц по прерываниям таймера 5-10мс выходить из LPM3 опрашивать состояние портов и обратно возвращаться в LPM3 для низкого потребления. Как лучше это реализовать?

 

Share this post


Link to post
Share on other sites

1. Если есть отладчик, то можно посмотреть значение DCO сразу после сброса, из той программы разработки, которой пользуетесь.

Если нет отладчика - просто в первых строках программы считать значение DCO и вывести его на какое-то устройство вывода, которым располагаете (LCD, последовательный порт подключенный к ПК, и т.п.)

 

Именно MSP430F2274 я не программировал, но насколько помню, в младших (F2013, G2xxx) и старших сериях (F5xxx) - DCO был сразу настроен на 1МГц, и как-то ещё его настраивать не было нужды.

Сравните частоту процессора тактируемого от DCO и от XT1=8МГц. Например какую-нить мигалку светодиодом запустите. Если частота мигания отличается в 8 раз - значит всё нормально, DCO настроен на 1МГц.

 

Повышенный ток потребления может ещё возникнуть от оставленных не подключенными PIN-ов, которые настроены на ввод. Нужно все неиспользуемые PIN-ы настраивать на вывод, и в этом случае ток потребления может упасть до тех значений что указаны в даташите.

 

2) И здесь же: необходимо периодически включать внешний кварц на 8МГц для формирования синуса PWM и потом опять включать DCO 1МГц - Как это правильно сделать?

2. И DCO и XT1 быстро отключаются и включаются в регистре статуса процессора SR.

Для переключения между ними, нужно чтобы оба были активны. Убеждаемся, что сигнал на который будем переключаться - стабилизировался, и переключаем MCLK на него. А тот сигнал что больше не нужен - выключаем в регистре статуса процессора.

Внизу картинка, где приведены биты, которые быстро выключают DCO, XT1, CPU и SMCLK. Выключаются только те источники сигнала, которые не тактируют MCLK или SMCLK.

 

3) И последнее: необходимо в режиме тактирования от внешнего кварца 8МГц по прерываниям таймера 5-10мс выходить из LPM3 опрашивать состояние портов и обратно возвращаться в LPM3 для низкого потребления. Как лучше это реализовать?

Просто настроить прерывание от таймера, и включить режим LPM3.

По прерыванию в стеке сохранятся настройки режима LPM3, произойдёт переключение в активный режим, и процессор отработает прерывание. При выходе из прерывания, из стека автоматически восстановятся настройки LPM3 и контроллер опять "уснёт". Никаких дополнительных действий по сохранению LPM3 после завершения прерывания, в обработчике делать не нужно.

post-45309-1532506203_thumb.png

Edited by controller_m30

Share this post


Link to post
Share on other sites

. . .Пытаюсь получить такой же ток установкой регистров - то ~600мкА. . . .

Возможно Вы все нестройки делаете правильно. Для замера тока в режиме LPM программатор-отладчик должен быть отключен от контроллера.

Иначе замер может быть существенно завышен из-за перетока контроллер-JTAG (за SBW не скажу, но тоже возможно).

Частота по умолчанию для DCO у меня полчалась около 1.4 МГц.

В даташите на Ваш контроллер есть таблица, как настроить DCO на нужную частоту-дипазон.

Main DCO Characteristics SLAS504G Pg 35 ТУТ.

Кроме того, для установки DCO могут быть (или не быть для F2274) калибровочные константы, которые прописываются в флеш по определенным адресам.

Они прописаны с завода. Если их затереть, то будут проблемы - надо будет запускать спец. утилиту-пример для калибровки и записи их "обратно".

Для контроля, на какой реально частоте работает контроллер, можно DCO подключить на SMCLK, а его вывести на порт-ногу контроллера

(настроить в начале программы порт как выход и альтернативную ф-ю выдачи SMCLK, для F2274 это P2.1 и P1.4). Смотреть осцилографом.

При этом будет хорошо виден уход в LPM с отключением DCO по командам LPM, и включение DCO по аппаратным прерываниям.

 

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...