Цитата(Мусатов Константин @ Sep 5 2009, 10:08)

В операционке может отличаться встраивание.
Лично у меня, ровно одна строка, и это максимум взаммодействия с операционкой - посылка сообщения со сканкодом из обработчика прерывания. А вот вот и весь "обработчик", причем, если не передавать, то он вдвое короче

:
Код
//---------------------------------------------------------------------------
static ulong cmd_transmit = 0L;
#define BIT_START BIT0
#define BIT_STOP BIT10
static int bkey;
static volatile int bcnt;
//---------------------------------------------------------------------------
// ps2_int_handler()
// INT driven service routine that collects 11 bits that make up a scan code
// sent by a PS2 encoder.
//---------------------------------------------------------------------------
__irq __arm void ps2_isr_handler(void)
{
if( cmd_transmit )
{ switch( bcnt )
{ // TX --------------------------
case 11:
bcnt = cmd_transmit = 0; // End transmit;
break;
default: // Transmit Start + Body + parity + Stop
if( cmd_transmit & (1<<(bcnt-1)) )
PS2_DATA_HI();
else
PS2_DATA_LO();
case 0:
bcnt++;
}
}
else
{ // RX --------------------------
if( IOxPIN & PxB_DATA_INP )
bkey |= (1<<bcnt);
if( bcnt < 10 )
bcnt++;
else
{ // 11bits is received - Decode the key
if( ( bkey & (BIT_START|BIT_STOP) ) == BIT_STOP )
{ bkey >>= 1;
xQueueSendFromISR( ATSCAN_handle, &bkey, 0 );
}
else
status_word |= STW_AT_ERROR_DETECTED;
bcnt = bkey = 0;
}
}
EXTINT = PS2_EINT2; // Clear the EXT interrupt flag
VICVectAddr = 0; // Dummy write to signal end of interrupt
}
Цитата
Конечно, коли код использует только порт, то различий почти нет.
Да, а ну если использует некую более продвинутую периферию, то буквы ARM тоже ровным счетом ничего не значат. "Чернила для третьего класса"

Цитата
Ваша реализация клавиатуры PS/2 реализует какие функции интерфейса?
Вы чего спросили-то? Передает команды, получает ответы и сканкоды нажатых клавиш.... Сканкоды перекодируюся в буквы, цифры и управляющие коды.....