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

 
 
> 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
Ответов (1 - 4)
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
gab
сообщение Nov 25 2005, 19:50
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 376
Регистрация: 30-06-04
Из: Moskow
Пользователь №: 218



А может wb() поможет?
Мне на связке PCI и x86 с такой же проблемой помогло...
В принципе, wb() (или rwb(), rb(), srb(), swb(), srwb()) гарантирует, что всё что хотели записать в мэпированную (и не только) память, всё записали. Дальше - работа железа...


--------------------
serpents on the way to paradise -
dying for love, fighting for ages.

Go to the top of the page
 
+Quote Post
zaratustra
сообщение Nov 26 2005, 12:11
Сообщение #5


Участник
*

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



У меня нет патчей для spi, поэтому ничего подсказать не смогу.

Почитайте, может кое-что прояснится:
http://lwn.net/images/pdf/LDD3/ch15.pdf

dma_buff_phys = __pa(dma_buff);
Контроллер dma должен понимать когда ему дают физ.адрес dma_buff_phys и обрабатывать чтение/запись в dma_buff. Если интерфейс spi неправильно реагирует, то может не все регистры сконфигурены или патч конкретно для этого контроллера нужно править. Может ещё при передаче указателя в user space есть ошибка? В ядре этот макрос точно работает.
Go to the top of the page
 
+Quote Post

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

 


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


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