msp430f5435A модуль тактирования настройка
msp430f5435A модуль тактирования настройка
Добрый день, столкнулся с серьёзной проблемой, в данном микроконтроллере.
Вообщем надо настроить UCS (модуль тактирования микрухи), а если точнее то непонятно с внутренним цифровым генератором DCO.
После прочтения Guida с сайта TI, понял следующее :
Сам модуль настраивается регистрами UCSCTL0....UCSCTL8.
В регистрах UCSCTL0 и UCSCTL1 , есть биты,отвечающие за настройку DCO :
DCORSEL - отвечает за выбор диапазона частоты
DCO(биты)- отвечают как написано за разделение диапазона на 32 части
MOD - отвечает за переход от частоты выбранной с помощью бит DCO к следующему DCO+1
на стр 52 самого Dataseet на этот микроконтроллер есть таблица, в которой описывается влияние этих бит на выбор частоты работы DCO, но я не понимаю как вообщем мне настроить её...
Если кому-то бдет не лень открыть этот Guide и Datasheet и помочь мне разобраться, или если кто-то уже сталкивался с семействами 5,6 msp430и знает как это делается, то очень прошу вашей помощи. По больешй части у меня трудности с переводом, т.к. получается очень противоречиво...
Вообщем надо настроить UCS (модуль тактирования микрухи), а если точнее то непонятно с внутренним цифровым генератором DCO.
После прочтения Guida с сайта TI, понял следующее :
Сам модуль настраивается регистрами UCSCTL0....UCSCTL8.
В регистрах UCSCTL0 и UCSCTL1 , есть биты,отвечающие за настройку DCO :
DCORSEL - отвечает за выбор диапазона частоты
DCO(биты)- отвечают как написано за разделение диапазона на 32 части
MOD - отвечает за переход от частоты выбранной с помощью бит DCO к следующему DCO+1
на стр 52 самого Dataseet на этот микроконтроллер есть таблица, в которой описывается влияние этих бит на выбор частоты работы DCO, но я не понимаю как вообщем мне настроить её...
Если кому-то бдет не лень открыть этот Guide и Datasheet и помочь мне разобраться, или если кто-то уже сталкивался с семействами 5,6 msp430и знает как это делается, то очень прошу вашей помощи. По больешй части у меня трудности с переводом, т.к. получается очень противоречиво...
- Реклама
Re: msp430f5435A модуль тактирования настройка
Все правильно Вы поняли. Если FLL не используется, то настроить генератор на определенную частоту можно с помощью DCORSEL и DCOx при MOD=0 (модулятор отключен). Например, для настройки на 1 мгц по Fig 11 в ДШ на F5435A определяем что DCORSEL может быть 0, 1, или 2. Положим DCORSEL=1, тогда по тому-же графику определяем DCOx=20 (примерно). Точнее частоту можно подогнать измерив ее на выходном пине и варьируя DCOx (грубо) и MOD (плавно).
Re: msp430f5435A модуль тактирования настройка
Спасибо, как раз сейчас в Guide прочитал про то, что FLL (плохо понял что это) от кварца 32kHz корректирует частоту DCOCLK на 2.097152 MHz, меня это устраивает)Ser60 писал(а):Все правильно Вы поняли. Если FLL не используется, то настроить генератор на определенную частоту можно с помощью DCORSEL и DCOx при MOD=0 (модулятор отключен). Например, для настройки на 1 мгц по Fig 11 в ДШ на F5435A определяем что DCORSEL может быть 0, 1, или 2. Положим DCORSEL=1, тогда по тому-же графику определяем DCOx=20 (примерно). Точнее частоту можно подогнать измерив ее на выходном пине и варьируя DCOx (грубо) и MOD (плавно).
Вот только не понял, если я отключу модулятор, будет ли данная калибровка проходить, ну это уже опытным путём буду узнавать)
Re: msp430f5435A модуль тактирования настройка
Только учтите, что хотя FLL дефолтно и настроен на работу с кварцем, соответствующие пины корпуса сконфигурированы дефолтно как I/O и для работы с кварцем должны быть переконфигурированы. В таком случае FLL понимает, что кварцевый генератор не запускается и заменяет его на RFO, который калиброван изготовителем на работу на около-кварцевой частоте. При работе с FLL модулятор управляется непосредственно от FLL, который дефолтно активизирован по подаче питания.
Re: msp430f5435A модуль тактирования настройка
Спасибо, это я учёл, у меня на тех пинах уже висит часовой кварц, так что переконфигурировать их мне необязательно.
У меня возникла проблема с прерыванием по переполнению таймера
я делаю следующее:
вот собственно что-то ещё по идее должно быть...
+ как выглядит само описание прерывания...в примерах написано что-то типа
Но это для другого семейства, а как он выглядит для этого контера я не понимаю...вообще где откуда это взять, облазил уже и даташит, и Guide, и хедеры в которых по идее они должны быть....
Просто хочу понять откуда это всё берётся.....
У меня возникла проблема с прерыванием по переполнению таймера
я делаю следующее:
Код: Выделить всё
__enable_interrupt(); // разрешаю маскируемые прерывания
UCSCTL4|=SELM_3|SELS_3; // настраиваю модуль синх частот
//SELM_3 - MCLK работает от DCOCLK , fDCOCLK = 2.097152 MHz.
//SELS_3 - SMCLK работает от DCOCLK;
TA0CCR0|=0x51EC; // TA0CCR0 - регистр сравнения 51EC = 20972 = 10мс для 2.097МГц
TA0CTL|=TASSEL1|MC0|TAIE; // TA0CTL|=TASSEL1|MC0|TAIE; TA0CTL - регистр настройки таймера А
// TASSEL1 - тактирование от SMCLK
// MC0 - счет от 0000h до TAxCCR0
// TAIE - включаем прерывание+ как выглядит само описание прерывания...в примерах написано что-то типа
Код: Выделить всё
/* Обработчики прерываний */
#pragma vector = TIMERA0_VECTOR
__interrupt void CCR0_ISR(void) {
if (++i == 120) {
P1OUT ^= RLY1;
i=0;
}
} // CCR0_ISRПросто хочу понять откуда это всё берётся.....
- Реклама
Re: msp430f5435A модуль тактирования настройка
хм...кажется нашел...хотя не понимаю как так получается, что имя TIMER_A0 вообще произвольное...и препроцессор #pragma vector вызывает недоумение..)
я прав, в IAR обработчик прерываний выглядит так?)
Код: Выделить всё
#pragma vector = TIMER1_A0_VECTOR
__interrupt void TIMER_A0(void) // прерывание по флагу TA0CCR0 CCIFG0
{
}Re: msp430f5435A модуль тактирования настройка
Организация прерывания таймета в main() выполнена верно. Касательно имен обработчила прерываний, в ДШ на девайс на стр. 16 имеется таблица векторов прерываний. Зчая какой именно вектор нужен, для нахождения его имени в IAR открываем header МК в фолдере inc установки системы. В самом конце файла смотрил под каким именем обработчик известен IAR. В Вашем случае это будет TIMER0_A0_VECTOR или TIMER0_A1_VECTOR в зависимости от желаемого адреса прерывания (см. ДШ).
Re: msp430f5435A модуль тактирования настройка
да я именно так и сделал) спасибо за ответы)Ser60 писал(а):Организация прерывания таймета в main() выполнена верно. Касательно имен обработчила прерываний, в ДШ на девайс на стр. 16 имеется таблица векторов прерываний. Зчая какой именно вектор нужен, для нахождения его имени в IAR открываем header МК в фолдере inc установки системы. В самом конце файла смотрил под каким именем обработчик известен IAR. В Вашем случае это будет TIMER0_A0_VECTOR или TIMER0_A1_VECTOR в зависимости от желаемого адреса прерывания (см. ДШ).
- BCluster
- Собутыльник Кота
- Сообщения: 2512
- Зарегистрирован: Пн апр 06, 2009 19:33:29
- Откуда: Молдова, Кишинев
- Контактная информация:
Re: msp430f5435A модуль тактирования настройка
Чтоб много об этом не думать в будущем, можно использовать хорошую библиотечку www.ti.com/tool/msp430ware, там и таймеры и много чего интересного есть.
Также есть hal_UCS модуль, который тоже предоставляет абстракции для инициализации клока для msp430
Также есть hal_UCS модуль, который тоже предоставляет абстракции для инициализации клока для msp430
Re: msp430f5435A модуль тактирования настройка
сначала лучше понять всё это, у меня достаточно пробелов в знаниях и их надо восполнять, готовыми библиотеками конечно пользоваться проще, но вообщем пока что не мой вариант) но спасибо)BCluster писал(а):Чтоб много об этом не думать в будущем, можно использовать хорошую библиотечку http://www.ti.com/tool/msp430ware, там и таймеры и много чего интересного есть.
Также есть hal_UCS модуль, который тоже предоставляет абстракции для инициализации клока для msp430
- BCluster
- Собутыльник Кота
- Сообщения: 2512
- Зарегистрирован: Пн апр 06, 2009 19:33:29
- Откуда: Молдова, Кишинев
- Контактная информация:
Re: msp430f5435A модуль тактирования настройка
Я для будущего и дал
На мой взгляд у мсп430 вообще система тактирования не сильно для людей сделана )
Re: msp430f5435A модуль тактирования настройка
взялся за освоение MSP430WARE
слепил следующий код в IARe (CCS только буду осваивать, кстате что вы про него можете сказать?)
И всё бы ничего, да только вместо необходимых 10мс генерируется что-то другое...Диоды моргают, но частота не та...пришёл к выводу что сигналы SMCLK и MCLK не настраиваются на частоту 2МГц ...
вроде должны сами, вообщем опять непонятки...
Кстати пробовал XIN и XOUT (на нем внешний 32кГц) вкли откл в том проекте, который четко выдавал мне 10мс, разницы не было, т.е. там есть внутренний кварц (мб я и читал об этом но видимо забыл)
слепил следующий код в IARe (CCS только буду осваивать, кстате что вы про него можете сказать?)
И всё бы ничего, да только вместо необходимых 10мс генерируется что-то другое...Диоды моргают, но частота не та...пришёл к выводу что сигналы SMCLK и MCLK не настраиваются на частоту 2МГц ...
вроде должны сами, вообщем опять непонятки...
Кстати пробовал XIN и XOUT (на нем внешний 32кГц) вкли откл в том проекте, который четко выдавал мне 10мс, разницы не было, т.е. там есть внутренний кварц (мб я и читал об этом но видимо забыл)
Код: Выделить всё
#include "driverlib.h"
//******************************************************************************
//!
//! Empty Project that includes driverlib
//!
//******************************************************************************
int i=0;
#pragma vector=TIMER0_A0_VECTOR
__interrupt void TIMERA0 (void)
{
i++;
//GPIO_setOutputLowOnPin(GPIO_PORT_P1,GPIO_PIN5);
//GPIO_setOutputLowOnPin(GPIO_PORT_P1,GPIO_PIN7);
if (i==100)
{
GPIO_setOutputLowOnPin(GPIO_PORT_P1,GPIO_PIN5);
GPIO_setOutputLowOnPin(GPIO_PORT_P1,GPIO_PIN7);
}
if (i==200)
{
GPIO_setOutputHighOnPin(GPIO_PORT_P1,GPIO_PIN5);
GPIO_setOutputHighOnPin(GPIO_PORT_P1,GPIO_PIN7);
i=0;
}
}
void main(void)
{
WDT_A_hold(WDT_A_BASE); //WDT_A_BASE 0x015C
// base adress UCS: 0x160
// UCS_SMCLKOn(0x160);
UCS_clockSignalInit(0x160,UCS_MCLK,UCS_DCOCLK_SELECT,UCS_CLOCK_DIVIDER_1);
UCS_clockSignalInit(0x160,UCS_SMCLK,UCS_DCOCLK_SELECT,UCS_CLOCK_DIVIDER_1);
// base adress TimerA0: 0x0340
TIMER_A_configureContinuousMode(0x0340,
TIMER_A_CLOCKSOURCE_SMCLK,
TIMER_A_CLOCKSOURCE_DIVIDER_1,
TIMER_A_TAIE_INTERRUPT_DISABLE,
TIMER_A_DO_CLEAR
);
TIMER_A_clearCaptureCompareInterruptFlag(0x0340,
TIMER_A_CAPTURECOMPARE_REGISTER_0
);
TIMER_A_initCompare(0x0340,
TIMER_A_CAPTURECOMPARE_REGISTER_0,
TIMER_A_CAPTURECOMPARE_INTERRUPT_ENABLE,
TIMER_A_OUTPUTMODE_OUTBITVALUE,
0x51EC
);
TIMER_A_startCounter(0x0340,TIMER_A_CONTINUOUS_MODE);
GPIO_setAsOutputPin(GPIO_PORT_P1,GPIO_PIN5);
GPIO_setAsOutputPin(GPIO_PORT_P1,GPIO_PIN7);
GPIO_setOutputHighOnPin(GPIO_PORT_P1,GPIO_PIN5);
GPIO_setOutputHighOnPin(GPIO_PORT_P1,GPIO_PIN7);
// __bis_SR_register(LPM0_bits + GIE);
// __no_operation();
__enable_interrupt();
while(1)
{
}
}Re: msp430f5435A модуль тактирования настройка
поменял TIMER_A_startCounter(0x0340,TIMER_A_UP_MODE); и всё заработало
..как всегда сидишь часа 2 ломаешь голову, потом за 5 минут приходит озарение)
..как всегда сидишь часа 2 ломаешь голову, потом за 5 минут приходит озарение)
- BCluster
- Собутыльник Кота
- Сообщения: 2512
- Зарегистрирован: Пн апр 06, 2009 19:33:29
- Откуда: Молдова, Кишинев
- Контактная информация:
Re: msp430f5435A модуль тактирования настройка
Про CCS ничего плохого не скажу. Но основная масса проф. кода написана именно на IAR. Почему - не знаю. Код на IAR в общем случае компактнее и быстрее.
Re: msp430f5435A модуль тактирования настройка
на работе от гуру я услышал про то, что можно писать под несколько ядер на CCS дл продукции TI, но я в этом ещё 0 и вообще как-то видимо не так понял его слова или запомнил неправильно...


