• 키보드 인터럽트가 활성화되지 않아, 레지스터들을 직접 확인하였으나 올바르게 설정되어 있음을 확인하였다.
  • GIC에 키보드 인터럽트를 등록할 때, Priority를 가장 높게 지정하였더니, 키보드 입력이 인터럽트로 들어오게 입력되었다.

Keyboard Interrupt Handler

fn handler(&mut self) {
	let pending =  self.registers.MIS.extract();
	self.registers.ICR.write(ICR::ALL::CLEAR);
	if pending.matches_any(MIS::RXMIS::SET + MIS::RTMIS::SET) {
		while let Some(c) = self._read_char() {
			self._write_char(c);
		}
	}
}
  • 인터럽트가 발생하여 핸들링하지 않으면 같은 인터럽트가 무한히 입력되는 것을 확인할 수 있는데, Handler에서 ICR 레지스터에 0을 작성하여 인터럽트를 클리어해주었더니 정상적으로 핸들링이 되었다.
  • 인터럽트 핸들러에서는 화면에 입력한 문자를 표기하도록 하였다.