#ifndef _HAL_ARM_H_ #define _HAL_ARM_H_ #include "epenguin_conf.h" #if !(EP_UARCH == __UARCH_ARM__) #error This shouldn't be included unless arm is the uarch of choice! #endif #if !(defined(__ASSEMBLY__)) #include #ifndef __cplusplus typedef volatile const uint32_t RoReg; // Read only 32-bit register (volatile const unsigned int) typedef volatile const uint16_t RoReg16; // Read only 16-bit register (volatile const unsigned int) typedef volatile const uint8_t RoReg8; // Read only 8-bit register (volatile const unsigned int) #else typedef volatile uint32_t RoReg; // Read only 32-bit register (volatile const unsigned int) typedef volatile uint16_t RoReg16; // Read only 16-bit register (volatile const unsigned int) typedef volatile uint8_t RoReg8; // Read only 8-bit register (volatile const unsigned int) #endif typedef volatile uint32_t WoReg; // Write only 32-bit register (volatile unsigned int) typedef volatile uint16_t WoReg16; // Write only 16-bit register (volatile unsigned int) typedef volatile uint16_t WoReg8; // Write only 8-bit register (volatile unsigned int) typedef volatile uint32_t RwReg; // Write only 32-bit register (volatile unsigned int) typedef volatile uint16_t RwReg16; // Write only 16-bit register (volatile unsigned int) typedef volatile uint8_t RwReg8; // Write only 8-bit register (volatile unsigned int) #define CAST(type, value) ((type*)(value)) #define REG_ACCESS(type, address) (*(type*)(address)) #else #define CAST(type, value) (value) #define REG_ACCESS(type, address) (address) #endif #endif