Перейти к содержанию

Viwon

Участник
  • Публикаций

    45
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о Viwon

  • Звание
    Участник
  1. 1) Когда разбирался с драйверами(полтора года назад) не видел рекомендаций об отказе от файлов в /dev, были рекомендации не использовать функцию ioctl для управления настройками устройства/драйвера, в пользу управления настойками через файлы в /sys 2) Device - это устройство, в вашем случае "лампочки", Driver - это программа управляющая этим устройством, которую вы разрабатываете. Platform - значит, что усройство встоенное, т.е. всегда подключено. Т.е. это две разные сущности - встроенное устройство(железо) и драйвер для встроенного устойства(программа). 3) Я бы сказал написание драйвера это написание функций-обработчиков чтения/записи и т.д файлов. Создание файла устойства и связь его с устойством(драйвером) сейсас дело пару сток, в вашем случае это делает функция proc_create(). 4) base_addr - связан с регистрами устойства "лампочки", если у этого устойства несколько подряд идущих регистров(и это описано в конфигурационных файлах), то да, к ним можно обращаться смещаясь относитльно base_addr.
  2. Из особенностей UPP, описание которых не нашел в документации, могу отметить(может что изменилось, давно было): 1. Толи модуль UPP, толи его DMA работают от внешнего клока UP_CHx_CLOCK, т.е. его нужно подавать, даже когда данные с АЦП не поступают. 2. При повторном запуске, DMA может в начало скопировать "старые" данные из буфера. Поэтому перед пуском нужно делать сброс UPP. А так подготовка UPP к работе отлично расписана по шагам в SPRUH77A в секциях: 33.2.7.1; 33.2.6.1 и 9.3.2; Проверте может, что-то пропустили.
  3. То, что снаружи ни какой реакции нет - это ясно. Предполагаем, что с железом все хорошо. Процессор сам по себе ни чего не делает. Тогда вопрос встает следующим образом, пытается ли программа "выдать команду reset на NAND"? Может она завершается раньше. В эксперименте с подачей на все ножки 1-0 в бесконечном цикле, есть уверенность, что программа на вашей плате заходит в этот цикл? Если гарантированно заходит, в таком случае надо убедиться, что 1. Подача тактового сигнала на модуль GPIO разрешена 2. Что выводы сконфигурированы как GPIO В случае NAND надо убедится, что 1. тактовая частота EMIFA в допустимом диапазоне 2. разрешена подача тактового сигнала на модуль EMIFA 3. EMIFA сконфигурирован верно Может еще что-то... если все соблюдено значит дело в железе.
  4. Ревизию можете посмотреть в Memory Browser по адресу 0xFFFD0000, режим Caracter. Увидите что то типо d800k00*, где * - 2,4,6,8 Посмотрите, также значение по адресу 0x68000000, режим 32-bit hex, он должен содержать 0x40000205. Это регистр EMIFA.MIDR. И расшифруйте "не может выдать команду reset на NAND", в идеале должно быть "после чтении/записи такого-то региста/адреса..."
  5. Раз есть исходники, то подключитесь отладчиком и отследите процесс выполнения программы
  6. Получается программа чистки NAND зависает по не понятным причинам. Вы какой-нибудь другой код на процессоре запускали, работал?
  7. Цитата(LAS9891 @ Apr 18 2017, 08:42) А правильно ли я указал в строчке -source [get_ports CLOCK], что источником сигнала является тактовый сигнал CLOCK? В действительности я считываю состояние внешнего сигнала CMOS_DOUT1, а по фронту CLOCK записываю это значение в DOUT1. Замена не помогла: Warning (332049): Ignored create_generated_clock at ___.sdc(19): Argument -source is an empty collection Info (332050): create_generated_clock -source [get_ports CLOCK] -name DOUT1 [get_registers {*|DOUT1}] Warning (332060): Node: READ_CMOS:READ_DATA|DOUT1 was determined to be a clock but was found without an associated clock assignment. Теперь он ругается, что не может найти ножку названую CLOCK. Вы пишите, что ЦитатаCLOCK - сигнал генерируемый PLL внутри ПЛИС В таком случае нужно указать выход PLL, что-то типа -source {pll|altpll_component|auto_generated|pll1|inclk[0]}, точное название смотрите в консоле во время компиляции. Подробнее об описании клоков посмотрите здесь. А в общем вам правильно говорят, не плодите клоки, если можно обойтись без них.
  8. Компилятор ругается что не может найти регистр DOUT1, нужно указать полный путь к нему замените [get_registers DOUT1], на [get_registers {*|DOUT1}], если регистр с таким именем у вас в проекте один, иначе вместо * указать весь путь
  9. У меня ножки выбора загрузки(MSEL) посажены на землю, что соответствует режиму загрузки Active Serial, видимо поэтому ASDO и nCSO недоступны, вне зависимости от того, что указано в прошивке. Был не прав. Получить доступ к ASDO удалось, с помощью мегафункции JTAG-accessable Extensions -> Serial Flash Loader. В ее настройках надо поставить галочку "Share ASMI interface in your design". Однако, доступ только на вывод, да и способ на мой взгляд убогий. В общем, чтобы работать с ножкой ASDO Cyclone II, как с обычной ножкой (на ввод и вывод), необходимо чтобы MSEL0 = 1(режим Passive Serial) Источник
  10. Golikov A. Да, задано "Use as regular I/O". Мегофункцию не нашел.
  11. С другимм ножками работает. А вы какую ПЛИС используете, Cyclone II EP2C5T144?
  12. Вот, проект(Quartus II v13.0). FPGA_CLK - входная частота Модуль CLOCKS - делитель входной частоты LED - в данном случае меандр, подается на вывод ASDO Цитата(Genadi Zawidowski @ Apr 13 2017, 14:45) 1 на всех ногах weak pull-up 2 к вас в проекте эта нога на ввод? Точно? 1 Ножка "висит в воздухе" 2 Точно
  13. Доброго времени суток! Пытаюсь выдать сигнал на вывод ASDO, но на выходе всегда высокий уровень. ПЛИС - Cyclone II. Необходимые настройки сделал. Может кто сталкивался с подобной проблемой?
  14. nill Да, нужно просто передать, и преобразования можно осуществить на стороне DSP, как вариант так и сделаю. Но мне кажется, что преобразование данных в удобный для человека/железа вид, проверка допустимости входных параметров, и другая мелочь — это работа для драйвера, а DSP пусть занимается основной математикой. Lagman Что касается передачи набора байт, то хочется придерживаться правила, что все параметры в /sys должны быть в текстовом виде. Это очень удобно, можно управлять устройством стандартными командами типа echo, cat. jcxz Про PRUSS посмотрю, пока даже не знаю что это. Общение ARM<->DSP у меня происходит через общую память, при обновлении данных вызывается прерывание и адресат их забирает. С ядром маленькое недоразумение, я имел ввиду ядро ОС Linux, не ARM-ядро. А ядро Linux не использует стандартные библиотеки, а в нем отключена поддержка float.