An interrupt is caused by a software (mostly for sys-calls), hardware (for example: pressing a key on the keyboard), or by an exception (for example division by zero)
Interrupts are handled in the interrupt handler in the CPU.
Interrupt controllers
Systems often use an interrupt controller to group device interrupts before passing an interrupt to the CPU. This saves interrupt pins on the CPU and adds to the flexibility.