Добрался до MSP430 (прошу прощенья за паузу).
Дело я 29го июля закончил тем, что заместо кода:
Код: Выделить всё
//используем таймер B для борьбы с дребезгом
TA1CCTL0 = CCIE; //Разрешение прерывания захвата/сравнения счётчика-таймера B/* Timer1_A3 Capture/Compare Control 0 */
TA1CTL = (TASSEL_2 + MC_2 + ID_2); //ставим источник тактов на SMCLK, и режим таймера - continuous, и делитль =4 (1 2 4 8)
я записал нехитрый код (с объявлением временной "экспериментальной" глобальной bool переменной b):
Код: Выделить всё
//используем таймер B для борьбы с дребезгом
b = true;
TA1CCTL0 = CCIE; //Разрешение прерывания захвата/сравнения счётчика-таймера B/* Timer1_A3 Capture/Compare Control 0 */
TA1CTL = (TASSEL_2 + MC_2 + ID_2); //ставим источник тактов на SMCLK, и режим таймера - continuous, и делитль =4 (1 2 4 8)
b = false;
, обработчик таймера B (или "второй таймер А", как подсказывает
Psych) выглядит таким образом:
Код: Выделить всё
#pragma vector = TIMER1_A0_VECTOR
__interrupt void TIMER1_A0_PRE (void)
{
if (!(P1IN & BIT3)) return;
if (b==true) return; // вот с этим стало нормально работать :)
P1IE |= BIT3; // Разрешение прерываний на P1.3
TA1CTL = 0; //останов таймера B
}
Это всё работает нормально, что как-бэ

подтвержало тогда мою догадку.

И я тогда, с мыслью о сделанной работе, успокоился

.
Теперь вот, [вернувшись в эту ветку,] попробую предворить в жизнь слова пользователя
Psych: "
В эррате на ваш кристалл ТА16 говорится, что после TACLR вызывается дополнительное прерывание. Попробуйте остановить таймер MC=0, не трогая TACLR".
P.S. Отладчик использую IAR EW for MSP430 IDE 5.51.6, скачанный с официального сайта. Тип лицензии - бесплатный, с ограничением ИК 4кб.