Multi-Rate Timer (MRT)

#include "mbed.h"

DigitalOut led1(LED1);

extern "C" void MRT_IRQHandler()
{
    if (LPC_MRT->Channel[3].STAT & 1) {
        led1 = !led1;
        LPC_MRT->Channel[3].STAT |= 1; // clear interrupt
    }
}

int main()
{
    LPC_SYSCON->SYSAHBCLKCTRL |= 1<<10; // enable MRT
    LPC_SYSCON->PRESETCTRL |= 1<<7; // reset MRT
    LPC_MRT->Channel[3].INTVAL = (SystemCoreClock/5)|0x80000000; // 5Hz and LOAD
    LPC_MRT->Channel[3].CTRL |= 1; // enable interrupt
    NVIC_EnableIRQ(MRT_IRQn);

    while(1) {
        __wfi();
    }
}