SysTick бесплатный таймер в ядре ARM

Таймер SysTick является бесплатным приложением в каждом микроконтроллере на архитектуре ARMv7. А это значит, что данный таймер есть во всех существующих ARM. И приведённый ниже код является абсолютно универсальным.

SysTick - простой таймер, но прерывания от него всегда включены. Их нельзя запретить. А это уже не шутки!
Скорей всего, таймер задумывался для переключения контекста в многозадачных системах.
Давайте настроим частоту прерывания от SysTick на 100 герц.
Предполагается, что ядро тактируется частотой 168 MHz.

    @ Частота 100 гц
    @ Делитель = 168.000.000 / 8 / 210.000
    MOV32 R0, SYSTICK_CVR
    CLR R1
    STR R1, [R0], -4
    MOV32 R1, 210000-1 @ Уберите один нолик и вы получите 1000 гц
    STR R1, [R0], -4
    MOV32 R1, SYSTICK_CSR_ENABLE + SYSTICK_CSR_TICKINT
    STR R1, [R0]

    @ Установим для прерывания от SysTick какой-нибудь приоритет
    @ Например самый низкий, 15
    MOV32 R0, NVIC_IPR0 + 6
    MOV R1, 15<<4    
    STRB R1, [R0]


Вот и всё. Считает. Прерывается. Главное вставить в таблицу прерываний адрес обработчика. А сам обработчик выглядит просто, особенно если он пустой. Например так:

SysTickInt:
    PUSH {LR}

    ........ код
    ........
    ........

    @ Выход из прерывания
    POP {PC}


Говорим спасибо переводчику доки
а если недоступно, есть локальная копия