Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru
Партнеры:
otladka.com.ua - г.Киев

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:3
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:7
Форум » starterkit.ru » Embedded Linux
Помогите запинать таймеры Timer Counter (TC) SK-9G45-OEM
lesa111
Добавлено 24.05.2011 12:28
0
Сообщение: 1
lesa111
0

Пункты: 494
Регистрация: 30.03.2011
SK-9G45-OEM

Пишу свой драйвер Touch Screen в Manual Mode

Мне нужны прерывания, для работы с временами ~ 1 mS

Пытаюсь в ядре запинать таймеры TC...
Последовательность инициализации такая :


atmel_timer_write(AT91_TC_BCR, 0);
atmel_timer_write(AT91_TC_CCR, AT91_TC_CLKDIS);
atmel_timer_write(AT91_TC_CMR, (AT91_TC_TIMER_CLOCK4 | AT91_TC_WAVE) );
atmel_timer_write(AT91_TC_IDR, 0xffffffff);
atmel_timer_read(AT91_TC_SR);
atmel_timer_write(AT91_TC_RC, 0x8FF);
atmel_timer_write(AT91_TC_CCR, AT91_TC_CLKEN );


atmel_timer_write - запись в регистр
atmel_timer_read - чтение из регистра


Счетчик ни в какую не считает
AT91_TC_SR - всегда читается как 0

Кто знаком с темой ?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 24.05.2011 12:42 Редактировалось 24.05.2011 12:51 Сообщение: 2
sasamy
4.70

Пункты: 75804
Регистрация: 14.08.2009
Вот пример инициализации и обработчик прерываний - в одной rtos использовал TC в качестве системного таймера, правда это для at91sam9260 но там вся разница помоему в том что в g45 все 6 таймеров на одном прерывании в AIC.

http://sasamy.narod.ru/clock.c

Есть где-то код под Linux - TC использовался в качестве триггера для встроенного АЦП но я не уверен что смогу отыскать его, попробую поискать.

PS особое внимание обратите на строчки
/* Enable TC */
PMC_PCER = 1 << ID_TC;

Еще на всякий случай удостоверьтесь что в ядре не включен драйвер TC
http://sasamy.narod.ru/scrn.png
Спуститься к концу Подняться к началу
Персональная информация
lesa111
Добавлено 24.05.2011 13:30 Сообщение: 3
lesa111
0

Пункты: 494
Регистрация: 30.03.2011
Цитата

PS особое внимание обратите на строчки
/* Enable TC */
PMC_PCER = 1 << ID_TC;

Еще на всякий случай удостоверьтесь что в ядре не включен драйвер TC


Спасибо за ответ...
Про драйвер TC я в курсе - он выключен

Цитата

PMC_PCER = 1 << ID_TC;


В описалове на чип я вижу что это управляет
клоками для периферии
Так в описании про TC MCK - это и есть сигнал с PMC ?

в сорцах ядра вижу в at91_pmc.h


#define AT91_PMC_SCSR (AT91_PMC + 0x08) /* System Clock Status Register */
#define AT91_PMC_PCK (1 << 0) /* Processor Clock */
#define AT91RM9200_PMC_UDP (1 << 1) /* USB Devcice Port Clock [AT91RM9200 only] */
#define AT91RM9200_PMC_MCKUDP (1 << 2) /* USB Device Port Master Clock Automatic Disable on Suspend [AT91RM9200 only] */
#define AT91CAP9_PMC_DDR (1 << 2) /* DDR Clock [CAP9 revC & some SAM9 only] */
#define AT91RM9200_PMC_UHP (1 << 4) /* USB Host Port Clock [AT91RM9200 only] */
#define AT91SAM926x_PMC_UHP (1 << 6) /* USB Host Port Clock [AT91SAM926x only] */
#define AT91CAP9_PMC_UHP (1 << 6) /* USB Host Port Clock [AT91CAP9 only] */
#define AT91SAM926x_PMC_UDP (1 << 7) /* USB Devcice Port Clock [AT91SAM926x only] */
#define AT91_PMC_PCK0 (1 << 8) /* Programmable Clock 0 */
#define AT91_PMC_PCK1 (1 << 9) /* Programmable Clock 1 */
#define AT91_PMC_PCK2 (1 << 10) /* Programmable Clock 2 */
#define AT91_PMC_PCK3 (1 << 11) /* Programmable Clock 3 */
#define AT91_PMC_PCK4 (1 << 12) /* Programmable Clock 4 [AT572D940HF only] */
#define AT91_PMC_HCK0 (1 << 16) /* AHB Clock (USB host) [AT91SAM9261 only] */
#define AT91_PMC_HCK1 (1 << 17) /* AHB Clock (LCD) [AT91SAM9261 only] */
Спуститься к концу Подняться к началу
Персональная информация
lesa111
Добавлено 24.05.2011 13:36 Сообщение: 4
lesa111
0

Пункты: 494
Регистрация: 30.03.2011
А какой битик то мне нужен ?
Который включает Модуль TC ?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 24.05.2011 13:46 Сообщение: 5
sasamy
4.70

Пункты: 75804
Регистрация: 14.08.2009
Хех - а на одну строчку вниз слабо взглянуть ? :)

#define AT91_PMC_HCK0 (1 << 16) /* AHB Clock (USB host) [AT91SAM9261 only] */
#define AT91_PMC_HCK1 (1 << 17) /* AHB Clock (LCD) [AT91SAM9261 only] */

#define AT91_PMC_PCER (AT91_PMC + 0x10) /* Peripheral Clock Enable Register */

Я не знаю - возможно в Linux при инициализации процессора на начальной стадии сразу включается все периферия, но я бы на вашем месте на это не расчитывал и включил нужный клок при инициализации своего драйвера.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 24.05.2011 13:56 Редактировалось 24.05.2011 14:13 Сообщение: 6
sasamy
4.70

Пункты: 75804
Регистрация: 14.08.2009
Нашел свой старый код - посмотрите там инициализацию, сам драйвер скорей всего нерабочий но инициализация там помоему правильная, в том числе есть пример как правильно клок на TC включить средствами ОС а не игрой с битами в регистрах :)
http://sasamy.narod.ru/my_adc.c

tc0_clk = clk_get(NULL, "tc0_clk");
clk_enable(tc0_clk);

UPD На g45 только название другое
http://lxr.free-electrons.com/source/arch/arm/mach-at91/at91sam9g45.c?v=2.6.36#L124
и похоже от версии ядра зависит - так что посмотрите это место в своем дереве исходников
Спуститься к концу Подняться к началу
Персональная информация
lesa111
Добавлено 24.05.2011 14:21 Сообщение: 7
lesa111
0

Пункты: 494
Регистрация: 30.03.2011
ага СПАСИБО!!!!!!!
именно то что надо
Буду пробовать....



я тоже нашел наконец
ключевые слова:

"tcb0_clk"
clk_enable()


at91sam9g45.c:

static struct clk tcb0_clk = {
.name = "tcb0_clk",
.pmc_mask = 1 << AT91SAM9G45_ID_TCB,
.type = CLK_TYPE_PERIPHERAL,
};
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Embedded Linux