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

 
 
> Выход из обработчика прерывания АЦП
int0x25
сообщение May 23 2010, 09:08
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 22-02-10
Из: St.P
Пользователь №: 55 614



Здравствуйте, запускаю таймер, который должен каждые 10 мс запускать АЦП и потом должно быть обработано прерывание конца преобразования. Но у меня почему то только один раз выполняется код в обработчике прерывания АЦП, а после этого даже не обрабатываются прерывания TC2. Наверное, я что то не дописал в обработчике прерывания АЦП, подскажите пожалуйста, что именно.
Код
__irq void tc2_int (void)
{
  AT91S_TC* pTC2 = AT91C_BASE_TC2;
  AT91F_ADC_StartConversion(AT91C_BASE_ADC);    
  *AT91C_AIC_EOICR = pTC2->TC_SR;
}

__irq void ADC_inter(void)
{
  GetData();    
  AT91F_AIC_ClearIt(AT91C_BASE_AIC, AT91C_ID_ADC);
}

void Init_ADC()
{
  AT91S_AIC* pAIC = AT91C_BASE_AIC;
  AT91F_ADC_SoftReset(AT91C_BASE_ADC);
  AT91F_ADC_CfgPMC();
  AT91F_ADC_CfgModeReg(AT91C_BASE_ADC,ADC_Mode);
  AT91F_ADC_EnableChannel(AT91C_BASE_ADC, AT91C_ADC_CH4);
  
  pAIC->AIC_SMR[AT91C_ID_ADC] = AT91C_AIC_PRIOR_LOWEST | AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL;
  pAIC->AIC_SVR[AT91C_ID_ADC] = (unsigned long) ADC_inter;
  AT91F_ADC_EnableIt(AT91C_BASE_ADC,AT91C_ADC_CH4);
  AT91F_AIC_EnableIt(AT91C_BASE_AIC, AT91C_ID_ADC);

  pAIC->AIC_IECR = (1 << AT91C_ID_ADC);
}
Go to the top of the page
 
+Quote Post



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

 


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


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