реклама на сайте
подробности

 
 
> AT91SAM7A3 IRQ0, Прошу помочь - уже туплю.
Хомяк
сообщение Jan 29 2008, 06:56
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 99
Регистрация: 12-02-07
Из: Свердловск
Пользователь №: 25 269



Прошу помощи.
Не могу понять почему не происхотит срабатывания IRQ0 по низкому уровню.


Инициализвция прерывания
Код

void AT91F_InitIRQ0(void)
{
  //AT91F_PIO_CfgInput(AT91C_BASE_PIOA,(1<<22));
  AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA,START,0);
  AT91F_AIC_ConfigureIt (AT91C_BASE_AIC,
                         AT91C_ID_IRQ0,
                         IRQ0_INTERRUPT_LEVEL,
                         //AT91C_AIC_SRCTYPE_EXT_NEGATIVE_EDGE,
                          AT91C_AIC_SRCTYPE_EXT_LOW_LEVEL,
                         at91_IRQ0_handler);
  AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_IRQ0);

  ((AT91PS_AIC)AT91C_BASE_AIC)->AIC_SMR[28] = 0x00000000;
  ((AT91PS_AIC)AT91C_BASE_AIC)->AIC_IECR    = 0x10000000;
}
[indent]

[i]Обработка прерывания[/i]

[code]
__ramfunc void at91_IRQ0_handler(void)
{
  Fw = 10;
  //
  if((AT91F_PIO_GetInput(AT91C_BASE_PIOA) & LED_GREEN ) == LED_GREEN)
  {
    AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,LED_GREEN);
  }
  else
  {
    AT91F_PIO_SetOutput(AT91C_BASE_PIOA,LED_GREEN);
  }
  //while ( (AT91F_PIO_GetInput(AT91C_BASE_PIOA) & START ) != START );
}


Основной код

[code]
int main()
{
//u16 HH=0,HL=0,LL=0;

AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1<<AT91C_ID_PIOA);
AT91F_PIO_CfgOutput(AT91C_BASE_PIOA, LED_MASK);
AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED_MASK ) ; // off leds
AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED_MASK ) ; // on leds

// êîíôèãóðèì ïèí äëÿ ãåíåðàöèè ÷àñòîòû
// enabling PCK clock output
AT91C_BASE_PMC->PMC_SCER = AT91C_PMC_PCK1;
AT91C_BASE_PMC->PMC_PCKR[1] = AT91C_PMC_CSS_MAIN_CLK | AT91C_PMC_PRES_CLK_16 ;
AT91F_PIO_CfgPeriph( AT91C_BASE_PIOA, 0, AT91C_PA19_PCK1);

leds_off();

//AT91F_DBGU_Init();

AT91F_PIOB_CfgPMC();
AT91F_PIO_CfgInput(AT91C_BASE_PIOB, MODE);
AT91F_PIO_CfgOutput(AT91C_BASE_PIOB, (1<<16));
//AT91F_PIO_SetOutput(AT91C_BASE_PIOB, (1<<16)); // PIOB.16 = 1
//AT91F_PIO_ClearOutput(AT91C_BASE_PIOB, (1<<16)); // PIOB.16 = 0

if(AT91F_PIO_GetInput(AT91C_BASE_PIOB)&0x00008000)
{
led_green_on();

//AT91F_SPI1_Init();
//Init_Accel();
//Init_Accel_RDY();
//AT91F_PIO_CfgInput(AT91C_BASE_PIOB, READY_LIC);

//InitSysTimer();
Init_HW();
led_green_off();

AT91F_InitIRQ0();
__enable_interrupt();

for(;;)
{

}
}
else
{

}
}
[code]
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 12:16
Рейтинг@Mail.ru


Страница сгенерированна за 0.01359 секунд с 7
ELECTRONIX ©2004-2016