2011-12-16 2 views
0

Я пытаюсь записать на параллельный порт в первый раз с помощью драйвера lptDrv vxWorks, но вызов функции write() всегда возвращает -1. Вот код, который я использую:vxWorks Параллельный порт write() Failure

#define PARALLEL_PORT "/lpt/0" 

/* Create a device for the parallel port */ 
lptDevCreate(PARALLEL_PORT,0) 

/*open the parallel port*/ 
parallelPortFD = open(PARALLEL_PORT, O_CREAT|O_WRONLY, 0)) 

LOCAL UINT32 watchdogBit = 0x01; 
if (write(parallelPortFD, (char*) watchdogBit, sizeof(UINT32)) == -1) 
{ 
    /* Always hits this block */ 
} 

Оба звонка в lptDevCreate и open return okay. В настоящее время у меня нет аппаратного обеспечения, подключенного к параллельному порту, поэтому это затрудняет тестирование, но я не думаю, что это также вызвало бы сбой записи.

Для получения дополнительной информации какой-то, я был в состоянии назвать lptShow(), но я не уверен, что я смотрю на:

controlReg  = 0xff 
statusReg   = 0xff 
created   = TRUE 
autofeed   = TRUE 
inservice   = FALSE 
normalInt   = 0 
defaultInt  = 0 
retryCnt   = 1 
busyWait (loop) = 10000 
strobeWait (loop) = 10000 
timeout (sec) = 1 
intLevel (IRQ) = 7 
+0

Какая версия vxWorks, плата и BSP? Это важные элементы при решении аппаратных проблем. Глядя на рутину шоу, не похоже, что вы разговариваете с аппаратом порта, а прерывание не подключено. Вы должны посмотреть исходный код драйвера lpt. – Benoit

+0

vxWorks 6.7 с использованием Intel Core 2 BSP на лесной плате Cook. Я думаю. Я извлекаю свою информацию из кода и не выполняю начальную настройку аппаратного/BSP (и не знаю, как это сделать). Я считаю, что исправил одну проблему. У конфигурации ядра был другой номер порта, чем у BIOS, поэтому я обновил конфигурацию ядра для соответствия. Теперь я вижу «controlReg = 0xe» и «statusReg = 0x78» при выполнении lptShow(). Тем не менее, я все еще получаю сообщение об ошибке при вызове write(). – bjsample

ответ

0

Конфигурация ядра была другой номер порта, чем BIOS, поэтому я обновил конфигурацию ядра для соответствия. Затем было показано, что statusReg установлен в 0x78, что указывает на то, что 1. порт занят и 2. ошибка в бумаге. Поскольку в параллельный порт ничего не было подключено, в качестве статуса по умолчанию было указано 0x78. У меня все еще нет аппаратного обеспечения для проверки порта, но поддержка ветрового ветра наблюдала аналогичные результаты без подключенного устройства, которое затем было исправлено, когда что-то было подключено к порту. Спасибо Бенуа за ответ, который заставил меня двигаться снова.

Смежные вопросы