ЗАО «ЗЭО»

Пожалуйста, войдите или зарегистрируйтесь.

Расширенный поиск  

Новости:

Автор Тема: ШИМ на Тион про v2  (Прочитано 7657 раз)

0 Пользователей и 1 Гость просматривают эту тему.

emc2

  • Jr. Member
  • **
  • Оффлайн Оффлайн
  • Сообщений: 60
ШИМ на Тион про v2
« : 28 Сентября, 2009, 11:50:29 »

Имеется Тион Про v2 + linux 2.6.20.4
Возможен ли доступ к таймерам из модуля ядра и какие таймеры для этого можно использовать (не использумые ситемой)? Требуется генерация частоты 3400Гц аппаратно. Возможно ли использование аппаратных PWM генераторов и где в ядре они конфигурируются? Заранее спасибо.
« Последнее редактирование: 01 Октября, 2009, 12:36:24 от asv »
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: ШИМ на Тион про v2
« Ответ #1 : 28 Сентября, 2009, 12:07:11 »

>Возможен ли доступ к таймерам из модуля ядра и какие таймеры для этого можно использовать (не использумые ситемой)? Требуется >генерация частоты 3400Гц аппаратно. Возможно ли использование аппаратных PWM генераторов и где в ядре они конфигурируются?

Нужна такая частота на выводе? Если речь только об этом и вы хотите использовать ШИМ (PWM), то это делается через регистры процессора (см. EP93xx User's Guide, Ch. 24, Pulse Width Modulator).

Один вывод ШИМ расположен на X20.11 и используется для управления подсветкой дисплеев (EGPIO14), другой на X10.12.
В 2.6.20, насколько я знаю, никакой общей системы для PWM не было.
« Последнее редактирование: 01 Октября, 2009, 12:36:55 от asv »
Записан

emc2

  • Jr. Member
  • **
  • Оффлайн Оффлайн
  • Сообщений: 60
Re: ШИМ на Тион про v2
« Ответ #2 : 29 Сентября, 2009, 14:12:26 »

Объявил переменные с адресами регистров. Не подскажите каким макросом можно установить значение регистра из модуля ядра? Пробовал gpio_line_set не получается  ???
« Последнее редактирование: 01 Октября, 2009, 12:38:31 от asv »
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: ШИМ на Тион про v2
« Ответ #3 : 29 Сентября, 2009, 14:22:27 »

> установить значение регистра из модуля ядра

Обычной записью значения в переменную расположенную по адресу регистра. Можно использовать writel.
См. drivers/video/backlight/ep93xx_bl.c -- использование PWM для подсветки.

PS. gpio_line_set -- функция для управления (задания состояния) GPIO, если вы намерены использовать PWM, то вам она не нужна.
Но можно посмотреть её реализацию.
« Последнее редактирование: 01 Октября, 2009, 12:38:24 от asv »
Записан

emc2

  • Jr. Member
  • **
  • Оффлайн Оффлайн
  • Сообщений: 60
Re: ШИМ на Тион про v2
« Ответ #4 : 29 Сентября, 2009, 14:33:37 »

В какой версии ядра появился файл drivers/video/backlight/ep93xx_bl.c?  В 2.6.20.4 почему то нет. Я хотел найти общую функцию для записи в любой регистр процессора. Регистры ШИМ объявил так:
#define EP93XX_PWM_BASE (EP93XX_APB_VIRT_BASE + 0x00110000)

#define EP93XX_PWM_REG(x) (EP93XX_PWM_BASE + (x))
#define EP93XX_PWM0_TERM_CNT EP93XX_PWM_REG(0x00)
#define EP93XX_PWM0_DUTY_CYCLE EP93XX_PWM_REG(0x04)
#define EP93XX_PWM0_EN   EP93XX_PWM_REG(0x08)
#define EP93XX_PWM0_INVERT EP93XX_PWM_REG(0x0C)

#define EP93XX_PWM1_TERM_CNT EP93XX_PWM_REG(0x20)
#define EP93XX_PWM1_DUTY_CYCLE EP93XX_PWM_REG(0x24)
#define EP93XX_PWM1_EN   EP93XX_PWM_REG(0x28)
#define EP93XX_PWM1_INVERT EP93XX_PWM_REG(0x2C)


EP93XX_APB_VIRT_BASE=0xff800000
0xff800000+0x00110000 получается 0чАА910000, а в доках указано 0x80910000 ?
« Последнее редактирование: 01 Октября, 2009, 12:38:18 от asv »
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: ШИМ на Тион про v2
« Ответ #5 : 29 Сентября, 2009, 14:55:27 »

> В какой версии ядра появился файл
В патчах позднее svn618,
http://www.zao-zeo.ru/dokuwiki/doku.php/linux#патчи_ядра

> Я хотел найти общую функцию для записи в любой регистр процессора.
writel

> а в доках указано
На то он и VIRT
« Последнее редактирование: 01 Октября, 2009, 12:38:10 от asv »
Записан

emc2

  • Jr. Member
  • **
  • Оффлайн Оффлайн
  • Сообщений: 60
Re: ШИМ на Тион про v2
« Ответ #6 : 30 Сентября, 2009, 14:01:33 »

Окончательно запутался  ???
Скачал и собрал ядро 2.6.20.21 с последним патчем.
В файле ep93xx_bl.c всего 3 строчки управляют PWM1 по сути:
writel ((BRIGHTNESS_CMP_MASK & (intensity << BRIGHTNESS_CMP_SHIFT))| PWM_CNT, BRIGHTNESS);
writel (RASTER_SWLOCK_VALUE, RASTER_SWLOCK);
writel (readl (SIGCTRL) | VIDSIGCTRL_BRIGHT, SIGCTRL)
По определению переменных получается смещение равно 0x03000 - RASTER_OFFSET
В старом патче было смещение 0x00110000
#define EP93XX_PWM_BASE (EP93XX_APB_VIRT_BASE + 0x00110000)Так как добраться до регистров PWM правильно через виртуальный адрес?
Еще #define SIGCTRL                 (RASTER_BASE+0x204)
а в даташит к процессору 0x8091_0028 PWM1En PWM1 Enable  Соответсвенно 0x28
« Последнее редактирование: 01 Октября, 2009, 12:38:03 от asv »
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: ШИМ на Тион про v2
« Ответ #7 : 30 Сентября, 2009, 15:29:16 »

В ep93xx_bl.c ШИМ для _яркости_ подсветки используется спец. вывод BRIGHT (BGA P4).
Управляется регистром Brightness (0x8003_0020 в документации) и к регистрам PWM отношения не имеет.

> Один вывод ШИМ расположен на X20.11 и используется для управления подсветкой дисплеев (EGPIO14), другой на X10.12.

Еще два ШИМ управляются регистрами PWM:

1. PWMOUT (BGA U16) X10.12 -- не используется

2. PWMOUT1 / EGPIO14 (BGA D15) X10.11, X20.11 -- сейчас используется для управления подсветкой (не яркостью) в режиме EGPIO14 (включ/выключ). Как он переключается между режимами PWM и GPIO не ясно

Код ep93xx_bl.c я предлагал как пример writel.
« Последнее редактирование: 01 Октября, 2009, 12:37:57 от asv »
Записан

emc2

  • Jr. Member
  • **
  • Оффлайн Оффлайн
  • Сообщений: 60
Re: ШИМ на Тион про v2
« Ответ #8 : 30 Сентября, 2009, 15:40:32 »

А вот это определение указывает на регистр PWM? В новом патче это определение у Вас отсутствует.
#define EP93XX_PWM_BASE (EP93XX_APB_VIRT_BASE + 0x00110000)Судя по документации конфигурировать вывод PWMx как выход не нужно. Может быть это не так и ему нужно установить направление вывода?
« Последнее редактирование: 01 Октября, 2009, 12:37:50 от asv »
Записан

emc2

  • Jr. Member
  • **
  • Оффлайн Оффлайн
  • Сообщений: 60
Re: ШИМ на Тион про v2
« Ответ #9 : 30 Сентября, 2009, 15:51:55 »

http://www.arm.linux.org.uk/developer/patches/viewpatch.php?id=5628/1 у циррусов такой драйвер есть. попытаюсь прикрутить сюда
« Последнее редактирование: 01 Октября, 2009, 12:37:42 от asv »
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: ШИМ на Тион про v2
« Ответ #10 : 30 Сентября, 2009, 16:30:03 »

> Судя по документации конфигурировать вывод PWMx как выход не нужно

Речь о PWMOUT1 / EGPIO14 -- это один вывод, по функциональности или PWM, или GPIO, как переключить его функциональность не понятно. Сейчас он используется как GPIO.

> В новом патче это определение у Вас отсутствует.

Оно есть в оригинальном коде, поэтому в патче его нет. После наложения оно будет.
« Последнее редактирование: 01 Октября, 2009, 12:37:35 от asv »
Записан

emc2

  • Jr. Member
  • **
  • Оффлайн Оффлайн
  • Сообщений: 60
Re: ШИМ на Тион про v2
« Ответ #11 : 01 Октября, 2009, 11:54:06 »

Нашел как переключить EGPIO14 - записать бит PonG регистра DeviceCfg
__raw_writel(__raw_readl(EP93XX_SYSCON_DEVICE_CONFIG)|0x00000200,EP93XX_SYSCON_DEVICE_CONFIG);Однако ШИМ не появился на выводе. В документации указано, что этот регист блокируется программно. Не подскажите в чем может быть проблема?
« Последнее редактирование: 01 Октября, 2009, 12:37:28 от asv »
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: ШИМ на Тион про v2
« Ответ #12 : 01 Октября, 2009, 12:11:44 »

См. регистр SysSWLock
« Последнее редактирование: 01 Октября, 2009, 12:37:21 от asv »
Записан

emc2

  • Jr. Member
  • **
  • Оффлайн Оффлайн
  • Сообщений: 60
Re: ШИМ на Тион про v2
« Ответ #13 : 01 Октября, 2009, 12:25:43 »

Разобрался :)))
__raw_writel( u, EP93XX_PWM0_TERM_CNT );
__raw_writel( 0x401, EP93XX_PWM0_DUTY_CYCLE);
__raw_writel( 0, EP93XX_PWM0_INVERT);
__raw_writel( 0x0001, EP93XX_PWM0_EN );

gpio_line_config(14,0);//порт нужно сконфигурировать как вход
//Включаем альтернативную функцию порта (бит PonG)
SysconSetLocked( EP93XX_SYSCON_DEVICE_CONFIG, __raw_readl(EP93XX_SYSCON_DEVICE_CONFIG)|0x00000200);//#include <asm/hardware.h>

__raw_writel( u, EP93XX_PWM1_TERM_CNT );
__raw_writel( 0x0401, EP93XX_PWM1_DUTY_CYCLE);
__raw_writel( 0, EP93XX_PWM1_INVERT);
__raw_writel( 0x0001, EP93XX_PWM1_EN );
Может кому пригодится. А в названии темы слово "Таймер" нужно поменять на "ШИМ"
« Последнее редактирование: 01 Октября, 2009, 12:37:14 от asv »
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: ШИМ на Тион про v2
« Ответ #14 : 06 Октября, 2009, 19:41:15 »

Backport для драйвера http://www.arm.linux.org.uk/developer/patches/viewpatch.php?id=5628/1
в svn792:
http://www.zao-zeo.ru/media/files/linux/2.6.20/patch/linux-2.6.20.21_tion_svn792_200910061928.tar.gz

Управляется через /sys/devices/platform/ep93xx-pwm.0

Если нужен PWM1 (EGPIO14, питание дисплея будет отключено), то придётся
изменить в  arch/arm/mach-ep93xx/tion_a8.c
ep93xx_register_pwm(true, false);
на
ep93xx_register_pwm(true, true);
Записан