Всех с прошедшим Новым Годом и наступающим Рождеством!
Все у меня получилось с тихоходным SPI. Сделал два счетчика - первый для формирования импульса , второй для счета этих самых импульсов. Счетный вход второго счетчика соответсвенно соединен с выходом TIOA первого. Останавливал оба счетчика в прерывании по "COMPARE А" второго. . Решил избавиться от прерывания. Для этого выход TIOA запрограммировал на соединение со счетным входом первого через мультиплексор по AND (флаг Burst Signal Selection). Но что то не пашет...
Вот код инициализации:
Код
/* Init SCK WAVE maker counter */
TC_Init(AT91C_BASE_TC2, AT91C_ID_TC2,
0 | /* Source clock - none */
AT91C_TC_BURST_XC2 | /* Clock from XCLK & control signal (HI) from PULSE TIOA */
AT91C_TC_WAVESEL_UP_AUTO | /* UP mode with atomatic trigger on RC Compare */
AT91C_TC_WAVE | /* Waveform Mode is enabled */
AT91C_TC_ACPA_SET | /* A Compare Effect on TIOA - Set output pin after compare */
AT91C_TC_ACPC_CLEAR /* C Compare Effect on TIOA - Clear output pin after compare */
);
AT91C_BASE_TC2->TC_CCR = AT91C_TC_CLKEN; /* Enable clock */
/* Init SCK PULSE counter */
TC_Init(AT91C_BASE_TC1, AT91C_ID_TC1,
AT91C_TC_CLKS_XC1 | /* Clock from WAVE TIOA */
AT91C_TC_CLKI | /* Invert clock - for negative edge counting */
AT91C_TC_WAVESEL_UP_AUTO | /* UP mode with atomatic trigger on RC Compare */
AT91C_TC_WAVE | /* Waveform Mode is enabled */
AT91C_TC_ACPA_CLEAR | /* Clear TIOA after compare - for stopping Wave Counter */
AT91C_TC_ASWTRG_SET /* Set TIOA after starting - for start Wave Counter */
);
AT91C_BASE_TC1->TC_CCR = AT91C_TC_CLKEN; /* Enable clock */
/* Set counters block register */
AT91C_BASE_TCB->TCB_BMR = AT91C_TCB_TC2XC2S_TIOA1 | AT91C_TCB_TC1XC1S_TIOA2 | AT91C_TCB_TC0XC0S_NONE;
Старт счетчиков:
Код
/* Enable clock and start pulse counter */
AT91C_BASE_TC1->TC_RA = (UINT32)n_pulses; /* Setup pulse counter compare */
(void)AT91C_BASE_TC1->TC_SR; /* Clear status register */
AT91C_BASE_TC1->TC_CCR = AT91C_TC_SWTRG; /* !!!!!!!!!!!!!!!!!!!!! Here TIOA must be set to one, for enable clock for Wave Maker !!!!!!!!!!!!!!!!!!!!! */
/* Enable clock and start wave maker */
(void)AT91C_BASE_TC2->TC_SR; /* Clear status register */
AT91C_BASE_TC2->TC_CCR = AT91C_TC_SWTRG;
В окне отладчика вижу, что после команды "AT91C_BASE_TC1->TC_CCR = AT91C_TC_SWTRG" MTIOA в регистре статуса не устанавливается в "1", тем самым не разрешает счет для ТС2. Но не могу понять почему...