Estoy escribiendo mapas de registro en C para una placa de microcontrolador basada en TI ARM. Aquí está el enlace a la hoja de datos .
Estoy usando las siguientes pautas sobre cómo se deben escribir los mapas de Registro en C: Registrar mapas . Estas pautas son similares a las ARM CMSIS (Cortex Microcontroller Software Interface Standard) para escribir el código C
Estoy enfrentando un problema al escribir los mapas del Registro de control del sistema (consulte la sección 5.5, página 237 en adelante en la hoja de datos) usando C struct. Todos los registros son de 32 bits de tamaño
- La dirección base es 0x400F.E000.
- Registro 1: Identificación de dispositivo 0 (DID0), desplazamiento 0x000
- Registro 2: Identificación del dispositivo 1 (DID1), desplazamiento 0x004
- Registro 3: Control de restablecimiento de salida de tensión (PBORCTL), desplazamiento 0x030
- Registro 4: estado de interrupción sin formato (RIS), desplazamiento 0x050
- etc ...
Si ahora escribo una estructura como esta:
typedef struct
{
uint32_t DID0; // offset 0x000. distance: 0
uint32_t DID1; // offset 0x004. distance: 4
uint32_t PBORCTL; // **HOW to place this at offset 0x030 ?**
uint32_t RIS; // **HOW to place this at offset 0x050 ?**
// ...and so on
}PER_REG_MAP_T;
#define PERIPH_BASE ((uint32_t)0x400FE000)
#define MY_PERIPH_A ((PER_REG_MAP_T*)PERIPH_BASE)
void Reset(PER_REG_MAP_T* PERIPH_A)
{
PERIPH_A->DID0 = 0;
PERIPH_A->DID1= 0;
PERIPH_A->PBORCTL= 1;
PERIPH_A->RIS= 0;
// .. and so on
}
El problema principal al que me enfrento es cómo colocar PBORCTL y RIS dentro de la estructura, ya que están en el desplazamiento 0x030 y 0x050 con respecto a la dirección base de la estructura. No he hecho demasiada programación en C a nivel de bits antes, por lo que esta pregunta podría ser demasiado simple, pero no sé cómo hacerlo.