Mercurial > louis > kiibohd-controller
view Lib/delay.c @ 118:b61ca96b7c24
File and macro modifications for supporting Teensy 3.1
author | Jacob Alexander <haata@kiibohd.com> |
---|---|
date | Sun, 02 Feb 2014 17:33:23 -0800 |
parents | 23600aaa5e15 |
children | 6ac92b8614c0 |
line wrap: on
line source
#include "delay.h" #include "mk20dx.h" // the systick interrupt is supposed to increment this at 1 kHz rate volatile uint32_t systick_millis_count = 0; void yield(void) {}; uint32_t micros(void) { uint32_t count, current, istatus; __disable_irq(); current = SYST_CVR; count = systick_millis_count; istatus = SCB_ICSR; // bit 26 indicates if systick exception pending __enable_irq(); if ((istatus & SCB_ICSR_PENDSTSET) && current > ((F_CPU / 1000) - 50)) count++; current = ((F_CPU / 1000) - 1) - current; return count * 1000 + current / (F_CPU / 1000000); } void delay(uint32_t ms) { uint32_t start = micros(); while (1) { if ((micros() - start) >= 1000) { ms--; if (ms == 0) break; start += 1000; } yield(); } }