Ник:
Пароль:

Контакты

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
Поисковых ботовПоисковых ботов:2
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:6
Форум » starterkit.ru » Embedded Linux
sasamy (Guest)
Добавлено 16.03.2009 11:55 Редактировалось 16.03.2009 11:55 Сообщение: 91
sasamy (Guest)

Цитата
Мб всё это вполне легко реализуется 1ой микросхемой и парой деталек ... (хотя возможно ошибаюсь).

Нет не ошибаетесь, если коротко:
1 нужен цап который не требует инициализации или режим которого задается логическими уровнями на соответствующих лапах и который умеет работать в режиме i2s. (я делал на wm8725 - подобных цап очень много, например их ставят в cdrom)
2 Нужно сконфигурировать частоту plla так чтобы она была кратна частоте цап для нужного сэмплрэйта, делается это в bootstrap.
3 подключить цап как на оригинальной атмеловской плате
4 воспользоваться драйвером для атмеловского кодека at73c213 в ядре
Чтобы узнать как я делал - можно воспользоваться поиском по форуму по "wm8725". Будут вопросы - спрашивайте.
Спуститься к концу Подняться к началу
sasamy (Guest)
Добавлено 16.03.2009 12:56 Редактировалось 16.03.2009 12:56 Сообщение: 92
sasamy (Guest)

Цитата
Как это делается в avr и pic то я и сам знаю :)

Если знаком принцип получения звука при помощи шим реализовать его на любой архитектуре не преблема. У sam9260 очень гибкие настройки таймера-счетчика, можно практически все что угодно получить. я буквально на днях только начал им вплотную заниматься так что рабочих примеров не обещаю - только то как делаю сам и как я это вижу. в даташите все хорошо описано,если кратко:
два основных режима - захват и генерация. захват мне совсем не нужен как и вам в данном случае так что все применительно к генерации: основа - регистр счетчик, сравнивается с тремя регистрами a,b,c и в зависимости от настроек выполняются действия при равенстве значений.

Код

#define at91_tc_read(reg) __raw_readl(tc0_base + (reg))
#define at91_tc_write(reg, val) __raw_writel((val), tc0_base + (reg))

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

/* Map TC0 registers to the current address space */
tc0_base = ioremap_nocache(AT91SAM9260_BASE_TC0, 64);
if (!tc0_base) {
printk(KERN_ERR "at91adc: Can't remap TC0 register area
");
ret = -EACCES;
goto exit4;
}

/* Configure TC0 in waveform mode, MCK/32 */
at91_tc_write(AT91_TC_CMR, AT91_TC_WAVE | AT91_TC_WAVESEL_UP_AUTO
| AT91_TC_TIMER_CLOCK3 | AT91_TC_ACPA_SET | AT91_TC_ACPC_CLEAR);
/* max samle rate, duty 50% - в данном случае применительно к adc - у меня таймер будет аппаратно пинать его чтобы он начинал новое измерение и на начальном этапе я настраиваю на макс пропускную способность adc в районе 300 кГц (ksps) */
at91_tc_write(AT91_TC_RA, 5);
at91_tc_write(AT91_TC_RC, 10);

at91_tc_write(AT91_TC_CCR, AT91_TC_SWTRG | AT91_TC_CLKEN);

Это работа на уровне ядра - юзерспейс не сильно будет отличаться, посмотрите пример repairman как работать с регистрами процессора - тут все тоже самое. Вас наверно будут интересовать два момента
at91_tc_write(AT91_TC_RA, 5);
at91_tc_write(AT91_TC_RC, 10);
изменяя значние RC (только для данного режима) будет меняться частота а при измение RA - соотношение провалов и горбов в меандре.
Спуститься к концу Подняться к началу
repairman (Guest)
Добавлено 16.03.2009 13:26 Редактировалось 16.03.2009 13:26 Сообщение: 93
repairman (Guest)

Только не частота... классический ШИМ подразумевает переменную скважность при постоянной частоте.

8 битный звук, IMHO, сделать реально... 16 бит, только с очень низкой частотой дискретизации, даже для телефонии не хватит...

Для 8 бит и выходного диапазона 0.. 20 кГц получаем TC с частотой ~10 Mhz (2 * 20000 * 256 = 10,24 Mhz). Сколько там у таймера предел тактовой ? Наверное, до 10-11 бит можно поднять...

Режим 8 бит PWM с автоперезапуском, остается класть по прерыванию переполнения нужное число в соотв. compare регистр... события равенства и обнуления связать с toggle внешнего пина...

Там, вроде, есть по 2 compare регистра на таймер ? Значит для стерео достаточно 1-ого таймера, одной опоры для нескольких каналов достаточно... а compare регистры загружаются каждый своим каналом...
3 таймера, каждый с 2 регистрами сравнения - 6 канальный звук... ;-) Сигнал-шум, правда, "8 битный" = 48 db (а не 96, как у 16 бит...), соизмеримо с очень хорошей магнитофонной лентой...

ВСЯ внешняя обвеска - RC цепочка...
Классический 8 bit SoundBlaster (кто помнит времена MS DOS..)

Пробовал на AVR'ах... работало...

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Отредактированно repairman 16.03.2009 г. в 14:03:09
Спуститься к концу Подняться к началу
Strijar (Guest)
Добавлено 16.03.2009 14:05 Редактировалось 16.03.2009 14:05 Сообщение: 94
Strijar (Guest)

Цитата
Классический 8 bit SoundBlaster (кто помнит времена MS DOS..)


А для любителей старины могу еще посоветовать Covox ;) Только данные в GPIO надо очень быстро подавать - по прерыванию от таймера
Спуститься к концу Подняться к началу
sasamy (Guest)
Добавлено 16.03.2009 14:34 Редактировалось 16.03.2009 14:34 Сообщение: 95
sasamy (Guest)

Цитата
Только не частота... классический ШИМ подразумевает переменную скважность

Вообщето я предупредил что это для моего случая описание и для чего я использую таймер - что такое шим я знаю.
Цитата
Сколько там у таймера предел тактовой ?

mck/2 - для нашей платы 50 МГц, у меня на несколько мегагерц поменьше.
Спуститься к концу Подняться к началу
sly (Guest)
Добавлено 16.03.2009 15:44 Редактировалось 16.03.2009 15:44 Сообщение: 96
sly (Guest)

Не могу подключиться к плате по гипертерминалу. Помогите, что я мог сломать и как можно проверить?
Спуститься к концу Подняться к началу
sasamy (Guest)
Добавлено 16.03.2009 17:41 Редактировалось 16.03.2009 17:41 Сообщение: 97
sasamy (Guest)

1 целостность кабеля (я уже два раза родной который с платой перепаивал - таскаю плату с собой везде :)
2 на месте ли перемычки 7,8 (между двумя разъемами рядом с usb-host портом - 6 контактов, начиная от усб должно быть : перемечка х2, пусто, перемычка х2, пусто)
3 в эмуляторе терминала аппаратное управление потоком должно быть отключено, парметры порта 115200, 8n1
4 БП живой ? :)
Спуститься к концу Подняться к началу
sly (Guest)
Добавлено 16.03.2009 18:04 Редактировалось 16.03.2009 18:04 Сообщение: 98
sly (Guest)

Кабели, источник и терминал в порядке (другая плата работает)
Спуститься к концу Подняться к началу
starterkit (Guest)
Добавлено 16.03.2009 18:13 Редактировалось 16.03.2009 18:13 Сообщение: 99
starterkit (Guest)

Может загрузчик затерли, подробности восстановления здесь.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Отредактированно starterkit 16.03.2009 г. в 18:14:02
Спуститься к концу Подняться к началу
sly (Guest)
Добавлено 16.03.2009 18:19 Редактировалось 16.03.2009 18:19 Сообщение: 100
sly (Guest)

To starterkit.
А если затер загрузчик, гипертерминал хоть что-то должен говорить? У меня вообще тишина...
Спуститься к концу Подняться к началу
Форум » starterkit.ru » Embedded Linux