Белый пони Posted November 13, 2013 Share Posted November 13, 2013 Здравствуйте! У кого-нибудь был опыт работы c платами с MU860 в QNX 6.5 ? Столкнулся с проблемой, что на плате CP-168U в QNX'е 128-байтный FIFO-буффер работет только как стандартный 1-, 4-, 8- или 14-ти байтный. Последний драйвер с moxa.com, запускает стандартный драйвер для работы с COM-портами: # pidin arg | grep 8250 155666 devc-ser8250 -c14745600,16 -t 14 -u2 a400,11 a408,11 a410,11 a418,11 a420,11 a428,11 a430,11 a438,11 176147 devc-ser8250 -u1 3f8,4 217102 devc-ser8250 -u10 2f8,3 618543 grep 8250 т.е. по умолчанию устанавливает 14-байтный входной буффер: -t 14. При этом входная буфферизация получается именно 14-ти байтная. (Хотя в описании сказано, что доступно всего 3 значения 1, 60 и 120). Пробовал запускать драйвер с опциями -t 1, -t 4, -t 8 . Буффрер устанавливался в соотетствующие значения. Пробовал запускать вообще без опции -t , тогда буффер по умолчанию устанавливался в 8 байт. Отсюда вопрос, как мне в QNX 6.5 полностью использовать 128-байтный буффер на данной плате? PS Проверял работу платы в Win XP x86 и Ubuntu 10.10. В них буффер исправно работает на все 120 входных байт. Link to comment
Agibalov Posted November 19, 2013 Share Posted November 19, 2013 Здравствуйте! К сожалению, большого опыта работы с QNX у нас нет. Мы сейчас пытаемся связаться с программистами и получить от них ответ по Вашей проблеме. Link to comment
Agibalov Posted November 20, 2013 Share Posted November 20, 2013 Получили следующий ответ от программистов - драйвер основан на стандартном компоненте QNX, который накладывает ограничение на размер буфера в 14 байт. Поэтому 14 байт - это максимум для драйвера QNX. Link to comment
Белый пони Posted November 20, 2013 Author Share Posted November 20, 2013 Спасибо! Пробовал переписать для QNX функцию из драйверов для Linux: #define SET_MOXA_MUST_FIFO_VALUE(info) { \ UCHAR __oldlcr, __efr; \ __oldlcr = inb((info)->base+UART_LCR); \ outb(MOXA_MUST_ENTER_ENCHANCE, (info)->base+UART_LCR); \ __efr = inb((info)->base+MOXA_MUST_EFR_REGISTER); \ __efr &= ~MOXA_MUST_EFR_BANK_MASK; \ __efr |= MOXA_MUST_EFR_BANK1; \ outb(__efr, (info)->base+MOXA_MUST_EFR_REGISTER); \ outb((UCHAR)((info)->rx_high_water), (info)->base+MOXA_MUST_RBRTH_REGISTER); \ outb((UCHAR)((info)->rx_trigger), (info)->base+MOXA_MUST_RBRTI_REGISTER); \ outb((UCHAR)((info)->rx_low_water), (info)->base+MOXA_MUST_RBRTL_REGISTER); \ outb((UCHAR)(0), (info)->base+MOXA_MUST_THRTL_REGISTER); \ outb(__oldlcr, (info)->base+UART_LCR); \ } С помощью этой функции в Linux можно задавать любой уровень буффера для выдачи прерываний - rx_trigger - от 1 до 120, включая нестандартные значения (по умолчанию стоит 96). Я пробовал в Linux Ubuntu 10.10. Может кому-то пригодится. Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now