Jump to content
Форум по продукции MOXA

Как включить FIFO-буффер в QNX 6 на CP-168U (MU860) ?


Recommended Posts

Здравствуйте!

 

У кого-нибудь был опыт работы 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

Здравствуйте!

 

К сожалению, большого опыта работы с QNX у нас нет. Мы сейчас пытаемся связаться с программистами и получить от них ответ по Вашей проблеме.

Link to comment

Получили следующий ответ от программистов - драйвер основан на стандартном компоненте QNX, который накладывает ограничение на размер буфера в 14 байт. Поэтому 14 байт - это максимум для драйвера QNX.

Link to comment

Спасибо!

 

Пробовал переписать для 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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...