#include "../include/io.h" #include "../include/spi.h" #include "../include/multicore.h" #include "kernel.h" void wait_msec(unsigned int n) { register unsigned long f, t, r; // Get the current counter frequency asm volatile ("mrs %0, cntfrq_el0" : "=r"(f)); // Read the current counter asm volatile ("mrs %0, cntpct_el0" : "=r"(t)); // Calculate expire value for counter t+=((f/1000)*n)/1000; do{asm volatile ("mrs %0, cntpct_el0" : "=r"(r));}while(rcounter_lo; timer1_val += timer1_int; REGS_TIMER->compare[1] = timer1_val; timer3_val = REGS_TIMER->counter_lo; timer3_val += timer3_int; REGS_TIMER->compare[3] = timer3_val; } void handle_timer_1() { timer1_val += timer1_int; REGS_TIMER->compare[1] = timer1_val; REGS_TIMER->control_status |= SYS_TIMER_IRQ_1; unsigned int progval = timer1_val / timer1_int; if (progval <= 100) { //drawProgress(2, progval); } else { uart_writeText("Timer 1 done.\n"); } } void handle_timer_3() { timer3_val += timer3_int; REGS_TIMER->compare[3] = timer3_val; REGS_TIMER->control_status |= SYS_TIMER_IRQ_3; unsigned int progval = timer3_val / timer3_int; if (progval <= 100); // drawProgress(3, progval); } unsigned long HAL_GetTick(void) { unsigned int hi = REGS_TIMER->counter_hi; unsigned int lo = REGS_TIMER->counter_lo; //double check hi value didn't change after setting it... if (hi != REGS_TIMER->counter_hi) { hi = REGS_TIMER->counter_hi; lo = REGS_TIMER->counter_lo; } return ((unsigned long)hi << 32) | lo; } void HAL_Delay(unsigned int ms) { unsigned long start = HAL_GetTick(); while(HAL_GetTick() < start + (ms * 1000)); } void main(void) { uart_init(); uart_writeText("uart initialised.\n"); //uart_writeText("Kick it off on core 1\n"); //start_core1(core1_main); // Kick off the timers irq_init_vectors(); enable_interrupt_controller(); irq_barrier(); irq_enable(); timer_init(); uart_writeText("Kick it off on core 3\n"); start_core3(core3_main); //uart_writeText("Kick it off on core 0\n"); //core0_main(); // Disable IRQs and loop endlessly irq_disable(); disable_interrupt_controller(); while(1); }