8.4.6 Programmable IO Controller (PIOC)
The PIO controller memory map is split in two parts: the lower 4 Kbytes are never secure, while the upper part is always secure. Each IO line can be configured as secure or non-secure. Once configured as secure in the secure part registers, only the Secure world can reprogram the corresponding IO. It is not possible to reconfigure a secure IO by modifying the non-secure part registers as long as this IO is set as secure.
Interrupts related to events on secure IOs are transmitted on secure lines (ID_PIO*_SINT). Non-secure IO events are transmitted on non-secure interrupt lines (ID_PIO*). The GIC must be configured in order to associate the secure interrupt lines to the secure interrupts group.
Peripheral ID | Type | Security |
---|---|---|
ID_PIOA | User interface interrupt ID |
Secure except the first 4 Kbytes (Non-secure). The interrupt targets Non-secure world (1). |
ID_PIOB | Interrupt ID only | Non-secure |
ID_PIOC | Interrupt ID only | Non-secure |
ID_PIOD | Interrupt ID only | Non-secure |
ID_PIOE | Interrupt ID only | Non-secure |
ID_PIOA_SINT | Interrupt ID only | Secure |
ID_PIOB_SINT | Interrupt ID only | Secure |
ID_PIOC_SINT | Interrupt ID only | Secure |
ID_PIOD_SINT | Interrupt ID only | Secure |
ID_PIOE_SINT | Interrupt ID only | Secure |
Refer to the section Parallel Input/Output Controller (PIO) for more details.