|
12345678910111213141516171819202122232425262728293031323334 |
- #include "Arduino.h"
- #define TWO_MHZ 2000000
- // delay and micros for 2 MHz cpu speed
- /***************************************************************************************************/
- uint32_t micros_lp(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();
- //systick_current = current;
- //systick_count = count;
- //systick_istatus = istatus & SCB_ICSR_PENDSTSET ? 1 : 0;
- if ((istatus & SCB_ICSR_PENDSTSET) && current > 50) count++;
- current = ((2000000 / 1000) - 1) - current;
- return count * 1000 + current / (TWO_MHZ / 1000000);
- }
- /***************************************************************************************************/
- void delay_lp(uint32_t ms) {
- uint32_t start = micros();
-
- if (ms > 0) {
- while (1) {
- while ((micros() - start) >= 1000) {
- ms--;
- if (ms == 0) return;
- start += 1000;
- }
- yield();
- }
- }
- }
|