Страниц: 1 [2] 3
  Печать  
Автор Тема: Проблемы с in32 () или out32()  (Прочитано 17335 раз)
ed1k
QOR.Moderator
*****
Offline Offline

Сообщений: 739


Просмотр профиля WWW
« Ответ #15 : Декабря 02, 2013, 08:52:02 pm »

1. Странный ход для инженера. Лучше выпить или курнуть. От безысходности.
2. Я бы изменил линуксовый код, там где они указатель памяти получают, и функции writel/readl определил бы через волатайл указатели, т е менял бы минимум. Чем меньше самодеятельности, тем лучше.
3. Про бит 8 ничего не могу сказать. Нужно документацию читать, возможно другие биты конфига могут запрещать его изменение. Биты 29 и выше - четко написано, нужно писать единицу для старта действия. И судить произошла ли запись по тому, запустилось ли действие, т е сконфигурировался ли PLL и т д.

Ну а в остальном не отчаивайтесь. Все когда-то начинали.
Записан
denmor86
Участник
*
Offline Offline

Сообщений: 35


Просмотр профиля
« Ответ #16 : Декабря 02, 2013, 09:21:49 pm »

1. Спасибо, жаль что я не пью и не курю, просто очень расстроился, плата в Москве, а я в Питере, приходится мотаться чтобы отлаживать драйвер.
2. Да думаю так и сделаю.
3. Беда в том что, документации то собственно и нету... Плату прошивали в Белоруссии, разработчиков давно уже нету. Имеется только старый драйвер под Debian 5, и карта памяти устройства в pdf.

А в целом спасибо огромное за поддержку.
Записан
ed1k
QOR.Moderator
*****
Offline Offline

Сообщений: 739


Просмотр профиля WWW
« Ответ #17 : Декабря 02, 2013, 09:43:19 pm »

У вас код очень подробный, с комментариями. Для проверки ваших функций установки/сброса битов у вас есть u32 serial_num (rw). Идеально подходит для теста функций доступа. Что вписали, то и должны прочитать.
Записан
denmor86
Участник
*
Offline Offline

Сообщений: 35


Просмотр профиля
« Ответ #18 : Декабря 02, 2013, 09:47:34 pm »

Во вторник буду пробовать ещё читать и писать, надеюсь что дело было только в моей не внимательности.

Спасибо, во вторник отпишусь ещё.
Записан
ed1k
QOR.Moderator
*****
Offline Offline

Сообщений: 739


Просмотр профиля WWW
« Ответ #19 : Декабря 02, 2013, 10:20:04 pm »

Да всегда пожалуйста. А что до Питер-Москва, так наверно потому что рядом и расслабляет. Я, например, в Торонто, а железки, если повезет в Калифорнии, а если не повезет, в другую сторону лететь не меньше 13 часов. Разработчиков и документации чаще нет, чем есть, в эпоху этого застоявшегося кризиса. Ну или если есть документация, то на таком ломаном английском, что лучше б и не было ее.
Пишите. Удачи.
Записан
PoP
Sr. Member
****
Offline Offline

Сообщений: 351


Просмотр профиля
« Ответ #20 : Декабря 03, 2013, 12:23:06 pm »

Добавлю про биты 8....23 - никто не обещял, что плата запомнит, что вы туда пишете. Они вполене могут быть никуда в самой плате не отмаплены.
Записан
denmor86
Участник
*
Offline Offline

Сообщений: 35


Просмотр профиля
« Ответ #21 : Декабря 03, 2013, 07:01:57 pm »

Главное что я теперь понял как мне через serial_num проверить свои функции, ну не доверяю я своему коду)
Записан
Kas1781
Участник
*
Offline Offline

Сообщений: 7



Просмотр профиля
« Ответ #22 : Декабря 06, 2013, 03:47:40 pm »

Кстати при использовании info.CpuBaseAddress[0] для получения адреса нужно базовый адрес включить в макрос:
PCI_MEM_ADDR(info.CpuBaseAddress[0]), а потом его мапить.

Еще в моей практике бывала ситуация когда из регистра нельзя было прочитать то, что записал. Скорее всего следует проанализировать исходный драйвер на предмет вообще использования 8-го бита на чтение.

« Последнее редактирование: Декабря 06, 2013, 03:58:34 pm от Kas1781 » Записан
Basil-64
Sr. Member
****
Offline Offline

Сообщений: 282



Просмотр профиля
« Ответ #23 : Декабря 08, 2013, 09:39:06 pm »

Во первых, поддерживаю ораторов, указывающих на то что аппаратные регистры далеко не всегда зеркальны по записи/чтению. Обычно в описании платы это указывается явно. А во вторых, хоть и тривиально до жути, но с учетом первого опыта автора, стоит напомнить о необходимости использования ThreadCtl(_NTO_TCTL_IO, 0).
Записан

В жизни всегда есть место подвигу - главное быть подальше от этого места. Но никак не получается.
denmor86
Участник
*
Offline Offline

Сообщений: 35


Просмотр профиля
« Ответ #24 : Декабря 11, 2013, 07:36:06 pm »

Итак, краткий отчёт.

Сделал всё как вы все мне советовали. Читать, писать получается во все области памяти.

Теперь образовалась проблема, когда выставляю биты 1(разрешаю прерывания) и 8 (разрешаю сравнение с порогом)
комп виснет намертво (даже мышка не работает), спасает только резет по питанию...
чувствую дело в прошивке плисины(тут как всегда никакой инфы)... или может у меня в драйвере фигня какая...
Ни у кого мыслей на этот счёт нету?
Записан
ed1k
QOR.Moderator
*****
Offline Offline

Сообщений: 739


Просмотр профиля WWW
« Ответ #25 : Декабря 11, 2013, 09:12:49 pm »

Мысли есть. Скорее всего контроллер ПДП настроен не верно и данные с каналов АЦП пишутся не туда, куда следует.

Но на какой платформе вы работаете, и какой контроллер ПДП используете, вы и словом не обмолвились. Поэтому более детальных мыслей нету.  

И еще вопрос, а работает ли эмуляция данных (биты 4-7) с АЦП в память?
« Последнее редактирование: Декабря 11, 2013, 09:15:36 pm от ed1k » Записан
denmor86
Участник
*
Offline Offline

Сообщений: 35


Просмотр профиля
« Ответ #26 : Декабря 11, 2013, 09:27:08 pm »

Плата http://www.cifronik.ru/ADSP-3U.html
Платформа http://emea.kontron.com/products/boards+and+mezzanines/3u+compactpci/x86+processor/cp307.html ОС QNX 6.5
Регистры читаются и записываются (пробовал менять и снова читать всё норм)
Эмуляцию отдельно думаю не проверить, так как не включен блок сравнения с порогом и данные не формируются...
А вот как определить контролер DMA я пока не знаю)
« Последнее редактирование: Декабря 11, 2013, 09:53:24 pm от denmor86 » Записан
ed1k
QOR.Moderator
*****
Offline Offline

Сообщений: 739


Просмотр профиля WWW
« Ответ #27 : Декабря 11, 2013, 10:57:28 pm »

Отставить. У вас там сложнее, чем я думал. По 8Мб на канал на борту. И пишут, что эта память быстро доступна виртексу, т.е. вряд ли мепится в память также как эти ваши регистры статуса/управления. Надо читать доки и смотреть линуксовый драйвер как там этот виртекс напрограммирован чтобы данные ацп прочитать черес РСI или обрабатывать виртексом, если вам нужна обработка. Возможно и нету ПДП, если на борту столько памяти. А все же, что говорит pci -vvv?
Записан
ed1k
QOR.Moderator
*****
Offline Offline

Сообщений: 739


Просмотр профиля WWW
« Ответ #28 : Декабря 11, 2013, 11:03:52 pm »

Еще вопрос. А что вы делаете в обработчике прерывания? Ведь если вы разрешаете прерывания (бит 1), то вы установили свой ISR handler.
Записан
denmor86
Участник
*
Offline Offline

Сообщений: 35


Просмотр профиля
« Ответ #29 : Декабря 12, 2013, 08:52:34 am »

Обработка идёт на самой плисине, мне необходимо управлять её с помощью регистров управления и установки порогов ,а также читать с неё полученные значения по событию превышения порога.

Все функции работы с регистрами я взял из линуксового драйвера, переопределив функции readl, writel и т.д

В обработчике прерывания я выставляю флаги превышения порога в нужном канале, затем через poll проверяю их.
« Последнее редактирование: Декабря 12, 2013, 08:55:38 am от denmor86 » Записан
Страниц: 1 [2] 3
  Печать  
 
Перейти в: