Configuring the System Control Space registers

The System Control Space (SCS) registers are located at 0xE000E000. A structure can be used 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-loading description file, using a similar method to the vector table.

The following example shows code for both the Cortex-M1 and Cortex-M3 processors:

Example 54. 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;

/* * System Control Space (SCS) Registers * in separate section so it can be placed correctly using 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.

Copyright © 2010-2012 ARM. All rights reserved.ARM DUI 0471G
Non-ConfidentialID021412