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

miheyk

Свой
  • Постов

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

  • Посещение

Весь контент miheyk


  1. Ответ внезапно на сайте ардуины на хабре
  2. Тема получила развитие на лоре
  3. Драйвер ADC через IIO

    Ку. Вступление: есть драйвер АЦП ADS8638 чере IIO, в нем обработчик прерывания с проталкиванием данных от SPI в кольцевой буфер iio. Запуск сбора от триггера sysfs (sysfstrig1): echo 1 > /sys/bus/iio/devices/iio_sysfs_trigger/trigger1/trigger_now. Чтение данных примером generic_buffer.c из устройства /dev/iio:device1 с блокировкой через вызов poll. Пример: /* Обработчик */ static irqreturn_t ads8638_trigger_handler(int irq, void *p) { struct iio_poll_func *pollfunc = p; struct iio_dev *idev = pollfunc->indio_dev; struct ads8638_state *state = iio_priv(idev); ssize_t ts_offset; u16 buf; int ret; ret = spi_read(state->spi, (u8 *)&state->rx_buf[0], 2); if (idev->scan_timestamp) { ts_offset = idev->scan_bytes / sizeof(s64) - 1; ((s64 *)state->rx_buf)[ts_offset] = pollfunc->timestamp; } iio_push_to_buffers(idev, (u8 *)state->rx_buf); iio_trigger_notify_done(idev->trig); return IRQ_HANDLED; } /* Настройка в probe */ ret = iio_triggered_buffer_setup(idev, &iio_pollfunc_store_time, \ &ads8638_trigger_handler, &ads8638_ring_setup_ops); static const struct iio_buffer_setup_ops ads8638_ring_setup_ops = { .preenable = &ads8638_ring_preenable, .postenable = &iio_triggered_buffer_postenable, .predisable = &iio_triggered_buffer_predisable, .postdisable = &ads8638_ring_postdisable, }; Платформа: встраиваемая с ядром 3.8.13. Вопрос: почему при запуске сбора прерывание происходит только один раз после команды echo 1 > /sys/bus/iio/devices/iio_sysfs_trigger/trigger1/trigger_now, в остальное время процесс generic_buffer висит в ожидании poll? Если повторно дать команду echo, то снова происходит прерывание и generic_buffer успешно завершается независимо от переданной при его запуске длине данных.
  4. На target в Eclipse удобно вешать цели программирования и сброса МК.
  5. Горе разработчики, коль они не могут это втихомолку исправить, не вынося сей факт за пределы своего рабочего места :)
  6. Да как бы всегда первым делом проверяешь пайку в контроле на производстве, потому что монтажницы ни то, что не пропаять, так и развернуть на 180 гр. ловко умудряются...сколько их таких случаев было.
  7. Не не, ничего там создавать самим нельзя, это все делает ядро. Открывайте доступ для записи или запускайтесь с виртуальным диском в ОЗУ.
  8. АНТОХА верно про список все указал, а arm-none-eabi-gcc --spec понимает. Если плагин стоит, а вы писали что поставили, то достаточно создать проект, выбрать правильную платформу (Cortex-M3), пройтись по настройкам инклудов, линкера, дефайнов, проверить что все на месте, как указал АНТОХА. Для STM32 как раз надо в настройках задефайнить 100500 символов, указывающих какой именно чип используете, на какой частоте и т.д. Плагин сам подхватит нужный компилятор.
  9. Они появляются при монтировании файловой системы sysfs, содержащей сведения о найденном оборудовании и драйверах. Монтирование через команду mount -t sysfs sysfs /sys, например в скрипте rcS в /etc или в /etc/init.d, или через строку none /sys sysfs defaults,noatime 0 0 в /etc/fstab с командой монтирования в том же скрипте rcS - mount -a. Ссылка. Просветиться рекомендую на ресурсе opennet.ru. 2. В menuconfig ядра есть специальный пункт Networking. Там все включили? У вас включена поддержка модулей или все монолитно? 3. Верно. В ядре кстати еще нужно указать путь до утилиты mdev, кажется в пункте General, точно не помню. Для mdev еще требуется в корне каталог proc, откуда mdev получает данные о событиях. Для fdisk также требуется proc. proc монтируется аналогично п.1. Для сетевых карт ноды не создаются, сет. интерфейс ищите в /sys/class/net
  10. Семин, название программы не подскажете? И да, берегите лес, не портите зазря бумагу :)
  11. Может проект свой прикрепите, а то телепатия какая-то получается...
  12. Не можно, а нужно. Тут важно, чтобы именно проводник между выводом микросхемы и полигоном, и проводник между конденсатором и полигоном были как можно короче, а полигон единым
  13. Нет, хотя бы потому, что может элементарно не хватить регистров. Размещаются эти регистры в АЛУ, т.е.в General Purpose Working Registers. А порты это периферия, к ядру они никак не относятся.
  14. Доступ в регистр всегда быстрее. Для принудительного размещения переменной в регистре используйте ключевое слово register.
  15. Это как? А при малой яркости нормально?
  16. Так зачем вам тогда еще mmc, если все работает? mmc можно просто примонтировать в скрипте init напрямую или добавив в /etc/fstab, а fstab и опцию -a включить в busybox.
  17. http://stackoverflow.com/questions/4604283...ual-studio-2010
  18. Называется это initramfs, временный виртуальный диск, монтируемый в ОЗУ. Только в вашем случае сейчас он остается корневой файловой системой и из него вы работаете, а например на рабочей станции initrd образ только подготавливает железо и запускает init для загрузки с диска. Поэтому в ядре надо отказаться от initramfs и включить initrd, при этом на флешке у вас должен быть уже подготовленный образ файловой системы (как для initramfs) с доступным для драйвера ядра типом ФС. Собрать образ можно утилитой mkfs, например mkfs.jffs2 для JFFS2. Еще в busybox можно собрать udev, включить его использование и поддержку динамического создания нодов в ядре и тогда ссылки сами будут создавать при обнаружении новых устройств, но это все влечет расход ресурсов.
  19. По LPC1778 полно информации. Настроить UART можно или силами хидера LPC177x_8x.h, что в CMSIS, по мануалу, или воспользовавшись библиотекой lpc177x_8x_uart.c, что находится в том же архиве CMSIS (папка lpc177x_8x\Drivers\), там же есть примеры по настройке и использованию периферии (lpc177x_8x\Examples). Сам пользовался для отладки через UART функцией printf() через вызов UARTPutChar из debug_frmwrk.c, т.к. там все настроено было из коробки в режиме 115200-8N. Если боитесь ошибиться, разбейте работу на 2 этапа: 1. запустите UART, напишите функцию передачи строки и через мост UART<Virtual COM Port> проверьте, что все работает; 2. запустите управление модемом, и все должно получиться! А USART_WriteString() есть не что иное, как посимвольная передача (функция UART_SendByte() из lpc177x_8x_uart.c) в цикле до тех пор, пока строка не станет равна 0.
  20. STM32L051K8T6 + SysTick + ADC

    Интересно, что за задачу решаете с таким мизерными квантами времени. И сильно сомневаюсь, что с подобными временными окнами удастся на Cortex-M все реализовать без гонки событий, тут больше ПЛИС напрашивается.
  21. Если у вас все верно как на схеме, включая номиналы резисторов обратной связи и дросселя, и все корректно разведено и собрано, ток нагрузки ниже максимально-допустимого и на EN высокий уровень, то выпаивайте ее к чертям :) т.к. ломаться там больше нечему :) Может при пайке перегрели...
  22. Учиться никогда не стыдно. Ссылка устройства, подробнее на вики тут и тут. Ссылки бывают двух типов: блочные и символьные. Дисковые устройства блочные. Каждый node содержит имя файла устройства и 2 номера (номер драйвера и номер порядковый устройства). О том какие номера указывать можете посмотреть в документации uClinux тут. Создать ноду можно утилитой mknod с правами root - mknod dev/mmcblk0 (ссылка) b(тип) 179(# драйвера) 0(#) -m644(права доступа по желанию). Еще в дистрибутиве поищите файл initramfs, он еще в General настройках ядра прописан. Там перечислены создаваемые автоматом при упаковке initramfs в ядро ноды устройств, папки, файлы и ссылки. Добавьте туда флешку. Можно еще на самой плате создать, если в busybox собран mknod, например как тут.
  23. Создайте ноду устройств mmcblk0p1 в каталоге /dev, потому что если udev не поддерживается, то ноду автоматом вы там не увидите.
  24. И что вас смущает, функция вроде USART_WriteString() отправит в линию ASCII представление написанных символов, в таком виде вы их и увидите осциллографом. Таблицей можете перевести из ASCII в биты. И если подтверждение модемом не выключено, то примите при верной посылке от модема OK.
×
×
  • Создать...