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}
		

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