Цитата(A_lex_sander @ Jun 17 2014, 19:11)
Прикрепил весь проект спс за помощ
Посмотрел твой проект, решил создать новый
Надо отлаживать новую периферию по частям, а не пытаться завести проект с АЦП, таймером, UART, режимами сна и т.д. Привожу рабочий код из CCSv5, по фронту на P2.5 значение таймера-счетчика записывается в TA1CCR2 и меняется состояние светодиода на P1.0.
#include "msp430g2553.h"
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Отключение сторожевого таймера
// Тактирование микроконтроллера от встроенного
// генератора с калибровкой на 16 МГц
// основной тактовый сигнал MCLK от DCOCLK
BCSCTL1 = CALBC1_16MHZ; // basic clock system
BCSCTL2 = DIVS0; // тактирование MCLK без предделителя, тактирование SMCLK = 16/2 MHz
DCOCTL = CALDCO_16MHZ; // digital controlled oscillator
P1OUT = 0x00;
P2OUT = 0x00; // не сбрасываются после перезапуска
P3OUT = 0x00;
P1SEL = 0x00; // Все выводы портов 1,2 настроить как линии портов ввода-вывода
P1SEL2 = 0x00;
P2SEL = 0x00;
P2SEL2 = 0x00;
P2SEL2 |= BIT5; // вывод P2.5 использовать как вывод основного периферийного модуля
P1DIR = 0xFF; // All P1.x outputs
P1REN = 0x00; // отключение внутренних подтягивающих резисторов от всех выводов порта 1
P1OUT = 0x00; // All P1.x reset
P2DIR = 0xFF; // Все выводы порта 2 настроить как выходы
P2REN = 0x00; // отключение внутренних подтягивающих резисторов от всех выводов порта 2
P2OUT = 0x00; // All P2.x reset
TA1CCTL2 = CM_1 + CCIS_1 + SCS + SCCI + CAP + CCIE;
// CM_1 (1*0x4000u) Capture mode: 1 - pos. edge
// CCIS_1 (1*0x1000u) Capture input select: 1 - CCIxB
TA1CTL = TASSEL_2 | ID_3 | TACLR; // настройка таймера 1
// TASSEL_2 - тактирование таймера-счетчика от SMCLK (8 МГц)
// ID_3 - коэффициент предделителя для тактового сигнала таймера-счетчика равен 8
TA1CTL |= MC_2; // запуск, счет вверх до переполнения
__enable_interrupt(); // общее разрешение прерываний
while (1);
}
#pragma vector = PORT1_VECTOR
__interrupt void PORT1_ISR(void)
{
return;
}
#pragma vector = PORT2_VECTOR
__interrupt void P2_ISR (void)
{
return;
}
#pragma vector = TIMER1_A0_VECTOR
__interrupt void T1_CCR0_ISR(void)
{
// Код обработки прерывания от таймера-счетчика 1 при равенстве TA1R = TA1CCR0
return;
}
#pragma vector = TIMER1_A1_VECTOR
__interrupt void T1_CCR1_ISR(void) // общее прерывание для регистров захвата/сравнения TA1CCR1 и TA1CCR2.
{
TA1IV = 0x00;
P1OUT ^= BIT0;
return;
}
#pragma vector = TIMER0_A0_VECTOR
__interrupt void T0_CCR0_ISR(void)
{
return;
}
#pragma vector = TIMER0_A1_VECTOR
__interrupt void T0_CCR1_ISR(void)
{
return;
}
// Обработчики неиспользуемых прерываний
#pragma vector = ADC10_VECTOR
__interrupt void ADC_ISR(void)
{
return;
}
#pragma vector = COMPARATORA_VECTOR
__interrupt void COMPARATORA_ISR(void)
{
return;
}
// Echo back RXed character, confirm TX buffer is ready first
#pragma vector = USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
IFG2 = 0x00; // обнуление регистра флагов прерываний окончания приема или передачи UART
return;
}
#pragma vector = USCIAB0TX_VECTOR
__interrupt void USCI0TX_ISR(void)
{
IFG2 = 0x00;
return;
}
#pragma vector=WDT_VECTOR // прерывание от сторожевого таймера
__interrupt void watchdog_timer (void)
{
return;
}
#pragma vector=NMI_VECTOR // вектор немаскируемого прерывания по активному фронту на выводе ~RST
__interrupt void nmi_ (void)
{
return;
}