123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- #include "OSCTiming.h"
- #include "OSCBoards.h"
- #if defined(__MK20DX128__) || defined(__MK20DX256__) || defined(__MKL26Z64__)
- extern volatile uint32_t systick_millis_count;
- static uint32_t savedcount, savedcurrent;
- static void latchOscTime()
- {
-
- uint32_t istatus;
- uint32_t count, current;
-
- __disable_irq();
- current = SYST_CVR;
- count = systick_millis_count;
- istatus = SCB_ICSR;
- __enable_irq();
-
-
-
- if ((istatus & SCB_ICSR_PENDSTSET) && current > 50) count++;
- current = ((F_CPU / 1000) - 1) - current;
- savedcount=count; savedcurrent=current;
- }
- static osctime_t computeOscTime()
- {
-
-
- osctime_t t;
-
- t.seconds = (( uint64_t)(savedcount/1000)) ;
-
-
- t.fractionofseconds = ( (uint64_t)(4294967295) * ( (savedcount * 1000 + (uint64_t)savedcurrent / (F_CPU / 1000000UL)) % 1000000) ) /1000000;
- return t;
- }
- osctime_t oscTime()
- {
- latchOscTime();
- return computeOscTime();
- }
- #elif defined(CORE_TEENSY)
- extern volatile uint32_t timer0_millis_count;
- static uint32_t savedcount, savedmicros;
- static void latchOscTime()
- {
- noInterrupts();
- savedcount = timer0_millis_count;
- savedmicros = micros();
- interrupts();
- }
- static osctime_t computeOscTime()
- {
- osctime_t t;
- savedmicros %= 1000000;
- t.fractionofseconds= (67108864ULL * savedmicros) / 15625 ;
- t.seconds = savedcount/1000;
- return t;
- #ifdef ddfgsdfgsdfgsdfg
- return ((savedcount/1000)<<32) + ( (4294967295ULL) * ( (savedcount * 1000ULL + savedmicros) % 1000000ULL) ) /1000000ULL
-
- ;
- #endif
-
- }
- osctime_t oscTime()
- {
- latchOscTime();
- return computeOscTime();
- }
- #elif defined(AVR) || defined(__AVR_ATmega32U4__) || defined(__SAM3X8E__)
- static uint32_t savedcount, savedmicros;
- static void latchOscTime()
- {
- noInterrupts();
-
- savedcount = millis();
- savedmicros = micros();
- interrupts();
-
- }
- osctime_t computeOscTime()
- {
- osctime_t t;
- savedmicros %= 1000000UL;
-
- t.fractionofseconds= (67108864UL * savedmicros)/ 15625ULL ;
- t.seconds = savedcount/1000;
- return t;
-
-
- }
- osctime_t oscTime()
- {
- latchOscTime();
- return computeOscTime();
- }
- #else
- static void latchOscTime()
- {
- }
- osctime_t oscTime()
- {
- osctime_t t;
- t.fractionofseconds = 1;
- return t;
- }
- #endif
- int adcRead(int pin, osctime_t *t)
- {
- latchOscTime();
-
- int v =analogRead(pin);
- *t = oscTime();
- return v;
- }
- #ifdef BOARD_HAS_CAPACITANCE_SENSING
- int capacitanceRead(int pin, osctime_t *t)
- {
- latchOscTime();
- int v = touchRead(pin);
-
- *t = oscTime();
- return v;
- }
- #endif
- int inputRead(int pin, osctime_t *t)
- {
-
- int v =digitalRead(pin);
- *t = oscTime();
-
- return v;
- }
|