Ответ заключается в том, что это зависит от того, обрабатывали ли вы уже прерывание клавиатуры.
Большинство подпрограмм обработки прерываний (ISR) имеют код по окончании их работы, который сообщает аппаратному обеспечению, что он был "обслужен". В случае контроллера клавиатуры на него записываются команды, подтверждающие полученные байты. В момент подтверждения аппаратное обеспечение контроллера клавиатуры перестает использовать электричество для сигнализации о состоянии прерывания.
Если вы обрабатываете прерывание, не связанное с клавиатурой, скажем, прерывание пожарной тревоги, то аппаратное обеспечение клавиатуры, которое электрически утверждает прерывание, сработает при нажатии клавиши. Электрический сигнал игнорируется до тех пор, пока ЦПУ снова не разрешит прерывания. В конце обслуживания прерывания пожарной сигнализации ISR пожарной сигнализации подтверждает любые данные и повторно активирует прерывания на CPU. Сразу же ЦПУ вводит прерывание, потому что контроллер клавиатуры все еще электрически сигнализирует о состоянии прерывания.
Если вы обрабатываете прерывание клавиатуры, и пользователь быстро набирает секундное нажатие клавиши во время выполнения ISR клавиатуры, тогда есть вероятность пропустить данные от второго нажатия клавиши или получить это позже, если вообще. В частности, если ISR сбрасывает контроллер клавиатуры через подтверждение, но ISR фактически не получил все доступные байты из контроллера клавиатуры, то это проблема.
Часто ISR сначала обрабатывает прерывание, которое вызвало его активацию, а затем после подтверждения прерывания опрашивает устройство, чтобы узнать, получило ли оно больше данных с момента первого прерывания. Если это так, сгенерируйте программное прерывание для повторного входа в ISR и обслуживания устройства.