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

 
 
 
Reply to this topicStart new topic
> AT91SAM7A3 програмно управляемые тактовые сигналы, Как это сделать правильно?
Хомяк
сообщение Nov 2 2007, 04:48
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 99
Регистрация: 12-02-07
Из: Свердловск
Пользователь №: 25 269



Есть следушая задача получить частоту 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 получаю частоту но совсем не ту.
Применение деления никак не изменяет частоту.
Go to the top of the page
 
+Quote Post
Хомяк
сообщение Nov 2 2007, 08:50
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 99
Регистрация: 12-02-07
Из: Свердловск
Пользователь №: 25 269



Приотладке в раме вроде запустилось но выдает только частоту 32кГц
При записи во ФЛЕШ - молчание.
Разбираюсь дальше.
Неужели никто не использовал PCK?
Go to the top of the page
 
+Quote Post
_dem
сообщение Nov 2 2007, 11:21
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 2-02-07
Из: CN, Ukraine
Пользователь №: 24 970



навскидку - вот 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);
Go to the top of the page
 
+Quote Post
VSt&
сообщение Nov 8 2007, 06:03
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 101
Регистрация: 3-08-06
Из: Екатеринбург
Пользователь №: 19 275



суть в том, что 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 настроены и запущены ли на расчетную тактовую частоту?
Go to the top of the page
 
+Quote Post
Хомяк
сообщение Nov 8 2007, 06:52
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 99
Регистрация: 12-02-07
Из: Свердловск
Пользователь №: 25 269



Цитата(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 настроены и запущены ли на расчетную тактовую частоту?


Все получил
Суть в том что их надо писать сразу
А я делал по отдельности
Go to the top of the page
 
+Quote Post
chernenko
сообщение Feb 11 2009, 11:37
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 170
Регистрация: 8-02-06
Из: Москва
Пользователь №: 14 116



Работаю в 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));


Но на соответствующем выводе почему то тишина...
При этом в регистрах вроде все прописывается как надо.
Что не так?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 11 2009, 12:15
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(chernenko @ Feb 11 2009, 14:37) *
Делаю вот так:

cranky.gif Это чтобы враги не догадались? Зачем плодить какие-то дикие невменяемые сущности?
Рискну предположить, что у Вас не выбирается Peripheral B для PA6. Но разобраться в таком коде
просто невозможно.
Go to the top of the page
 
+Quote Post
chernenko
сообщение Feb 11 2009, 12:38
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 170
Регистрация: 8-02-06
Из: Москва
Пользователь №: 14 116



Цитата(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 но по-моему все прозрачно и согласно даташиту атмела
Go to the top of the page
 
+Quote Post

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

 


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


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