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

 
 
> virt_to_phys в arm-linux'е, как получить физ. адр. локальной переменной ?
vvj
сообщение Nov 23 2005, 13:44
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 46
Регистрация: 20-01-05
Пользователь №: 2 090



Надо (в RM9200) задать Peripheral_DMA_Controller'у адрес буфера (в виде локальной переменной) для отправки (в данном случае в I2S).
Очевидно, DMA_Controller оперирует физ. адресами - соответсвенно я использую макрос __pa() (т.е. virt_to_phys) и пишу полученный физ.адрес в (промапленый есс-но) TransferPointerRegister Peripheral_DMA_Controller'у.

Проблема в том, что прриходит не то. То есть указатель не соотв. дейсвительному для Peripheral_DMA_Controller'а.

Что делать?

EDIT: Вообще сделать надо тоже что и в Application Note doc6020.pdf (Connecting the Atmel ARM-based Serial Synchronous Controller (SSC) to an I2S-compatible Serial Bus)
НО ПОД ЛИНУКС.
Может есть примеры - укажите, плиз!

Вообще - где у линукса "лежат" локальные переменные?

Сообщение отредактировал vvj - Nov 24 2005, 18:55
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
zaratustra
сообщение Nov 25 2005, 07:15
Сообщение #2


Участник
*

Группа: Новичок
Сообщений: 65
Регистрация: 18-11-05
Пользователь №: 11 054



может так?

addr = virt_to_phys(mybuf->data);
remap_pfn_range(vma, vma->vm_start, addr >> PAGE_SHIFT, size, vma->vm_page_prot)

что такое локальные переменные?

если не трудно - в двух словах расскажите про RM9200 и в какой задаче у вас она используется.
Go to the top of the page
 
+Quote Post
vvj
сообщение Nov 25 2005, 09:13
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 46
Регистрация: 20-01-05
Пользователь №: 2 090



Цитата
если не трудно - в двух словах расскажите про RM9200 и в какой задаче у вас она используется.
AT91RM9200 - system on chip. ARM 920T с DMA, MMU и туевой хучей периферийных интерфейсов.
будет использовасться в том числе для вывода аудио на кодек, используя SPI и I2S.
OS - linux 2.6 с патчем от san people'ов

Беда такая: всё нормально если мапишь регистры и пишешь туда по одному байту - всё приходит - осциллограф подтверждает.
А если используешь SPI драйвер - приходит не всегда(мой пост в форуме ARM)
Можно также использовать DMA контроллер, который обслуживает все периферийные интерфейсы (т.е. контроллеры) - там у каждого соотв. группа регистров для "запуска" передачи/приёма. Но туда надо указывать физ. адрес буфера (как DMA используется в линуксе "цивильным" образом - пока непредставляю) ...
Цитата
что такое локальные переменные?
ну это я имел ввиду буфер с аудио потоком, адрес и размер которого надо задать в регистры DMA группы.


Может с DMA всё это надо по другому делать?
Go to the top of the page
 
+Quote Post



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

 


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


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