QNX BSP 1.0 для СРВ902/CPC106 Описание и руководство разработчика (пользователя) Содержание 1 Краткое описание QNX BSP для СРВ902....................................................................................... 2 2 Установка QNX BSP для СРВ902.................................................................................................... 2 3 Драйвер видео контроллера ............................................................................................................. 3 4 Драйвер IDE контроллера ................................................................................................................ 3 5 Драйвер Ethernet контроллера ......................................................................................................... 3 6 Драйвер USB контроллера ............................................................................................................... 4 7 Драйвер COM контроллеров ............................................................................................................ 4 8 Библиотека RS-485 интерфейса ....................................................................................................... 5 8.1 rs485_tx_on () ............................................................................................................................. 5 8.2 rs485_tx_off () ............................................................................................................................ 5 8.3 rs485_write_packet () ................................................................................................................. 6 8.4 rs485_read_packet () ................................................................................................................... 6 Библиотека сторожевого таймера контроллера SIO ...................................................................... 7 9 9.1 watchdog_sio_init () ................................................................................................................... 7 9.2 watchdog_sio_deinit () ................................................................................................................ 7 9.3 watchdog_sio_set () .................................................................................................................... 7 Библиотека сторожевого таймера супервизора ......................................................................... 8 10 10.1 watchdog_sv_init ()................................................................................................................. 8 10.2 watchdog_sv_deinit () ............................................................................................................. 8 10.3 watchdog_sv_on () .................................................................................................................. 9 10.4 watchdog_sv_off () ................................................................................................................. 9 10.5 watchdog_sv_reset () .............................................................................................................. 9 1 1 Краткое описание QNX BSP для СРВ902/CPC106 Под ОСРВ QNX Momentics (QNX 6.3.x) реализована поддержка следующих компонентов модуля центрального процессора СРВ902: – видео контроллер LynxEM+; – IDE контроллер; – Compact Flash; – два контроллера Ethernet DP83815; – два порта USB 1.1; – шесть последовательных портов COM1 – COM6; – полудуплексный режим RS-485 для COM3 – COM6; – сторожевой таймер, встроенный в SIO; – сторожевой таймер, встроенный в супервизор. 2 Установка QNX BSP для СРВ902/CPC106 QNX BSP для СРВ902 поставляется в виде сжатого tar архива: qnx630-bsp-cpb902-10.tgz Для установки следует предварительно скопировать его в каталог на диск и распаковать следующим образом: #tar –xzvf qnx630-bsp-cpb902-10.tgz Затем перекопировать распакованные файлы в соответствующие директории. В архиве содержатся следующие файлы: /bin/rs485test - Тестовая программа обмена по RS-485 интерфейсу. /bin/wdtsio - Утилита как пример использования библиотеки сторожевого таймера контроллера SIO. /bin/wdtsv - Утилита как пример использования библиотеки сторожевого таймера супервизора. /etc/system/config/graphics-traplist - Файл конфигурации для задания драйвера видео контроллера. /sbin/devc-tl16c754 - Драйвер UART контроллера TL16C754 и совместимых с 8250 типом контроллеров UART. /src/rs485/rs485io.h - Файл заголовков библиотеки RS-485 интерфейса. /src/rs485/rs485io.c - Исходный код библиотеки RS-485 интерфейса. /src/rs485/rs485test.c - Исходный код тестовой программы обмена по RS-485 интерфейсу. /src/wdt/watchdog.h - Файл заголовков библиотеки двух сторожевых таймеров. /src/wdt/libstpcvega.a - Файл библиотеки функций двух сторожевых таймеров. 2 /src/wdt/wdtsio.c - Исходный код утилиты как пример использования библиотеки сторожевого таймера контроллера SIO. /src/wdt/wdtsv.c - Исходный код утилиты как пример использования библиотеки сторожевого таймера супервизора. 3 Драйвер видео контроллера Графический режим видео контроллера LynxEM+ поддерживается следующим драйвером: /lib/dll/devg-smi7xx.so Для запуска графической оболочки Photon с этим драйвером следует в конфигурационный файл /etc/system/config/graphics-traplist добавить следующую строчку: devgt-iographics –dldevg-smi7xx.so –I0 –d0x126f,0x0712 Оптимальным режимом для данного контроллера можно считать: 1024х768 16-bit. Более подробную информацию можно получить из документации на ОСРВ QNX Momentics: http://www.qnx.com/developers/docs/6.3.0SP1/neutrino/utilities/d/devg-smi7xx.so.html 4 Драйвер IDE контроллера Два IDE контроллера, ко второму из которых подключается Compact Flash, поддерживаются стандартным драйверов: /sbin/devb-eide Для запуска драйвера Compact Flash и автоматического подключения, предварительно созданной партиции с номером 77 (qnx), к файловой системе, следует выполнить следующую команду: devb-eide blk automount=hd0t77:/fs/cf Более подробную информацию можно получить из документации на ОСРВ QNX Momentics: http://www.qnx.com/developers/docs/6.3.0SP1/neutrino/utilities/d/devb-eide.html 5 Драйвер Ethernet контроллера Два Ethernet контроллера DP83815 от National Semiconductor поддерживаются следующим драйвером: /lib/dll/devn-ns83815.so Для запуска менеджера io-net с сетевым драйвером и протоколом qnet, используя параметрами по умолчанию, следует выполнить следующую команду: #io-net -dns83815 -pqnet Для запуска драйвера сетевого контроллера со скоростью 100Mbps на полный дуплекс следует добавить следующие опции: #io-net -dns83815 speed=100,duplex=1 -dns83815 speed=100,duplex=1 pqnet 3 Более подробную информацию можно получить из документации на ОСРВ QNX Momentics: http://www.qnx.com/developers/docs/6.3.0SP1/neutrino/utilities/i/io-net.html http://www.qnx.com/developers/docs/6.3.0SP1/neutrino/utilities/d/devn-ns83815.so.html 6 Драйвер USB контроллера Два порта USB 1.1 поддерживаются следующим драйвером: /lib/dll/devu-ohci Для запуска менеджера io-usb с контролером USB следует выполнить следующую команду: #io-usb -dohci Для просмотра всех подключенных USB устройств следует запустить утилиту usb. Для использования USB FLASH диска следует запустить драйвер devb-umass. Более подробную информацию можно получить из документации на ОСРВ QNX Momentics: http://www.qnx.com/developers/docs/6.3.0SP1/neutrino/utilities/i/io-usb.html http://www.qnx.com/developers/docs/6.3.0SP1/neutrino/utilities/d/devu-ohci.so.html 7 Драйвер COM контроллеров Шесть последовательных портов COM1 – COM6 поддерживаются драйвером, входящим в QNX BSP для СРВ902: /sbin/devc-tl16c754 Этот драйвер реализует поддержку UART контроллера TL16C754 и других совместимых с 8250 типом контроллеров UART. Также, первые два последовательных порта COM1 – COM2 поддерживаются стандартным драйвером: /sbin/devc-ser8250 Если порты COM3 – COM6 сконфигурированы в BIOS по 100h адресу на 9 прерывание, то для запуска драйвера для всех шести последовательных портов следует задать следующие опции: #devc-tl16c754 3f8,4 2f8,3 100,9 108,9 110,9 118,9 Драйвер поддерживает все три режима работы портов COM3 – COM6: RS-232, RS-422 и RS-485. Для работы с портами в режиме RS-485 рекомендуется воспользоваться специально разработанной библиотекой ввода-вывода. Переключение режимов работы портов COM3 – COM6 осуществляется в BIOS. Более подробную информацию можно получить из документации на ОСРВ QNX Momentics: http://www.qnx.com/developers/docs/6.3.0SP1/neutrino/utilities/d/devc-ser8250.html 4 8 Библиотека RS-485 интерфейса Библиотека RS-485 интерфейса предназначена для работы с портами COM3 – COM6, сконфигурированными в полудуплексный режим (режим RS-485). Библиотека, исходные тексты и пример использования входят в QNX BSP для СРВ902: /src/rs485/rs485io.tgz Библиотека состоит из следующих четырех функций: rs485_tx_on () rs485_tx_off () rs485_write_packet () rs485_read_packet () 8.1 rs485_tx_on () Функция включения передатчика RS-485 интерфейса. Синтаксис: #include "rs485io.h" int rs485_tx_on (int fd); Аргументы: fd - Файловый дескриптор порта. Описание: Функция rs485_tx_on () производит включение передатчика RS-485 интерфейса соответствующего файловому дескриптору fd. Возвращает: Результат функции devctl(). 8.2 rs485_tx_off () Функция выключения передатчика RS-485 интерфейса. Синтаксис: #include "rs485io.h" int rs485_tx_off (int fd); Аргументы: fd - Файловый дескриптор порта. Описание: Функция rs485_tx_off () производит выключение передатчика RS-485 интерфейса соответствующего файловому дескриптору fd. Возвращает: Результат функции devctl(). 5 8.3 rs485_write_packet () Функция записи пакета данных в порт RS-485 интерфейса. Синтаксис: #include "rs485io.h" int rs485_write_packet (int fd, char *packet, int lenth); Аргументы: fd - Файловый дескриптор порта. packet - Указатель на область данных, содержащую пакет дынных. lenth - Длина пакета в байтах. Описание: Функция rs485_write_packet () записывает пакет данных расположенный по указателю packet длиной lenth в порт RS-485 интерфейса, соответствующего файловому дескриптору fd. Возвращает: В случае успешного завершения число переданных байт. В случае превышения времени ожидания возвращает 0. В случае возникновении ошибки возвращает -1. 8.4 rs485_read_packet () Функция чтения пакета данных из порта RS-485 интерфейса. Синтаксис: #include "rs485io.h" int rs485_read_packet (int fd, char *packet, int lenth); Аргументы: fd - Файловый дескриптор порта. packet - Указатель на пакет дынных. lenth - Длина пакета в байтах. Описание: Функция rs485_read_packet () читает пакет данных длиной lenth в буфер по указателю packet из порта RS-485 интерфейса, соответствующего файловому дескриптору fd. Возвращает: В случае успешного завершения число прочитанных байт. В случае превышения времени ожидания возвращает 0. В случае возникновении ошибки возвращает -1. 6 9 Библиотека сторожевого таймера контроллера SIO Библиотека сторожевого таймера контроллера SIO предназначена для инициализации, установки счетчика, включения, выключения и сброса встроенного в него сторожевого таймера. Библиотека и пример использования входят в QNX BSP для СРВ902: /src/wdsio/wdtsio.tgz Библиотека состоит из следующих трех функций: watchdog_sio_init () watchdog_sio_deinit () watchdog_sio_set () 9.1 watchdog_sio_init () Функция инициализации сторожевого таймера контроллера SIO. Синтаксис: #include "watchdog.h" int watchdog_sio_init (void); Описание: Функция открывает порты обмена со сторожевым таймером контроллера SIO и инициализирует соответствующие регистры. Счетчик при этом не включается. Возвращает: В случае успешного завершения возвращает EOK, в случае ошибки -1. 9.2 watchdog_sio_deinit () Функция освобождения ресурсов сторожевого таймера контроллера SIO. Синтаксис: #include "watchdog.h" int watchdog_sio_deinit (void); Описание: Функция выключает сторожевой таймер контроллера SIO и закрывает порты обмена с ним. Возвращает: В случае успешного завершения возвращает EOK, в случае ошибки -1. 9.3 watchdog_sio_set () Функция установки счетчика сторожевого таймера контроллера SIO. Синтаксис: #include "watchdog.h" 7 void watchdog_sio_set (uint8_t timeout); Параметры: timeout - Количество секунд от 1 до 255, устанавливаемое для обратного отсчета счетчика сторожевого таймера. Описание: Функция устанавливает счетчик сторожевого таймера контроллера SIO в значение timeout. Для сброса счетчика следует повторно вызвать эту функцию, задав новое значение для обратного отсчета. Для останова счетчика следует установить timeout в 0. 10 Библиотека сторожевого таймера супервизора Библиотека сторожевого таймера супервизора предназначена для инициализации, включения, выключения и сброса встроенного в него сторожевого таймера. Библиотека и пример использования входят в QNX BSP для СРВ902: /src/wdtsv/wdtsv.tgz Библиотека состоит из следующих пяти функций: watchdog_sv_init () watchdog_sv_deinit () watchdog_sv_on () watchdog_sv_off () watchdog_sv_reset () 10.1 watchdog_sv_init () Функция инициализации сторожевого таймера супервизора. Синтаксис: #include "watchdog.h" int watchdog_sv_init (void); Описание: Функция открывает порты обмена со сторожевым таймером супервизора и запоминает значения регистров до инициализации. Возвращает: В случае успешного завершения возвращает EOK, в случае ошибки -1. 10.2 watchdog_sv_deinit () Функция освобождения ресурсов сторожевого таймера супервизора. Синтаксис: #include "watchdog.h" 8 int watchdog_sv_deinit (void); Описание: Функция закрывает порты обмена со сторожевым таймером супервизора и восстанавливает значения его регистров в состояние соответствующее до инициализации. Возвращает: В случае успешного завершения возвращает EOK, в случае ошибки -1. 10.3 watchdog_sv_on () Функция включения счетчика сторожевого таймера супервизора. Синтаксис: #include "watchdog.h" void watchdog_sv_on (void); Описание: Функция включает счетчик сторожевого таймера супервизора. Если до истечения времени отсчета счетчик сторожевого таймера не будет сброшен или выключен, то произойдет сброс СРВ902. 10.4 watchdog_sv_off () Функция выключения сторожевого таймера супервизора. Синтаксис: #include "watchdog.h" void watchdog_sv_off (void); Описание: Функция выключает сторожевого таймера супервизора. 10.5 watchdog_sv_reset () Функция сброса счетчика сторожевого таймера супервизора. Синтаксис: #include "watchdog.h" void watchdog_sv_reset (void); Описание: Функция сбрасывает счетчик сторожевого таймера супервизора. 9