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

 
 
> АЦП в ADuC7024, реально ли получить 1msps
UserXP
сообщение Oct 25 2006, 09:55
Сообщение #1





Группа: Участник
Сообщений: 14
Регистрация: 18-07-06
Пользователь №: 18 898



Здравствуйте.
Суть проблемы в том что я уже три недели не могу получить картину подтверждающую тот факт что АЦП этого контроллера способно выполнить преобразование за 1мкс.
Лучший из результатов который я получал был таков: между запуском АЦП и заходом в прерывание FIQ проходило 1,9мкс (500ksps).

Контроллер настроен на тактовую частоту 42,7МГц, АЦП настроен на максимальное быстродействие, обработчик прерывания размещен в RAM. Запуск АЦП по таймеру.

Хотелось бы спросить ваших рекомендаций на что можно еще обратить внимание, т.к. я первый раз работаю ARM и с 32-х разрядным контроллером вообще.

p.s. Еще один странный факт, если в главном цикле делаю мигание леда, через GP4CLR и GP4SET на выходе вижу максимум 10МГц... судя по полученному из кейла ассемблеру там 2 инструкции... на каждую по 2 такта? и где обещанные 40MIPS на 40МГц?

Заранее благодарен.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
UserXP
сообщение Oct 27 2006, 07:44
Сообщение #2





Группа: Участник
Сообщений: 14
Регистрация: 18-07-06
Пользователь №: 18 898



Cначала было так:
#define LED_ON GP4CLR = 0x00040000
#define LED_OFF GP4SET = 0x00040000

void My_funk_ram (void) __ram
{
ADCCON |= BIT0|BIT1|BIT7; //запуск конверсии
ADCCON &= ~BIT7;

while (1)
{
while (!ADCSTA){}
LED_OFF;
ADCResult = (unsigned short)(ADCDAT>>16);
ADCCON |= BIT0|BIT1|BIT7; //запуск конверсии
ADCCON &= ~BIT7; //защита от случайного запуска по пину
LED_ON;
}
}
функция запускается из мейна, т.к. как загнать сам мейн в RAM я так и не понял

Потом сделал
#define MY_ADCDAT (*(volatile unsigned short *) 0XFFFF0512)
и заменил
ADCResult = (unsigned short)(ADCDAT>>16);
на
ADCResult = MY_ADCDAT;
судя по ассемблеру минус три инструкции MOV

В общем и целом шеф доволен, и меня по большей части не интересуют конкретные ситуации.
Возможно есть какие-то глобальные вещи влияющие на производительность о котрых я не знаю...

Сообщение отредактировал UserXP - Oct 27 2006, 07:46
Go to the top of the page
 
+Quote Post
khach
сообщение Oct 27 2006, 10:26
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 439
Регистрация: 29-12-04
Пользователь №: 1 741



Цитата(UserXP @ Oct 27 2006, 09:44) *
ADCResult = (unsigned short)(ADCDAT>>16);

А какова конечная цель работы АЦП? А то в этом примере результат работы как видно неважен :-). Потому что обычно кучу времени съедает раскладка полученных данных в буфер и проверка окончания цикла.
А как сконфигурен ADCCON? Там же все зависит от настройки клоков в битах 10-12 и 9-8. Кстати, гнаться за минимальным ADC acquisition time нестоит-тогда нужен мощнай драйвер входа АЦП и ошибки становяться слишком большие. Намного лучше чем в референсном дизайне несделать ftp://ftp.analog.com/pub/www/technology/d...source_code.zip
Можно только выиграть на раскладке данных в пямять при многоканальном сборе данных.
А дерганье ЛЕДа вообще все тормозит. К сожалению АД не приводит данных по конкретной реализации внутренностей портов ИО, но все помнять проблемы филипса с "дрыгоножеством", когда пришлось вводить дополнительную периферию фастио. Поэтому для измерений лучше выпустить наружу сигнал ADCBUSY и использовать его для контроля быстродействия.
Go to the top of the page
 
+Quote Post



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

 


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


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