Input/Output

  • Ports
    • GPIO = General Purpose Input Output
    • UART
  • Memory layout for IO
    • Flat - Directly assess devices at a memory address, efficient but less secure. More prevalent in modern system.
    • Segmented: Memories divided into separate segments, some are dedicated for devices. Better isolation.

Device

  • Components - three (sets) of registers
    • Control - configure
    • Status - interrogate
    • Data - interact
  • Reading from a previously written register does not necessarily yield the same result!

Interrupt

  • Polling vs Interrupt
    • Polling - heavy lifting is on CPU
    • Interrupt - move a bit of intelligence to device, async and aperiodic
  • Pins (usually low enable)
    • IRQ pin: maskable interrupt request
    • XIRQ pin: un-maskable, always handled
  • PIC = Programmable Interrupt Controller, decodes which device interrupts. Typically handles all the maskable interrupts.
  • Multiple IRQ lines and priority
  • Nested Interrupt
  • Procedure
    • Device event
    • Device “raises” interrupt
    • CPU finish instruction
    • Save critical state: PC, regs, stack pointer, flags, CCR (condition code regs), usually pushed to stack.
    • Jump to exception handler, Vector Table (a list of addresses of functions and devices)
  • ISR = Interrupt Service Routine, part of device driver
    • Invoked in supervisor mode, hence we want ISR to be “really short and sweet”
    • Save registers (writing asm in C…)
    • Read status or data, save them to buffer
    • RTI = Return from the Interrupt (unlike in C, RTS = Return from the Subroutine)