#include "systick.h" systick_t *get_systick() { return (systick_t *) 0xE000E010; } // This function is to Initialize SysTick registers void init_systick() { // Use the SysTick global structure pointer to do the following in this // exact order with separate lines for each step: // // Disable SysTick by clearing the CTRL (CSR) register. // Set the LOAD (RVR) to 8 million to give us a 100 milliseconds timer. // Set the clock source bit in the CTRL (CSR) to the internal clock. // Set the enable bit in the CTRL (CSR) to start the timer. systick_t *s = get_systick(); s->CSR &= ~1; s->CSR |= 1<<2; s->CSR |= 1<<1; // enable interrupt s->RVR = 78124; // 100 ms s->CSR |= 1; } // This fuction is to create delay using SysTick timer counter void delay_systick() { // Using the SysTick global structure pointer do the following: // Create a for loop that loops 10 times // Inside that for loop check the COUNTFLAG bit in the CTRL (CSR) // register in a loop. When that bit is set exit this inner loop // to do another pass in the outer loop of 10. systick_t *s = get_systick(); for (int i = 0; i < 10; i++) { while (~s->CSR & (1<<16)) ; } } int check_systick() { static int i = 0; systick_t *s = get_systick(); if (!(~s->CSR & (1<<16))) { i++; } if (i >= 10) { i = 0; return 1; } else { return 0; } }