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

 
 
> 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 8 2014, 03:39
Сообщение #2


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

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



Цитата
3. Частота маловата. в комплекте есть такой генератор.
Наверное плохо объяснил - кварцы бывают разных частот, е не только 32768.
Чтобы посчитать кол-во тактов, надо открыть ассемблерный листинг и считать, сколько команд МК будет исполнять. Время выполнения одной команды фиксировано - 1 такт, кроме команд условий и перехода. 1 такт - это 1/Fosc. Лучше написать и потом оптимизировать, чем считать. 16 МГц это большая скорость, думаю не заметите, если конечно не брать тысячи отсчетов


--------------------
Блог о разработке на CC430, SIM900, GPS, ARM и не только...
Go to the top of the page
 
+Quote Post
rezident
сообщение Feb 8 2014, 11:46
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Mihey_K @ Feb 8 2014, 08:39) *
Чтобы посчитать кол-во тактов, надо открыть ассемблерный листинг и считать, сколько команд МК будет исполнять. Время выполнения одной команды фиксировано - 1 такт, кроме команд условий и перехода. 1 такт - это 1/Fosc.

Не вводите в заблуждение начинающего! 1111493779.gif Как мне кажется, упоминая об условных командах и переходах, вы путаете (или смешиваете) длину команды (количество слов, занимаемое командой в памяти) и количество машинных циклов ядра, необходимых для исполнения команды. Одноцикловых команд у MSP430 весьма немного - в основном это те команды, которые работают исключительно с регистрами. Большинство же команд (даже некоторые из тех, которые занимают в памяти всего одно слово) выполняются за 2-6 циклов. Таблицы с описанием команд, их длиной и количеством циклов, есть в User's manual. Поскольку у MSP430 две разновидности ядра - CPU, поддерживающее команды с 16-битной адресацией, и CPUX, поддерживающее команды с 20-битной адресацией, то для ознакомления можно почитать, например, MSP430x2xx Family User's Guide (Rev. J), поскольку там описаны обе разновидности. Узнать время выполнения куска программы можно и в симуляторе. У IAR C-Cpy, например, в составе CPU Registers для этого есть CYCLECOUNTER.
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
- - Mihey_K   1. Смотрите внимательно юзер мануал Пример реализ...   Feb 7 2014, 14:52
- - Niketa   1. Я знаю что что неправильно АЦП включать в преры...   Feb 7 2014, 17:13
- - 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 Текстовая версия Сейчас: 11th August 2025 - 13:20
Рейтинг@Mail.ru


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