Пытаюсь запустить таймер в режиме захвата. Возникло несколько вопросов.
Мне нужно ловить сигнал логического "0". Т.е. на входе постоянно присутствует "1", и проскакивает кратковременный "0". Я так понимаю, мне нужен захват по заднему фронту?
МК - MSP430F1232
Прикладываю свой код:
Код
#include <io430x12x2.h>
unsigned int speed=0;
void main(void)
{
init_PORTS();
init_TA();
__enable_interrupt();
for (;;) {
itoa1(speed); // int to char
display(); // динамическая индикация
}
}
#pragma vector=TIMERA0_VECTOR
__interrupt void TimerA0(void)
{
speed = TACCR0;
}
void init_PORTS(void)
{
P1DIR = 0xFF; // 0 - input; 1 - output
P1OUT = 0xFF; // 0 - low; 1 - high
P1SEL = 0x00; // 0 - i/o; 1 - function
P2DIR = 0x00;
P2OUT = 0x00;
P2SEL = 0x0C; // P2.2 P2.3 - capture
P3DIR = 0x0E;
P3OUT = 0x00;
P3SEL = 0x00;
}
void init_TA(void)
{
TACCTL0 = CM_2 + SCS + CCIS_1 + CAP + CCIE; // задний фронт, синхронный захват, вход CCIxB, захват, прерывание
TACTL = TASSEL_2 + MC_2; // SMCLK + Continuous Mode
}
Почему-то прерывания не происходит. Подозреваю, что напутал либо с инициализацией таймера, либо с тактовыми сигналами. Систему тактирования не настраиваю, по умолчанию ведь используется DCO с частотой около 800 кГц?
Пробовал подавать сигнал на ноги
P2.2/TA0/A2 и
P2.3/TA1/A3/VREF−/И еще вопрос - прерывание должно возникать при возникновении сигнала по обоим ногам (CCI0B и CCI1B)?
Спасибо!