#1 Re: Програмування Arduino » Проигрывание музыки на Ардуино » 2014-09-21 08:20:35

Подскажите пожалуйста, что настройках таймер-счетчика в моей программе не так. Настройки срисовал максимально возможно с ардуиновского музыкального примера, но в ардуино дуе не могу включить прерывания. В программе считываю длительность входных импульсов при любом перепаде входного импульса. Изначально программу писал для 328 атмеги, она заработала, но для моих целей микросхема слабовата.
volatile static int32_t counter1;                         /* Переменная - текущее показание счетчика 1 */

// Объявляем таймер-счетчик 0 и его канал 1
#define WORK_TIMER TC0
#define INPUT_CHNL 1
#define INPUT_IRQ TC1_IRQn

static Tc *chTC = WORK_TIMER;
static uint32_t chNo = INPUT_CHNL;
static uint32_t in_pin;                                /* Задаем A7 пин ардуино порт PA2 in_pin - 85 вывод */

// Настраиваем 1 канал: предделитель тактовой частоты 32, при изменении уровня входного импульса запись счетчика в регистр А
void set_timer1 (uint32_t ulPin) {
  pmc_set_writeprotect(false);
  pmc_enable_periph_clk((uint32_t)INPUT_IRQ);
  TC_Configure(chTC, chNo,
            TC_CMR_TCCLKS_TIMER_CLOCK3 |
            TC_CMR_LDRA_EDGE);
            chTC->TC_CHANNEL[chNo].TC_IER=TC_IER_LDRAS;
            chTC->TC_CHANNEL[chNo].TC_IDR=~TC_IER_LDRAS;
            NVIC_EnableIRQ(INPUT_IRQ);
in_pin = ulPin;
// Выставили A7 пин ардуино порт PA2 на ввод
pinMode (in_pin, INPUT);
}



void setup() {
  // put your setup code here, to run once:
set_timer1 (A7);
}

void loop() {
  // put your main code here, to run repeatedly:

}

void TC1_Handler (void) {
TC_GetStatus(TC0, 1);
TC_Stop(chTC, chNo);
counter1 = TC0->TC_CHANNEL[1].TC_RA;
TC_Start(chTC, chNo);
}

Підвал форуму