- 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)