AT91rm9200 плата AT9200 производства Аргуссофт
Инициализирую режим таймера:
tm.Init(AT91C_BASE_TC0,AT91C_ID_TC0,AT91C_TC_WAVE| AT91C_TC_WAVESEL_UP| AT91C_TC_CLKS_TIMER_DIV1_CLOCK| AT91C_TC_ACPA_SET| AT91C_TC_ACPC_CLEAR| AT91C_TC_BCPC_CLEAR| AT91C_TC_BCPB_SET, &IRQ_FUNC_T0);
переферию настроил AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA, 0,(unsigned int)(AT91C_PA19_TIOA1 | AT91C_PA17_TIOA0| AT91C_PA18_TIOB0 | AT91C_PA20_TIOB1)); Таймер запустил на срабатывании по RC TC_pt->TC_IER = AT91C_TC_CPCS ; /* enable RC compare int */
Обработчик прерывания следующий: static __arm __irq void timer0_c_irq_handler(void) { AT91PS_TC TC_pt = AT91C_BASE_TC0; unsigned int dummy; //* Acknowledge interrupt status dummy = TC_pt->TC_SR; TC_pt->TC_CV =0; //* Suppress warning variable "dummy" was set but never used dummy = dummy; (*pIRQ_T0)(); //IRQ_FUNC_T(); AT91C_BASE_TC0->TC_RC += ts.TIMER_VALUE_TC0; AT91C_BASE_TC0->TC_RA = (AT91C_BASE_TC0->TC_RC - ts.IMP_WIDTH_RA_TC0); AT91C_BASE_TC0->TC_RB = (AT91C_BASE_TC0->TC_RC - ts.IMP_WIDTH_RB_TC0); AT91C_BASE_AIC->AIC_EOICR = 0 ; /* end interrupt */ };
ts.IMP_WIDTH_RA_TC0 - ширина импульса TIOA0 ts.IMP_WIDTH_RB_TC0 - ширина импульса TIOB0
Проблема заключается в том что TIOA0 нормально работает,а TIOB0 нет (постоянно высокий уровень) В чем может быть проблема?
Все..тему можно закрывать забыл настроить TIOB на вывод EEVT: External Event Selection
|