implement pcspk delay
This commit is contained in:
@ -56,23 +56,6 @@ void PCSPK::off() {
|
|||||||
ppi.outb((status >> 2) << 2); // Lautsprecher ausschalten
|
ppi.outb((status >> 2) << 2); // Lautsprecher ausschalten
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************
|
|
||||||
* Methode: PCSPK::readCounter *
|
|
||||||
*---------------------------------------------------------------------------*
|
|
||||||
* Beschreibung: Zaehler von PIT Channel 0 auslesen. *
|
|
||||||
* (wird fuer delay benoetigt). *
|
|
||||||
* *
|
|
||||||
* Rückgabewerte: counter *
|
|
||||||
*****************************************************************************/
|
|
||||||
inline unsigned int PCSPK::readCounter() {
|
|
||||||
unsigned char lo, hi;
|
|
||||||
|
|
||||||
control.outb(0x0); // Latch Command
|
|
||||||
lo = data0.inb(); // Lobyte des Counters auslesen
|
|
||||||
hi = data0.inb(); // Hibyte des Counters auslesen
|
|
||||||
return (hi << 8) | lo;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
* Methode: PCSPK::delay *
|
* Methode: PCSPK::delay *
|
||||||
*---------------------------------------------------------------------------*
|
*---------------------------------------------------------------------------*
|
||||||
@ -84,6 +67,11 @@ inline void PCSPK::delay(int time) {
|
|||||||
|
|
||||||
/* Hier muess Code eingefuegt werden */
|
/* Hier muess Code eingefuegt werden */
|
||||||
|
|
||||||
|
unsigned long start_time = systime;
|
||||||
|
|
||||||
|
// systime is incremented in 10ms steps
|
||||||
|
while ((systime - start_time) * 10 < time) {}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|||||||
@ -71,9 +71,6 @@ private:
|
|||||||
// Verzoegerung um X ms (in 1ms Schritten; Min. 1ms)
|
// Verzoegerung um X ms (in 1ms Schritten; Min. 1ms)
|
||||||
inline void delay(int time);
|
inline void delay(int time);
|
||||||
|
|
||||||
// Zaehler von PIT Channel 0 auslesen (wird fuer delay benoetigt)
|
|
||||||
inline unsigned int readCounter();
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// Konstruktor. Initialisieren der Ports.
|
// Konstruktor. Initialisieren der Ports.
|
||||||
PCSPK() : control(0x43), data0(0x40), data2(0x42), ppi(0x61) {}
|
PCSPK() : control(0x43), data0(0x40), data2(0x42), ppi(0x61) {}
|
||||||
|
|||||||
@ -75,6 +75,8 @@ int main() {
|
|||||||
// scheduler.ready(new CoopThreadDemo());
|
// scheduler.ready(new CoopThreadDemo());
|
||||||
// scheduler.ready(new VBEdemo()); // Switch to VESA graphics mode
|
// scheduler.ready(new VBEdemo()); // Switch to VESA graphics mode
|
||||||
|
|
||||||
|
// pcspk.tetris();
|
||||||
|
|
||||||
// Scheduler starten (schedule() erzeugt den Idle-Thread)
|
// Scheduler starten (schedule() erzeugt den Idle-Thread)
|
||||||
scheduler.schedule();
|
scheduler.schedule();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user