5.34 Configuring the System Control Space registers

The System Control Space (SCS) is an address space that provides registers for system control and configuration.

The System Control Space (SCS) registers are located at 0xE000E000. You can use a structure to represent such a large number of individual registers and related offsets, see the following example. You can then position the structure in the correct memory location using a scatter file, using a similar method to the vector table.
The following example shows code for both the Cortex-M1 and Cortex-M3 processors:

SCS register structure and definition

typedef volatile struct {
    int MasterCtrl;
    int IntCtrlType;
    int zReserved008_00c[2];                   /* Reserved space */
    struct {
        int Ctrl;
        int Reload;
        int Value;
        int Calibration;
    } SysTick;
    int zReserved020_0fc[(0x100-0x20)/4];      /* Reserved space */
    /* Offset 0x0100
     * Additional space allocated to ensure alignment
     */
    struct {
        int Enable[32];
        int Disable[32];
        int Set[32];
        int Clear[32];
        int Active[64];                        /* ARMv7-M only   */
        int Priority[64];
    } NVIC;
    int zReserved0x500_0xcfc[(0xd00-0x500)/4]; /* Reserved space */
    /* Offset 0x0d00 */
    int CPUID;
    int IRQcontrolState;
    int ExceptionTableOffset;
    int AIRC;
    int SysCtrl;                               /* ARMv7-M only   */
    int ConfigCtrl;                            /* ARMv7-M only   */
    int SystemPriority[3];                     /* ARMv7-M only   */
    int zReserved0xd40_0xd90[(0xd90-0xd40)/4]; /* Reserved space */
    /* Offset 0x0d90 */
    struct {
        int Type;                              /* ARMv7-M only   */
        int Ctrl;                              /* ARMv7-M only   */
        int RegionNumber;                      /* ARMv7-M only   */
        int RegionBaseAddr;                    /* ARMv7-M only   */
        int RegionAttrSize;                    /* ARMv7-M only   */
    } MPU;                                     /* ARMv7-M only   */
} SCS_t;

/* Place SCS registers struct in a separate section so it can be located using a scatter file */
#pragma arm section zidata="scs_registers"
SCS_t SCS;
#pragma arm section

Note

The contents of the SCS registers might be different for your implementation. For example, there might be no SysTick registers if the Operating System extension is not implemented.
Non-ConfidentialPDF file icon PDF versionARM DUI0471K
Copyright © 2010-2014 ARM. All rights reserved.