Darth_Vader 0 6 ноября, 2014 Опубликовано 6 ноября, 2014 · Жалоба Добрый день! Разбираюсь с MSP430 Launchpad с установленным G2553. Подскажите, почему не происходит прерывание по Timer1? #include <msp430.h> /* * main.c */ void main(void) { WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer // Инициализация светодиодов P1DIR = BIT0 + BIT6; P1OUT = 0; // Инициализация таймера Timer1 TA1CCR0 = 480; // период таймера TA1CCR1 = 120; // яркость свечения LED1 (120/480) TA1CCR2 = 360; // яркоcть свечения LED2 (360/480) TA1CCTL0 = CCIE; // разрешаем прерывание от регистра TA1CCR0 TA1CCTL1 = CCIE; // разрешаем прерывание от регистра TA1CCR1 TA1CCTL2 = CCIE; // разрешаем прерывание от регистра TA1CCR2 TA1CTL = TASSEL_2 + ID_0 + MC_1; // Источник тактирования SMCLK (1 МГц), /1, считать до TA1CCR0 __enable_interrupt(); while(1); } #pragma vector=TIMER1_A0_VECTOR __interrupt void Timer1 (void) { P1OUT ^=BIT6; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 16 6 ноября, 2014 Опубликовано 6 ноября, 2014 · Жалоба емнип, ещё общее разрешение IE всего таймера где-то в контролах Соврал. У вас, похоже, SMCLK нигде не инициализируется. Во всяком случае, не видно, откуда он 1МГц. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 52 6 ноября, 2014 Опубликовано 6 ноября, 2014 · Жалоба . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Darth_Vader 0 6 ноября, 2014 Опубликовано 6 ноября, 2014 · Жалоба На сколько я помню, SMCLK по умолчанию 1 МГц. Я уже разобрался, всё заработало. Надо было вот так сделать: #pragma vector=TIMER1_A0_VECTOR __interrupt void Timer1_A0 (void) { P1OUT = BIT0 + BIT6; TA1IV = 0; } #pragma vector=TIMER1_A1_VECTOR __interrupt void Timer1_A1 (void) { switch(TA1IV){ case TA1IV_TACCR1: P1OUT &= ~BIT0; break; case TA1IV_TACCR2: P1OUT &= ~BIT6; break; default: break; } TA1IV = 0; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
evgeni-sur 0 6 ноября, 2014 Опубликовано 6 ноября, 2014 · Жалоба Извиняюсь, посмотрел бегло. А тот ли вектор прерывания? Там же 2 вектора и в основном мне приходилось работать со вторым. Если вектор прерывания не обработан процессор пойдет через перезагрузку. Поставьте брекпоинт на начало main и увидите. Этот МК и многие другие MSP я юзал, могу поделится опытом, только я не часто бываю сдесь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться