Bläddra i källkod

EventResponder, MillisTimer, yield

main
PaulStoffregen 5 år sedan
förälder
incheckning
c4ab57c003
4 ändrade filer med 62 tillägg och 4 borttagningar
  1. +2
    -2
      teensy4/EventResponder.cpp
  2. +5
    -2
      teensy4/delay.c
  3. +2
    -0
      teensy4/startup.c
  4. +53
    -0
      teensy4/yield.cpp

+ 2
- 2
teensy4/EventResponder.cpp Visa fil

@@ -82,7 +82,7 @@ void EventResponder::triggerEventNotImmediate()
enableInterrupts(irq);
}

void pendablesrvreq_isr(void)
extern "C" void pendablesrvreq_isr(void)
{
EventResponder::runFromInterrupt();
}
@@ -336,7 +336,7 @@ void MillisTimer::runFromTimer()

// TODO: this doesn't work for IMXRT - no longer using predefined names
extern "C" volatile uint32_t systick_millis_count;
void systick_isr(void)
extern "C" void systick_isr(void)
{
systick_millis_count++;
MillisTimer::runFromTimer();

+ 5
- 2
teensy4/delay.c Visa fil

@@ -9,6 +9,8 @@ volatile uint32_t systick_millis_count = 0;
// hide an undocumented divide-by-240 circuit in the hardware?
#define SYSTICK_EXT_FREQ 100000

#if 0
// moved to EventResponder.cpp
void systick_isr(void)
{
systick_millis_count++;
@@ -17,6 +19,7 @@ void systick_isr(void)
//delayMicroseconds(1);
//digitalWriteFast(12, LOW);
}
#endif

#if 0
void millis_init(void)
@@ -37,10 +40,10 @@ void millis_init(void)
}
#endif

void yield(void)
/*void yield(void)
{

}
}*/

void delay(uint32_t msec)
{

+ 2
- 0
teensy4/startup.c Visa fil

@@ -22,6 +22,7 @@ static void memory_copy(uint32_t *dest, const uint32_t *src, uint32_t *dest_end)
static void memory_clear(uint32_t *dest, uint32_t *dest_end);
static void configure_systick(void);
extern void systick_isr(void);
extern void pendablesrvreq_isr(void);
void configure_cache(void);
void unused_interrupt_vector(void);
void usb_pll_start();
@@ -119,6 +120,7 @@ void ResetHandler(void)

static void configure_systick(void)
{
_VectorsRam[14] = pendablesrvreq_isr;
_VectorsRam[15] = systick_isr;
SYST_RVR = (SYSTICK_EXT_FREQ / 1000) - 1;
SYST_CVR = 0;

+ 53
- 0
teensy4/yield.cpp Visa fil

@@ -0,0 +1,53 @@
/* Teensyduino Core Library
* http://www.pjrc.com/teensy/
* Copyright (c) 2017 PJRC.COM, LLC.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* 1. The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* 2. If the Software is incorporated into a build system that allows
* selection among a list of target devices, then similar target
* devices manufactured by PJRC.COM must be included in the list of
* target devices and selectable in the same manner.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/

#include <Arduino.h>
#include "EventResponder.h"

void yield(void) __attribute__ ((weak));
void yield(void)
{
static uint8_t running=0;

if (running) return; // TODO: does this need to be atomic?
running = 1;
#if 0
// TODO: all serialEvent to use EventResponder
if (Serial.available()) serialEvent();
if (Serial1.available()) serialEvent1();
if (Serial2.available()) serialEvent2();
if (Serial3.available()) serialEvent3();
if (Serial4.available()) serialEvent4();
if (Serial5.available()) serialEvent5();
if (Serial6.available()) serialEvent6();
#endif
running = 0;
EventResponder::runFromYield();
};

Laddar…
Avbryt
Spara