Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AT91SAM7A3 програмно управляемые тактовые сигналы
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Хомяк
Есть следушая задача получить частоту 100кГц , для АЦП.
Решил использовать PCK0..PCK3.

Инициализирую следуюшим образом


AT91C_BASE_PMC->PMC_PCKR[1] = AT91C_PMC_PRES_CLK;
AT91C_BASE_PMC->PMC_PCKR[1] = AT91C_PMC_CSS_MAIN_CLK;
AT91C_BASE_PMC->PMC_SCER = AT91C_PMC_PCK1;
while(!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_PCK1RDY));

AT91F_PMC_CfgPIO();

В результате на PIOA19 получаю частоту но совсем не ту.
Применение деления никак не изменяет частоту.
Хомяк
Приотладке в раме вроде запустилось но выдает только частоту 32кГц
При записи во ФЛЕШ - молчание.
Разбираюсь дальше.
Неужели никто не использовал PCK?
_dem
навскидку - вот copy-paste из работающего проекта.
на ногу выводится частота, на которой работает кварц

// enabling PCK clock output

AT91C_BASE_PMC->PMC_SCER = AT91C_PMC_PCK0;
AT91C_BASE_PMC->PMC_PCKR[0] = AT91C_PMC_CSS_MAIN_CLK | AT91C_PMC_PRES_CLK ;
/////////////////////////////
AT91F_PIO_CfgPeriph( AT91C_BASE_PIOB, 0, AT91C_PB20_PCK0);
VSt&
суть в том, что PMC_PCKR - это R/W регистр, и выполняя последовательно
Цитата
AT91C_BASE_PMC->PMC_PCKR[1] = AT91C_PMC_PRES_CLK;
AT91C_BASE_PMC->PMC_PCKR[1] = AT91C_PMC_CSS_MAIN_CLK;

, Вы никогда не получите нужного делителя, если он отличен от единицы!

AT91C_BASE_PMC->PMC_PCKR[1] = AT91C_PMC_PRES_CLK | AT91C_PMC_CSS_MAIN_CLK; - вот это верный вариант

а в остальном все так, разве что я предпочитаю конфигурировать PIO до периферии

Цитата
Приотладке в раме вроде запустилось но выдает только частоту 32кГц

эммм... PMC и PLL настроены и запущены ли на расчетную тактовую частоту?
Хомяк
Цитата(VSt& @ Nov 8 2007, 09:03) *
суть в том, что PMC_PCKR - это R/W регистр, и выполняя последовательно

, Вы никогда не получите нужного делителя, если он отличен от единицы!

AT91C_BASE_PMC->PMC_PCKR[1] = AT91C_PMC_PRES_CLK | AT91C_PMC_CSS_MAIN_CLK; - вот это верный вариант

а в остальном все так, разве что я предпочитаю конфигурировать PIO до периферии
эммм... PMC и PLL настроены и запущены ли на расчетную тактовую частоту?


Все получил
Суть в том что их надо писать сразу
А я делал по отдельности
chernenko
Работаю в SAM7S но чтобы не плодить темы решил написать тут.

Делаю вот так:
Код
#define PIN_PCK0        {AT91C_PIO_PA6, AT91C_BASE_PIOA, AT91C_ID_PIOA, PIO_OUTPUT_1, PIO_DEFAULT}
#define PINS_CLK_OUT    PIN_PCK0

static const Pin pck0_CLK_OUT = PIN_PCK0;
static const Pin CLK_OUT_Pins[] = {PIN_PCK0};



Код
PMC_EnablePeripheral(AT91C_ID_PIOA);
PIO_Configure(CLK_OUT_Pins, PIO_LISTSIZE(CLK_OUT_Pins));
AT91C_BASE_PMC->PMC_SCDR = AT91C_PMC_PCK0;
AT91C_BASE_PMC->PMC_PCKR[0] = AT91C_PMC_CSS_MAIN_CLK | AT91C_PMC_PRES_CLK_16;        // Programmable clock output0
AT91C_BASE_PMC->PMC_SCER = AT91C_PMC_PCK0;
while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_PCK0RDY));


Но на соответствующем выводе почему то тишина...
При этом в регистрах вроде все прописывается как надо.
Что не так?
aaarrr
Цитата(chernenko @ Feb 11 2009, 14:37) *
Делаю вот так:

cranky.gif Это чтобы враги не догадались? Зачем плодить какие-то дикие невменяемые сущности?
Рискну предположить, что у Вас не выбирается Peripheral B для PA6. Но разобраться в таком коде
просто невозможно.
chernenko
Цитата(aaarrr @ Feb 11 2009, 15:15) *
cranky.gif Это чтобы враги не догадались? Зачем плодить какие-то дикие невменяемые сущности?
Рискну предположить, что у Вас не выбирается Peripheral B для PA6. Но разобраться в таком коде
просто невозможно.


Да, точно, вы правы.
Разобрался.

Код
#define PIN_PCK0        {AT91C_PIO_PA6, AT91C_BASE_PIOA, AT91C_ID_PIOA, PIO_PERIPH_B, PIO_DEFAULT}



А насчет невменяемой сущности, то это такая at91lib в IAR 5.30 но по-моему все прозрачно и согласно даташиту атмела
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.