#include "mbed.h"

volatile unsigned int ticks = 0;

DigitalOut led(LED_BLUE);

extern "C" void lptmr_isr(void) {
    // write 1 to TCF to clear the LPT timer compare flag
    LPTMR0->CSR |= LPTMR_CSR_TCF_MASK;
    
    ticks++;
}

int main() {
    /* Clock the timer */
    SIM->SCGC5 |= SIM_SCGC5_LPTMR_MASK;
    
    /* Reset */
    LPTMR0->CSR = 0;
    
    /* Compare value */
    LPTMR0->CMR = 1000;
    
    /* Enable interrupt */
    LPTMR0->CSR |= LPTMR_CSR_TIE_MASK;
    
    /* Set interrupt handler */
    NVIC_SetVector(LPTimer_IRQn, (uint32_t)lptmr_isr);
    NVIC_EnableIRQ(LPTimer_IRQn);
    
    /* select LPO for RTC and LPTMR */
    LPTMR0->PSR = LPTMR_PSR_PCS(3);       // ERCLK32K -> 8MHz
    LPTMR0->PSR |= LPTMR_PSR_PRESCALE(2); // divide by 8
    
    /* Start the timer */
    LPTMR0->CSR |= LPTMR_CSR_TEN_MASK;
    
    led = 0;
    while (true) {
        wait(1);
        led = 1;
        printf("%d\n", ticks);
        
        wait(1);
        led = 0;
        printf("%d\n", ticks);
    }
}
