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

 
 
> Какой подход выбрать?
VeDoK
сообщение Aug 22 2011, 18:47
Сообщение #1





Группа: Новичок
Сообщений: 3
Регистрация: 6-06-11
Пользователь №: 65 530



Доброго времени суток.

Есть необходимость генерировать на AT91SAM7s256 сигнал с частотой 4 МГц и вызовом прерываниия.

Получится ли настроить прерывание от какого-нибудь таймера на такую частоту?
Можно ли программируемым тактовым сигналом PCKx вызывать прерывание контроллера ввода-вывода на изменение состояния порта?
Если нет, то удастся ли вывести PCKx наружу и тут же завести на соседний вывод с настроенным прерыванием на изменение состояния порта?
Стоит ли использовать для генерации сигнала и прерывания ШИМ контроллер?

Подскажите, пожалуйста, какой подход наиболее предпочтителен?

P. S. Если не затруднит, ещё один блиц-вопрос... У меня выход PLL равен 128 МГц. В регистре PMC_MCKR указал тактирование от PLL и значение делителя 4. Это означает, что задающий сигнал MCK равен 32 МГц, а процессорный тактовый сигнал PCK равен 128МГц?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 8)
Genadi Zawidowsk...
сообщение Aug 22 2011, 19:06
Сообщение #2


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

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Генерацию прерывания с частотой 4 МГц на этом процессоре - зачем? (не успеть обработать). Или какие-то ещё побочные эффекты будут использоваться?
Просто выход с частотой 4 МГц получить при тактовой частоте, кратной 8 МГц (или 16 МГц в случае если требуется меандр на выходе) вполне возможно - минимальный предделителдь для таймера 2.


Вот вам кусок кода из проекта - может, поможет?
Код
/*
  инициализация внутреннего умножителя частоты.
  Вход - 12 МГц, кварцевый резонатор
  внутренняя тактовая - 48 МГц,
  частота генератора - 96 МГц
  Частота сравнения PLL = 12 МГц
*/
static void lowlevel_init_pll_clock_48_xtal12(void)
{
    enum { osc_mul = 8, osc_div = 1 };    // 12 MHz / 1 * 8 = 96 MHz

    // before reprogramming - set safe waitstates
    AT91C_BASE_MC->MC_FMR = AT91C_MC_FWS_2FWS;

    ///////////////////////////////////////////////////////////////////////////
    // Init PMC Step 1. Enable Main Oscillator
    // Main Oscillator startup time is board specific:
    // Main Oscillator Startup Time worst case (3MHz) corresponds to 15ms
    // (0x40 for AT91C_CKGR_OSCOUNT field)
    ///////////////////////////////////////////////////////////////////////////
    AT91C_BASE_PMC->PMC_MOR = (((AT91C_CKGR_OSCOUNT & (0x40 << 8)) | AT91C_CKGR_MOSCEN));
    // Wait Main Oscillator stabilization
    while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MOSCS))
    ;
    ///////////////////////////////////////////////////////////////////////////
    // Init PMC Step 2.
    // Set PLL to 96MHz (96,109MHz) and UDP Clock to 48MHz
    // PLL Startup time depends on PLL RC filter: worst case is choosen
    // UDP Clock (48,058MHz) is compliant with the Universal Serial Bus
    // Specification (+/- 0.25% for full speed)
    ///////////////////////////////////////////////////////////////////////////
    AT91C_BASE_PMC->PMC_PLLR =
                        AT91C_CKGR_USBDIV_1 |
                        AT91C_CKGR_OUT_0 |
                        (AT91C_CKGR_PLLCOUNT & (16 << 8)) |        // PLL lock signalling delay
                        (AT91C_CKGR_MUL & ((osc_mul - 1) << 16)) |
                        (AT91C_CKGR_DIV & osc_div);        
    
    // Wait for PLL stabilization
    while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_LOCK))
    ;
    
    // Wait until the master clock is established for the case we already
    // turn on the PLL
    while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY))
    ;

    ///////////////////////////////////////////////////////////////////////////
    // Init PMC Step 3.
    // Selection of Master Clock MCK equal to (Processor Clock PCK) PLL/2=48MHz
    // The PMC_MCKR register must not be programmed in a single write operation
    // (see. Product Errata Sheet)
    ///////////////////////////////////////////////////////////////////////////
    AT91C_BASE_PMC->PMC_MCKR = AT91C_PMC_PRES_CLK_2;    // тактовая частота процессора 96 / 2 = 48

    // Wait until the master clock is established
    while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY))
    ;

    AT91C_BASE_PMC->PMC_MCKR = (AT91C_PMC_PRES_CLK_2 | AT91C_PMC_CSS_PLL_CLK);

    // Wait until the master clock is established
    while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY))
    ;

    // as final stage - set desired waitstates
    AT91C_BASE_MC->MC_FMR = AT91C_MC_FWS_1FWS; // 1 Wait State to work at 48 MHz
}


Сообщение отредактировал Genadi Zawidowski - Aug 22 2011, 19:07
Go to the top of the page
 
+Quote Post
VeDoK
сообщение Aug 22 2011, 19:22
Сообщение #3





Группа: Новичок
Сообщений: 3
Регистрация: 6-06-11
Пользователь №: 65 530



4 МГц нужны для тактирования ПЗС-линейки, поэтому нужны прерывания для подсчёта количества считанных пикселей. Так же по мере поступления от внешнего АЦП с частотой 2 МГц нужно укладывать данные в память и периодически генерировать ещё несколько сигналов.

Спасибо, как я понимаю сигналы PCK и MCK всгда равны?
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Aug 22 2011, 20:58
Сообщение #4


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

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Для этого процессора - частота работы процессора и частота тактирования периферии равны.
Варианты применения внешнего АЦП с последовательным интерфейсом и приспособить для передачи данных от него SSC или SPI рассматривали?
А так - без прерываний, с запрещёнными прерываниями, в цикле - считывать с паралельного порта. И то, озаботиться о первых командах - пока заполнится конвеер.
Go to the top of the page
 
+Quote Post
DmitryM
сообщение Aug 23 2011, 03:28
Сообщение #5


Знающий
****

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



Цитата(VeDoK @ Aug 22 2011, 23:22) *
4 МГц нужны для тактирования ПЗС-линейки, поэтому нужны прерывания для подсчёта количества считанных пикселей. Так же по мере поступления от внешнего АЦП с частотой 2 МГц нужно укладывать данные в память и периодически генерировать ещё несколько сигналов.

Спасибо, как я понимаю сигналы PCK и MCK всгда равны?

Не равны, PCK сам по себе, MCK сам по себе. В частном случае, когда источник сигнала и предделители одинаковые могут совпадать.
Go to the top of the page
 
+Quote Post
VeDoK
сообщение Aug 23 2011, 05:44
Сообщение #6





Группа: Новичок
Сообщений: 3
Регистрация: 6-06-11
Пользователь №: 65 530



Цитата(Genadi Zawidowski @ Aug 23 2011, 00:58) *
Для этого процессора - частота работы процессора и частота тактирования периферии равны.
Варианты применения внешнего АЦП с последовательным интерфейсом и приспособить для передачи данных от него SSC или SPI рассматривали?
А так - без прерываний, с запрещёнными прерываниями, в цикле - считывать с паралельного порта. И то, озаботиться о первых командах - пока заполнится конвеер.


Пока использование АЦП с последовательным интерфейсом не рассматривалось. Подскажите, пожалуйста, примеры таких АЦП, способных работать на частоте не менее 4МГц.
Не совсем ясен механизм опроса через цикл. Опрашивая порты таким образом, вероятно, необходимо иметь некоторый синхронизирующий сигнал, который укажет на готовность данных от АЦП?

Можно ли сделать вывод, что AT91SAM7s256 не подойдет для генерации нескольких тактовых сигналов с частотами от 1 до 4 МГц и одновременной обработкой данных от АЦП из-за недостаточной скорости работы процессора?


Цитата(DmitryM @ Aug 23 2011, 07:28) *
Не равны, PCK сам по себе, MCK сам по себе. В частном случае, когда источник сигнала и предделители одинаковые могут совпадать.


Разве сигналы PCK и MCK не настраиваются через один регистр PMC_MCKR с помощью полей CSS и PRES? Как они могут оказаться не равны?
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Aug 23 2011, 06:42
Сообщение #7


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

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Не вникая в доставаемость - параметрический поиск от АналогДевайсов выдал AD7356 и AD7357.
Ещё немного поискал - вообще на ваш случай AD7626.
Интересный момент - до 3 MS/S выбор гораздо больше. Ваш случай (4 MS/S) сильно ограничивает в выборе микросхем.
Осталось узнать, выдержит ли требуемую тактовую (32 МГц для 8 бит АЦП) SSC.
Ещё подумал о внешнем перобразователе паралельного кода в последовательный.

PS: только сейчас заметил, что Вам надо 2 MS/S. Всё проще будет.

Цитата
Не совсем ясен механизм опроса через цикл. Опрашивая порты таким образом, вероятно, необходимо иметь некоторый синхронизирующий сигнал, который укажет на готовность данных от АЦП?

Нет, в данном случае формировать сигналы для запуска перобразования пришлось бы программно.

Сообщение отредактировал Genadi Zawidowski - Aug 23 2011, 07:00
Go to the top of the page
 
+Quote Post
brag
сообщение Aug 23 2011, 06:57
Сообщение #8


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

Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046



не тот проц вы для пзс пихаете. вам плис нуженлибо DSP с тактовой ~400mhz.
еслли чисто для генерации клока/переливки данных - Altera MAX2 то,что надо
Go to the top of the page
 
+Quote Post
DmitryM
сообщение Aug 23 2011, 08:30
Сообщение #9


Знающий
****

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



Цитата(VeDoK @ Aug 23 2011, 09:44) *
Разве сигналы PCK и MCK не настраиваются через один регистр PMC_MCKR с помощью полей CSS и PRES? Как они могут оказаться не равны?

Если речь идет именно о периферийной функции вывода PCK, то они настраиваются в своих собственных регистрах, а если о Processor Clock(PCK)??? то он равен MCK.
Go to the top of the page
 
+Quote Post

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

 


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


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