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

 
 
> MSP430 + Timer + Interrupt, Вопросы
Niketa
сообщение Feb 6 2014, 14:17
Сообщение #1


Участник
*

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



Читаю Student Guide and Lab Manual и Family User's Guide и стали мне непонятны некоторые строки из кода лабораторной.
В лабораторной 4 нашел пример кода.
Детально с ним разобрался,но некоторые вещи мне непонятны.


Код
#include <msp430g2553.h>

volatile unsigned int i;

void ConfigWDT(void);
void ConfigClocks(void);
void ConfigLEDs(void);
void ConfigTimerA2(void);

void main(void)
{
  ConfigWDT();
  ConfigClocks();
  ConfigLEDs();
  ConfigTimerA2();

  _BIS_SR(GIE);   // РАЗРЕШАЕМ ПРЕРЫВАНИЕ - ЭТО ПОНЯТНО

  while(1)
  {
   P1OUT |= BIT0;
   for (i = 100; i > 0; i--);
   P1OUT &= ~BIT0;
   for (i = 5000; i > 0; i--);
  }
}

void ConfigWDT(void)
{
WDTCTL = WDTPW + WDTHOLD;                     // Stop watchdog timer
}

void ConfigClocks(void)    // НЕПОНЯТНАЯ ЧАСТЬ,НО ОНА У ВСЕХ ПРИСУТСТВУЕТ,Я РЕШИЛ ОСТАВИТЬ
{
  BCSCTL1 = CALBC1_1MHZ;                     // Set range
  DCOCTL = CALDCO_1MHZ;                      // Set DCO step + modulation
}

void ConfigLEDs(void)
{
  P1DIR = BIT6 + BIT0;                      // P1.6 and P1.0 outputs
  P1OUT = 0;                                // LEDs off
}

void ConfigTimerA2(void)
  {
   TACCR0 = 62500 - 1;    // Период в 62,500 цикла, от 0 до 62,499.                    /// ПОЧЕМУ 62500 ОТСТЧЕТОВ ВСЕГО ????????
   TACCTL0 = CCIE;        // Разрешаем прерывание таймера по достижению значения CCR0.    // ЭТО ПОНЯТНО
   TACTL = TASSEL_2     // ПОНЯЛ ЧТО ЭТО ВЫБОР ИСТОЧНИКА ТАКТОВОГО СИГНАЛА, НО В ЧЕМ МЕЖДУ НИМИ РАЗНИЦА ? ГДЕ ПРОЧЕСТЬ ?
               + ID_3           // ЭТО ПОНЯТНО. НО КАКАЯ ИЗНАЧАЛЬНАЯ ЧАСТОТА КОТОРУЮ МЫ ДЕЛИМ ?
                + MC_1;     // ПОНЯТНО
  }

#pragma vector=TIMER0_A0_VECTOR          // НИ В ОДНОЙ ИЗ ВЫШЕ ОПИСАННЫХ КНИЖЕК НЕ НАПИСАНО ПОЧЕМУ ТАКОЙ СИНТАКСИС
__interrupt void Timer_A (void)                     // ПОЧЕМУ ТАКОЙ СИНТАКСИС ?
{
  P1OUT ^=BIT6;                                 
}



1. Если выше описано что в таймере 62500 отсчетов. А так же включен делитель частоты /8 - то изначальная частота была 8 *62500 = 500кГц ???
Т.е. SMCLK что в коде включен имеет такую частоту ?

2. Как мне реализовать 2 таймера ?
Мне нужно чтоб один обращался к прерыванию с частотой 48кГц , а второй 200 Гц.
Идея в том что 48кГц будет забираться данные с АЦП , потом еще и фильтроваться будет.
А 200гц - вывод на индикатор



Сообщение отредактировал Niketa - Feb 6 2014, 15:03
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Mihey_K
сообщение Feb 7 2014, 14:52
Сообщение #2


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

Группа: Участник
Сообщений: 156
Регистрация: 27-09-06
Из: Irkutsk
Пользователь №: 20 747



1. Смотрите внимательно юзер мануал

Пример реализации тут в файле msp430g2x33_adc10_13.c.
Запускайте измерения по таймеру и не надо никаких прерываний таймера, а просто по прерыванию АЦП читайте.
2. Тут уж как реализуете. Сложно оценить.
3. Это внешний кварцевый резонатор, имеет очень стабильную частоту, заданную на заводе. Частоты бывают разные до десятков МГц. Наверное слышали выражение "кварцевые часы". Так называют часы, секунды которых задает кварцевый резонатор частотой 32768 Гц. Например без кварца не сделать часы, будильник и прочие критичные ко времени выполнения задачи, чтобы время отсчета таймера не плыло.
4. Пример для справки. Вместо TA0 - TA, т.к. для msp430g2553 таймеры зовутся иначе.
Код
void Init_Timer0 (void){
    TA0CTL = TIMER0_SOURCE_CLK    |    /// Источник тактирования, подставьте своё
            TIMER0_SOURCE_DIV;            /// Предделитель частоты тактирования, подставьте своё
    /// Значение счетчика для сравнения, подставьте своё
    TA0CCR1 = (SMCLK_FREQUENCY_HZ /  TIMER0_DIV_VALUE) / TIMER0_CCR1_RATE_HZ;
    TA0CCR2 = (SMCLK_FREQUENCY_HZ /  TIMER0_DIV_VALUE) / TIMER0_CCR2_RATE_HZ;
    TA0CCTL1 = CCIE;            /// Разрешает прерывание от CCR1
    TA0CCTL2 = CCIE;            /// Разрешает прерывание от CCR2
    /// Сбрасывает флаг, задает режим бесконечного счета, т.е. запускает таймер
    TA0CTL |= TACLR | MC_2;// | TAIE; /// ВАЖНО, прерывание общее от таймера не включаем
}

#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer0_A0_ISR( void ) {

    switch(__even_in_range(TA0IV,14))
    {
        case  0:                                     // No interrupt
            break;
        case  0x02:                                 // CCR1
        
                /** Код **/

        case  0x04:                                    // CCR2

                /** Код **/

        case  0x06:                                    // CCR3
            break;
        case  0x08:                                    // CCR4
            break;
        case 0x0A:                                    // CCR5
            break;
        case 0x0C:                                    // CCR6
            break;
        case 0x0E:                                     // overflow
            break;
        default:
            break;
    }
}


Допустимые источники прерываний для своего МК смотреть в юзер мануале в разделе 12.3.5 TAIV, Timer_A Interrupt Vector Register.

Сообщение отредактировал Mihey_K - Feb 7 2014, 14:54


--------------------
Блог о разработке на CC430, SIM900, GPS, ARM и не только...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Niketa   MSP430 + Timer + Interrupt   Feb 6 2014, 14:17
- - E.V.G.   1. Частота прерываний от TACCR0=SMCLK/ID3/TACCR0=1...   Feb 6 2014, 20:23
- - Niketa   Вот я написал Код. С частотой 40кГц считывается АЦ...   Feb 7 2014, 13:15
- - Niketa   1. Я знаю что что неправильно АЦП включать в преры...   Feb 7 2014, 17:13
- - Mihey_K   Цитата3. Частота маловата. в комплекте есть такой ...   Feb 8 2014, 03:39
|- - rezident   Цитата(Mihey_K @ Feb 8 2014, 08:39) Чтобы...   Feb 8 2014, 11:46
- - Mihey_K   Rezident, хорошее пояснение. Скажу честно, не замо...   Feb 8 2014, 13:17
|- - rezident   Цитата(Mihey_K @ Feb 8 2014, 18:17) Друго...   Feb 8 2014, 17:54
- - Niketa   АЦП считывает с частотой 40кГц по таймеру Так же ...   Feb 9 2014, 22:27
|- - rezident   Цитата(Niketa @ Feb 10 2014, 03:27) АЦП с...   Feb 10 2014, 03:46
- - Mihey_K   Ёшкин кот, зачем математику-то всю в прерывание за...   Feb 10 2014, 06:41
- - Niketa   RE: MSP430 + Timer + Interrupt   Feb 15 2014, 20:43
- - Niketa   //////////////////////////////////////////////////...   Feb 16 2014, 13:13
- - PRidon   Куча примеров на сайте TI. Прям под твой МК. И уар...   Feb 17 2014, 07:22


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

 


RSS Текстовая версия Сейчас: 19th August 2025 - 07:02
Рейтинг@Mail.ru


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