Version 10 (modified by 10 years ago) (diff) | ,
---|
GIET_VM / Peripherals Drivers
-
GIET_VM / Peripherals Drivers
-
- BDV (Block Device controller)
- CMA (Chained Buffer DMA controller)
- DMA (Multi-Channels DMA controller)
- HBA (AHCI Disk controller)
- IOB (I/O Bridge controller)
- IOC (Generic I/O controller)
- MMC (Memory Cache controller)
- MWR (MWMR_DMA controller)
- NIC (Gigabit Ethernet Network controller)
- PIC (External Peripherals Interrupt controller)
- RDK (RamDisk)
- SIM (Monitor controller)
- SDC (SDC Disk controller)
- TIM (Multi Timers controller)
- TTY (Multi Terminals TTY controller)
- XCU (Extended Interrupt controller)
-
The GIET_VM supports two types of peripheral components: External peripherals are located in one single cluster (called cluster_io, and identified by the X_IO,Y_IO variables). Internal peripherals (such as DMA, XCU, or MMC) are replicated in all clusters.
Each driver xxx_driver define two low-level functions _xxx_get_register() and _xxx_set_register() to access the peripheral addressable registers. These functions are in charge to compute the peripheral registers addresses, taking into account the peripheral base address, the register index, and the cluster coordinates:
- External peripherals: All accesses use virtual addresses if the MMU (Memory management Unit) is activated, or physical addresses if it is not. In this case, the physical address is computed as pbase = SEG_XXX_BASE + cluster_io << 32.
- Internal peripherals: All accesses use virtual addresses, and the MMU must be activated. The peripheral virtual base address is computed as vbase = SEG_XXX_BASE + cluster_xy * PERI_CLUSTER_INCREMENT.
The X_IO, Y_IO, and PERI_CLUSTER_INCREMENT variables must be defined in the hard_config.h" file.
Some peripherals (TTY, TIM, NIC, CMA, HBA) are multi-channels peripherals: Each channel provide an independent set of addressable registers, and each channel can be seen as an independent hardware resource. For these multi-channels peripherals, the GIET_VM allows an user application to require a private peripheral channel, that will not be used by any other task. The corresponding channel index is stored in the task context.
BDV (Block Device controller)