DWT хитрый счётчик притаившийся в ядре
В архитектуре ядра ARMv7 есть один очень скрытый, но очень полезный счётчик.
При этом необычный, такого вы ещё не видели, 32-битный счётчик машинных циклов fclk.
Аналогичный счётчик встречается в отладках на компьютере. По всей видимости, аппаратно он используется для работы JTAG.
Ну и прелесть этого счётчика заключается в том, что он доступен нам программно.
Зачем он нужен? В период знакомства с камушком вам скорей всего захочется узнать, сколько циклов тратится
на выполнение команды или фрагментов кода. И тут вам пригодится счётчик машинных циклов, который жёстко привязан к
тактированию ядра (fclk). Я узнал много нового, экспериментируя с ним!
@ Включаем системный бит TRCENA
MOV32 R0, DEMCR
LDR R1, [R0]
ORR R1, (1 << 24)
STR R1, [R0]
@ Разрешаем DWT
MOV32 R0, DWT_CTRL
LDR R1, [R0]
ORR R1, 1
STR R1, [R0]
Всё, поехал! Он так и крутится в безконечном цикле, переполняясь и снова возвращаясь в ноль...
Считывается значение счётчика очень просто:
MOV32 R0, DWT_CYCCNT
LDR R1, [R0]