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

 
 
> 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
 
Start new topic
Ответов
hd44780
сообщение Aug 30 2012, 18:42
Сообщение #2


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

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



RabidRabbit, да, похоже, виновата была та ошибка в расчётах. Зеванул я sm.gif Поменял, пошло.
Инициализация, хоть ручками, хоть через иаровские функции - всё равно. Они делают то же самое sm.gif .

Теперь возьмусь за автозапуск по таймеру sm.gif .

PS.
Может кто скажет - SAMBA правда всего 100 раз работает?


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
DmitryM
сообщение Aug 31 2012, 05:30
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 583
Регистрация: 7-06-06
Из: Таганрог
Пользователь №: 17 840



Цитата(hd44780 @ Aug 30 2012, 22:42) *
PS.
Может кто скажет - SAMBA правда всего 100 раз работает?

Откуда дровишки?
GPNVM - давно уже исправили количество циклов перезаписи и Sam-ba то тут причем?
Go to the top of the page
 
+Quote Post
hd44780
сообщение Aug 31 2012, 07:59
Сообщение #4


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

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



Цитата(DmitryM @ Aug 31 2012, 08:30) *
Откуда дровишки?
GPNVM - давно уже исправили количество циклов перезаписи и Sam-ba то тут причем?


Дровишки фирмовые, с сайта атмел. Те, что идут в комплекте с прогой самбы. Проблем (тьфу-тьфу) с ними у меня пока не наблюдалось rolleyes.gif

GPNVM биты меня на текущем этапе совершенно не волнуют, но я тут не раз читал (например - http://electronix.ru/forum/index.php?showtopic=81665 ), что самба переписывается во флэш всего 100 раз. Я перепрошил её уже наверное раз 30 (точно не считал).
По ходу ещё вопрос - прога самбы всё время спрашивает про lock/unlock сектора 0. Что будет, если ему lock не сделать, как она предлагает? Сам ещё не пытался, т.к. у меня ещё по основным вещам некоторая кашица в голове rolleyes.gif .

JTAG вигглера пока валяется недоделанный в ящике, необходимости во внутрисхемной отладке пока не ощутил biggrin.gif .
Поэтому по ходу и спросил. Загрузкой в RAM пока не баловался, не знаю, пойдёт-не пойдёт.
Может они уже этти баги и исправили, но микросхема у меня древняя, ревизия А, 2006 года выпуска. Просто 6 лет в коробке провалялась biggrin.gif . Забыл я о ней ....

По основной теме.

Цитата(RabidRabbit @ Aug 31 2012, 09:21) *
Работает отлично, ещё можно DMA зацепить, настраивается очень просто.
Вот функции для настройки лично мне изучать лень, ведь даташит всё равно читать sm.gif

Пример у меня есть - какая-то осциллографическая приставка на USB, там по таймеру старт идёт и программный опрос конца преобразования.
DMA, т.е. PDC я ещё не изучал, но мне наверное не понадобится.
Вообще моя цель - стерео FFT анализатор (может ещё осциллограмму некую рисовать) для звука. Т.е. мне надо будет цифровать по очереди два канала АЦП - таймер где-то на 22-24 кГц уже получился sm.gif . А умеет ли PDC сам переключать ему каналы я пока не знаю.
2 канала разом цифровать вроде нельзя - АЦП то один ...
Пока планирую по таймеру запускать преобразование, в прерывании выгребать результат в буфер и перещёлкивать канал.

Если можно решить это получше, буд рад любым советам.

Дисплей графический есть. Я с ним на авре уже вроде освоился.

Спасибо.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
RabidRabbit
сообщение Aug 31 2012, 10:49
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 3-12-09
Из: Россия, Москва
Пользователь №: 54 040



Цитата(hd44780 @ Aug 31 2012, 11:59) *
Вообще моя цель - стерео FFT анализатор (может ещё осциллограмму некую рисовать) для звука. Т.е. мне надо будет цифровать по очереди два канала АЦП - таймер где-то на 22-24 кГц уже получился sm.gif . А умеет ли PDC сам переключать ему каналы я пока не знаю.
2 канала разом цифровать вроде нельзя - АЦП то один ...
Пока планирую по таймеру запускать преобразование, в прерывании выгребать результат в буфер и перещёлкивать канал.

Если можно решить это получше, буд рад любым советам.

Согласно даташиту после каждого запуска АЦП по очереди оцифровывает сигналы тех каналов, для которых стоят "галочки" в ADC_CHER, поэтому в случае нескольких каналов, по-моему, будет удобно использовать ДМА, тем более что для FFT вроде понадобится больше одного сэмпла на канал.
Go to the top of the page
 
+Quote Post



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

 


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


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