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}
Говорим спасибо переводчику доки
а если недоступно, есть локальная копия