Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Какой подход выбрать?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
VeDoK
Доброго времени суток.

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

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

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

P. S. Если не затруднит, ещё один блиц-вопрос... У меня выход PLL равен 128 МГц. В регистре PMC_MCKR указал тактирование от PLL и значение делителя 4. Это означает, что задающий сигнал MCK равен 32 МГц, а процессорный тактовый сигнал PCK равен 128МГц?
Genadi Zawidowski
Генерацию прерывания с частотой 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
}
VeDoK
4 МГц нужны для тактирования ПЗС-линейки, поэтому нужны прерывания для подсчёта количества считанных пикселей. Так же по мере поступления от внешнего АЦП с частотой 2 МГц нужно укладывать данные в память и периодически генерировать ещё несколько сигналов.

Спасибо, как я понимаю сигналы PCK и MCK всгда равны?
Genadi Zawidowski
Для этого процессора - частота работы процессора и частота тактирования периферии равны.
Варианты применения внешнего АЦП с последовательным интерфейсом и приспособить для передачи данных от него SSC или SPI рассматривали?
А так - без прерываний, с запрещёнными прерываниями, в цикле - считывать с паралельного порта. И то, озаботиться о первых командах - пока заполнится конвеер.
DmitryM
Цитата(VeDoK @ Aug 22 2011, 23:22) *
4 МГц нужны для тактирования ПЗС-линейки, поэтому нужны прерывания для подсчёта количества считанных пикселей. Так же по мере поступления от внешнего АЦП с частотой 2 МГц нужно укладывать данные в память и периодически генерировать ещё несколько сигналов.

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

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

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

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

Нет, в данном случае формировать сигналы для запуска перобразования пришлось бы программно.
brag
не тот проц вы для пзс пихаете. вам плис нуженлибо DSP с тактовой ~400mhz.
еслли чисто для генерации клока/переливки данных - Altera MAX2 то,что надо
DmitryM
Цитата(VeDoK @ Aug 23 2011, 09:44) *
Разве сигналы PCK и MCK не настраиваются через один регистр PMC_MCKR с помощью полей CSS и PRES? Как они могут оказаться не равны?

Если речь идет именно о периферийной функции вывода PCK, то они настраиваются в своих собственных регистрах, а если о Processor Clock(PCK)??? то он равен MCK.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.