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

 
 
> ADC AT91SAM7S256, Вопросы
hd44780
сообщение Aug 29 2012, 17:54
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Запускаю АЦП sm.gif .
Сделал программный старт с программным ожиданием конца завершения. Работает sm.gif .
Пытаюсь сделать то же самое, но с прерыванием от АЦП - глухо sad.gif , прерывания нету. Может где-то с инициализацией намутил, не знаю.

CODE

//------------------------------------------------------------------------------
/// Interrupt handler for the ADC. Signals that the conversion is finished by
/// setting a flag variable.
//------------------------------------------------------------------------------
void ADCC0_IrqHandler(void)
{
dword status;
// SR reg
status = ADC_GetStatus(AT91C_BASE_ADC);

// Switch LED
LED_Toggle(0);

if (ADC_IsChannelInterruptStatusSet(status, ADC_CHANNEL))
{
conversionDone = 1;
} // if
} // ADCC0_IrqHandler

//------------------------------------------------------------------------------
/// Configure the ADC
//------------------------------------------------------------------------------
void ConfigureAdc(void)
{
dword shtim, startup, prescal, trgSel;
dword intMode;

AT91C_BASE_PMC->PMC_PCER = (1UL << AT91C_ID_ADC); // разрешить тактовую для ADC
AT91C_BASE_ADC->ADC_CR = AT91C_ADC_SWRST; // reset ADC

// TRGSEL==0 - запуск по нарастанию TIOA0 (TC0)
// TRGEN==1 - разрешить hw triggers
// LOWRES==1 - 8-бит режим
// SLEEP==0 - Normal mode
// SHTIM==2 - Tracking time = (SHTIM + 1) / ADCclock = 3/48MHz=0.0625mks
// PRESCAL==2 - ADCclock = MCK / [(PRESCAL + 1)*2] = 48MHz/((2+1)*2) = 48/6=8MHz
// STARTUP==0x0F - Startup Time = [(STARTUP + 1)*8] / ADCclock = ((15+1)*8)/48MHz = 16*8/48=2.67 mks
shtim=2;
startup=0x0F;
prescal=0x02;
trgSel=0;
ADC_CfgModeReg (AT91C_BASE_ADC, (shtim << 24) | (startup << 16) | (prescal << 8) |
(AT91C_ADC_SLEEP_NORMAL_MODE << 5) | (AT91C_ADC_LOWRES_10_BIT <<4) |
(trgSel << 1) | AT91C_ADC_TRGEN_DIS);
// Включить канал 7
// set ADC_CHER
ADC_EnableChannel ( AT91C_BASE_ADC, ADC_CHANNEL );
// Разрешить прерывание в самом ADC
// set ADC_IER
ADC_EnableIt(AT91C_BASE_ADC, 1<<ADC_CHANNEL);

// Установка прерывания
// intMode -> AIC_SMR -
intMode=AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL;
IRQ_ConfigureIT(AT91C_ID_ADC, intMode, ADCC0_IrqHandler);

// Set AIC_IECR
IRQ_EnableIT(AT91C_ID_ADC);
} // ConfigureAdc


В прерывании переключается светодиодик. Но он молчит.
Хотя в других местах он срабатывает.

Подскажите кто может. Полный проект под ИАР прикладываю.

Спасибо.
Прикрепленные файлы
Прикрепленный файл  AdcSoftStart_IRQ.zip ( 503.96 килобайт ) Кол-во скачиваний: 18
 


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 08:52
Рейтинг@Mail.ru


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