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

 
 
> совместный запуск таймеров TIMER A и TIMER B, TIMER A формирует 10мс интервалы и запускает TIMER B на подсчет f
Make_Pic
сообщение Jul 28 2018, 04:53
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 9-10-04
Из: Россия, Пермь
Пользователь №: 828



Процессор MSP430F2274 тактируется от DCO 1МГц/4 = 250кГц, но частота RC генратора - DCO нестабильна от температуры и напряжения. Использование калибровки резисторов с последующей записью в калибровочную область памяти не подходит из за длительности процедуры и записи во флеш периодической. Выбран вариант поправочного коэффициента- делителя, который измеряется подсчетом импульсов частоты MCLK DCO 250кГц таймером TIMER B. Временной интервал подсчета формирует TIMER A от 8МГц кварца.

Не могу сделать совместный запуск таймеров TIMER A и TIMER B - Подскажите пожалуйста как это лучше сделать?

Заранее спасибо!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
MrYuran
сообщение Jul 30 2018, 09:10
Сообщение #2


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Код
/**
    \brief Калибровочная переменная
    Хранит количество тиков ТВ в периоде ACLK
*/
unsigned int TB_Tkts_In_ms = 4800;

static unsigned int Last_TB_Tkts = 4800;
static unsigned int LastTBR = 0;
static unsigned int DeltaTBR = 1100;

/**
*    \brief Флаг запуска калибровки DCO
*/
char NeedToCalibrateDCO = 1;


void SetDCO()
{
    BCSCTL1 = DIVA_3            // ACLK=LF XTAL, DIVA=8, RSEL=7
            | 0x07;                // max DCO freq

    BCSCTL2 = (DIVS_0)          // SMCLK=DCOCLK, DIVS=1,
            |(SELM_0)|(DIVM_0);    // DIVM=1, MCLK=DCOCLC

    DCOCTL = DCO0 | DCO1 | DCO2;                //DCO около 5МГц
    FCTL2 = FWKEY | FSSEL_1 | FN3 | FN2 | FN1;  // MCLK/14 for Flash Timing Generator

    TACTL = TASSEL1 | TACLR;
    TBCTL = TBSSEL1 | TBCLR | MC_2;     // Непрерывный режим, SMCLK

    TBCCTL6 = CCIS_1            // Вход захвата - CCIxA - ACLK
            | CM_1              // Захват по переднему фронту
            | CAP               // Режим захвата
            | CCIE;             // Прерывание разрешено

    //----------- Инициализация переменных ----------------------------
    TB_Tkts_In_ms = 4800;
    Last_TB_Tkts = 4800;
    LastTBR = 0;
    DeltaTBR = 1100;
    NeedToCalibrateDCO = 0;
    //-----------------------------------------------------------------
}

/**
*   Прерывание по захвату ACLK
*   \brief Определяет период ACLK в тактах ТВ
*/
static interrupt (TIMERB1_VECTOR) Timerb_ccr1(void) __attribute__ ((used));
interrupt (TIMERB1_VECTOR) Timerb_ccr1(void)
{
    switch(TBIV)
    {
        case 12: // прерывание по захвату ACLK, калибровка DCO

            DeltaTBR = TBCCR6 - LastTBR;
            LastTBR = TBCCR6;

            break;
    }
}


Ровно 10 лет прошло )

Это для F149, если что


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Make_Pic
сообщение Aug 9 2018, 13:35
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 9-10-04
Из: Россия, Пермь
Пользователь №: 828



Цитата(MrYuran @ Jul 30 2018, 12:10) *
Код
/**
    \brief Калибровочная переменная
    Хранит количество тиков ТВ в периоде ACLK
*/
...
/**
*   Прерывание по захвату ACLK
*   \brief Определяет период ACLK в тактах ТВ
*/
static interrupt (TIMERB1_VECTOR) Timerb_ccr1(void) __attribute__ ((used));
interrupt (TIMERB1_VECTOR) Timerb_ccr1(void)
{
    switch(TBIV)
    {
        case 12: // прерывание по захвату ACLK, калибровка DCO

            DeltaTBR = TBCCR6 - LastTBR;
            LastTBR = TBCCR6;

            break;
    }
}


Ровно 10 лет прошло )

Это для F149, если что

Не совсем понял, что вы делаете с полученной дельтой в прерывании. И если я правильно понял, таймер считает на переполнение от ACLK DCO - RC генератора, А таймер И отчего запущен - у вас оба таймера тактируются от ACLK (TACTL = TASSEL1, TBCTL = TBSSEL1) - где стабильный кварцеванный источник? Как вы калибруете тактовый сигнал?
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd August 2025 - 04:24
Рейтинг@Mail.ru


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