55 lines
1.7 KiB
C++
Executable File
55 lines
1.7 KiB
C++
Executable File
/*****************************************************************************
|
|
* *
|
|
* P I T *
|
|
* *
|
|
*---------------------------------------------------------------------------*
|
|
* Beschreibung: Programmable Interval Timer. *
|
|
* *
|
|
* Autor: Michael Schoettner, 23.8.2016 *
|
|
*****************************************************************************/
|
|
|
|
#ifndef PIT_include__
|
|
#define PIT_include__
|
|
|
|
#include "kernel/interrupts/ISR.h"
|
|
#include "kernel/IOport.h"
|
|
#include "user/lib/Array.h"
|
|
|
|
class PIT : public ISR {
|
|
private:
|
|
const static IOport control;
|
|
const static IOport data0;
|
|
|
|
enum { time_base = 838 }; /* ns */
|
|
int timer_interval;
|
|
|
|
const bse::array<char, 4> indicator{'|', '/', '-', '\\'};
|
|
unsigned int indicator_pos = 0;
|
|
unsigned long last_indicator_refresh = 0;
|
|
|
|
public:
|
|
PIT(const PIT& copy) = delete; // Verhindere Kopieren
|
|
|
|
// ~PIT() override = default;
|
|
|
|
// Zeitgeber initialisieren.
|
|
explicit PIT(int us) {
|
|
PIT::interval(us);
|
|
}
|
|
|
|
// Konfiguriertes Zeitintervall auslesen.
|
|
int interval() const { return timer_interval; }
|
|
|
|
// Zeitintervall in Mikrosekunden, nachdem periodisch ein Interrupt
|
|
//erzeugt werden soll.
|
|
static void interval(int us);
|
|
|
|
// Aktivierung der Unterbrechungen fuer den Zeitgeber
|
|
void plugin();
|
|
|
|
// Unterbrechnungsroutine des Zeitgebers.
|
|
void trigger() override;
|
|
};
|
|
|
|
#endif
|