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]