Du kan inte välja fler än 25 ämnen
Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.
12345678910111213141516171819202122232425262728293031323334353637 |
-
- #include "delay.h"
- #include "mk20dx128.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();
- }
- }
|