Revision 1:e60d949ec09a, committed 2011-02-11
- Comitter:
- AjK
- Date:
- Fri Feb 11 11:35:49 2011 +0000
- Parent:
- 0:5c7fd96cf29a
- Commit message:
- 0.2
Changed in this revision
diff -r 5c7fd96cf29a -r e60d949ec09a Ticker0Sys.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Ticker0Sys.cpp Fri Feb 11 11:35:49 2011 +0000
@@ -0,0 +1,79 @@
+/*
+ Copyright (c) 2011 Andy Kirkham
+
+ 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:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ 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.
+*/
+
+// Mimic Mbed's Ticker class but using TIMER1
+// (note, only goes to milliseconds level not microseconds!)
+
+#include "TickersSys.h"
+
+namespace AjK {
+
+// Create a Ticker0 controller.
+Ticker0Sys _ticker0Sys;
+
+// Nice and simple ISR, just call the class standard handler.
+extern "C" void TIMER0_IRQHandler(void) __irq
+{
+ _ticker0Sys.isr();
+}
+
+Ticker0Sys::Ticker0Sys(void)
+{
+ LPC_SC->PCONP |= (1UL << 1); // TIM0 On
+ LPC_SC->PCLKSEL0 |= (3UL << 2); // CCLK/8 = 12MHz
+ LPC_TIM0->PR = 11; // TC clocks at 1MHz.
+ LPC_TIM0->MR0 = 1000; // Match at 1kHz.
+ LPC_TIM0->MCR |= 1; // Generate an interrupt.
+ LPC_TIM0->TCR = 1; // Enable Timer1 to count.
+ NVIC_EnableIRQ(TIMER0_IRQn);
+}
+
+void
+Ticker0Sys::addTicker(Ticker0 *t)
+{
+ tickers.push_back(t);
+}
+
+void
+Ticker0Sys::delTicker(Ticker0 *t)
+{
+ for (list<Ticker0 *>::iterator itor = tickers.begin(); itor != tickers.end(); ++itor) {
+ if ((*itor) == t) {
+ itor = tickers.erase(itor);
+ return;
+ }
+ }
+}
+
+void
+Ticker0Sys::isr(void)
+{
+ LPC_TIM0->IR = 1;
+ LPC_TIM0->MR0 += 1000;
+ if (tickers.empty()) return;
+
+ for (list<Ticker0 *>::iterator itor = tickers.begin(); itor != tickers.end(); ++itor) {
+ (*itor)->tick();
+ }
+
+}
+}; // namespace AjK ends.
diff -r 5c7fd96cf29a -r e60d949ec09a Ticker1Sys.cpp
--- a/Ticker1Sys.cpp Fri Feb 11 10:42:52 2011 +0000
+++ b/Ticker1Sys.cpp Fri Feb 11 11:35:49 2011 +0000
@@ -48,15 +48,15 @@
}
void
-Ticker1Sys::addTicker(TickerA *t)
+Ticker1Sys::addTicker(Ticker1 *t)
{
tickers.push_back(t);
}
void
-Ticker1Sys::delTicker(TickerA *t)
+Ticker1Sys::delTicker(Ticker1 *t)
{
- for (list<TickerA *>::iterator itor = tickers.begin(); itor != tickers.end(); ++itor) {
+ for (list<Ticker1 *>::iterator itor = tickers.begin(); itor != tickers.end(); ++itor) {
if ((*itor) == t) {
itor = tickers.erase(itor);
return;
@@ -71,7 +71,7 @@
LPC_TIM1->MR0 += 1000;
if (tickers.empty()) return;
- for (list<TickerA *>::iterator itor = tickers.begin(); itor != tickers.end(); ++itor) {
+ for (list<Ticker1 *>::iterator itor = tickers.begin(); itor != tickers.end(); ++itor) {
(*itor)->tick();
}
diff -r 5c7fd96cf29a -r e60d949ec09a Ticker2Sys.cpp
--- a/Ticker2Sys.cpp Fri Feb 11 10:42:52 2011 +0000
+++ b/Ticker2Sys.cpp Fri Feb 11 11:35:49 2011 +0000
@@ -48,15 +48,15 @@
}
void
-Ticker2Sys::addTicker(TickerB *t)
+Ticker2Sys::addTicker(Ticker2 *t)
{
tickers.push_back(t);
}
void
-Ticker2Sys::delTicker(TickerB *t)
+Ticker2Sys::delTicker(Ticker2 *t)
{
- for (list<TickerB *>::iterator itor = tickers.begin(); itor != tickers.end(); ++itor) {
+ for (list<Ticker2 *>::iterator itor = tickers.begin(); itor != tickers.end(); ++itor) {
if ((*itor) == t) {
itor = tickers.erase(itor);
return;
@@ -71,7 +71,7 @@
LPC_TIM2->MR0 += 1000;
if (tickers.empty()) return;
- for (list<TickerB *>::iterator itor = tickers.begin(); itor != tickers.end(); ++itor) {
+ for (list<Ticker2 *>::iterator itor = tickers.begin(); itor != tickers.end(); ++itor) {
(*itor)->tick();
}
diff -r 5c7fd96cf29a -r e60d949ec09a TickerRSys.cpp
--- a/TickerRSys.cpp Fri Feb 11 10:42:52 2011 +0000
+++ b/TickerRSys.cpp Fri Feb 11 11:35:49 2011 +0000
@@ -52,15 +52,15 @@
}
void
-TickerRSys::addTicker(TickerC *t)
+TickerRSys::addTicker(Ticker4 *t)
{
tickers.push_back(t);
}
void
-TickerRSys::delTicker(TickerC *t)
+TickerRSys::delTicker(Ticker4 *t)
{
- for (list<TickerC *>::iterator itor = tickers.begin(); itor != tickers.end(); ++itor) {
+ for (list<Ticker4 *>::iterator itor = tickers.begin(); itor != tickers.end(); ++itor) {
if ((*itor) == t) {
itor = tickers.erase(itor);
return;
@@ -75,7 +75,7 @@
if (tickers.empty()) return;
- for (list<TickerC *>::iterator itor = tickers.begin(); itor != tickers.end(); ++itor) {
+ for (list<Ticker4 *>::iterator itor = tickers.begin(); itor != tickers.end(); ++itor) {
(*itor)->tick();
}
diff -r 5c7fd96cf29a -r e60d949ec09a Tickers.cpp
--- a/Tickers.cpp Fri Feb 11 10:42:52 2011 +0000
+++ b/Tickers.cpp Fri Feb 11 11:35:49 2011 +0000
@@ -22,17 +22,37 @@
#include "Tickers.h"
-TickerA::TickerA() {
+Ticker0::Ticker0() {
+ counter = 0;
+ _ticker0Sys.addTicker(this);
+}
+
+Ticker0::~Ticker0() {
+ _ticker0Sys.delTicker(this);
+}
+
+void
+Ticker0::tick(void) {
+ if (counter) {
+ counter--;
+ if (counter == 0) {
+ counter = reload;
+ callback.call();
+ }
+ }
+}
+
+Ticker1::Ticker1() {
counter = 0;
_ticker1Sys.addTicker(this);
}
-TickerA::~TickerA() {
+Ticker1::~Ticker1() {
_ticker1Sys.delTicker(this);
}
void
-TickerA::tick(void) {
+Ticker1::tick(void) {
if (counter) {
counter--;
if (counter == 0) {
@@ -42,17 +62,17 @@
}
}
-TickerB::TickerB() {
+Ticker2::Ticker2() {
counter = 0;
_ticker2Sys.addTicker(this);
}
-TickerB::~TickerB() {
+Ticker2::~Ticker2() {
_ticker2Sys.delTicker(this);
}
void
-TickerB::tick(void) {
+Ticker2::tick(void) {
if (counter) {
counter--;
if (counter == 0) {
@@ -62,17 +82,17 @@
}
}
-TickerC::TickerC() {
+Ticker4::Ticker4() {
counter = 0;
_tickerRSys.addTicker(this);
}
-TickerC::~TickerC() {
+Ticker4::~Ticker4() {
_tickerRSys.delTicker(this);
}
void
-TickerC::tick(void) {
+Ticker4::tick(void) {
if (counter) {
counter--;
if (counter == 0) {
@@ -81,4 +101,3 @@
}
}
}
-
diff -r 5c7fd96cf29a -r e60d949ec09a Tickers.h
--- a/Tickers.h Fri Feb 11 10:42:52 2011 +0000
+++ b/Tickers.h Fri Feb 11 11:35:49 2011 +0000
@@ -32,17 +32,49 @@
// Mimic Mbed's Ticker class but using TIMER1
// (note, only goes to milliseconds level not microseconds!)
-class Ticker1Sys;
-extern Ticker1Sys _ticker1Sys;
+class Ticker0Sys;
+extern Ticker0Sys _ticker0Sys;
-class TickerA {
+class Ticker0 {
protected:
FunctionPointer callback;
uint32_t counter;
uint32_t reload;
public:
- TickerA();
- ~TickerA();
+ Ticker0();
+ ~Ticker0();
+ void tick(void);
+
+ void detach(void) {
+ callback.attach();
+ }
+ void attach(void (*fptr)(void), double d) {
+ counter = reload = (uint32_t)( d * 1000.0 );
+ callback.attach(fptr);
+ }
+ template<typename T>
+ void attach(T* tptr, void (T::*mptr)(void), double d) {
+ if((mptr != NULL) && (tptr != NULL)) {
+ counter = reload = (uint32_t)( d * 1000.0 );
+ callback.attach(tptr, mptr);
+ }
+ }
+};
+
+// Mimic Mbed's Ticker class but using TIMER1
+// (note, only goes to milliseconds level not microseconds!)
+
+class Ticker1Sys;
+extern Ticker1Sys _ticker1Sys;
+
+class Ticker1 {
+protected:
+ FunctionPointer callback;
+ uint32_t counter;
+ uint32_t reload;
+public:
+ Ticker1();
+ ~Ticker1();
void tick(void);
void detach(void) {
@@ -67,14 +99,14 @@
class Ticker2Sys;
extern Ticker2Sys _ticker2Sys;
-class TickerB {
+class Ticker2 {
protected:
FunctionPointer callback;
uint32_t counter;
uint32_t reload;
public:
- TickerB();
- ~TickerB();
+ Ticker2();
+ ~Ticker2();
void tick(void);
void detach(void) {
@@ -99,14 +131,14 @@
class TickerRSys;
extern TickerRSys _tickerRSys;
-class TickerC {
+class Ticker4 {
protected:
FunctionPointer callback;
uint32_t counter;
uint32_t reload;
public:
- TickerC();
- ~TickerC();
+ Ticker4();
+ ~Ticker4();
void tick(void);
void detach(void) {
@@ -126,11 +158,11 @@
};
// Mimic Mbed's Ticker class but using actual Ticker by inheriting.
-// This just basically "renames" Ticker to TickerD for consistancy.
+// This just basically "renames" Ticker to TickerE for consistancy.
-class TickerD : public Ticker {
+class Ticker3 : public Ticker {
public:
- TickerD() : Ticker() {};
+ Ticker3() : Ticker() {};
};
}; // namespace AjK ends.
diff -r 5c7fd96cf29a -r e60d949ec09a TickersSys.h
--- a/TickersSys.h Fri Feb 11 10:42:52 2011 +0000
+++ b/TickersSys.h Fri Feb 11 11:35:49 2011 +0000
@@ -29,49 +29,64 @@
namespace AjK {
-class TickerA;
+class Ticker0;
+
+// Ticker0 controller.
+class Ticker0Sys {
+protected:
+ list<Ticker0 *> tickers;
+
+public:
+ void init(void);
+ Ticker0Sys();
+ void isr(void);
+ void addTicker(Ticker0 *t);
+ void delTicker(Ticker0 *t);
+};
+
+class Ticker1;
// Ticker1 controller.
class Ticker1Sys {
protected:
- list<TickerA *> tickers;
+ list<Ticker1 *> tickers;
public:
void init(void);
Ticker1Sys();
void isr(void);
- void addTicker(TickerA *t);
- void delTicker(TickerA *t);
+ void addTicker(Ticker1 *t);
+ void delTicker(Ticker1 *t);
};
-class TickerB;
+class Ticker2;
// Ticker2 controller.
class Ticker2Sys {
protected:
- list<TickerB *> tickers;
+ list<Ticker2 *> tickers;
public:
void init(void);
Ticker2Sys();
void isr(void);
- void addTicker(TickerB *t);
- void delTicker(TickerB *t);
+ void addTicker(Ticker2 *t);
+ void delTicker(Ticker2 *t);
};
-class TickerC;
+class Ticker4;
// TickerR controller.
class TickerRSys {
protected:
- list<TickerC *> tickers;
+ list<Ticker4 *> tickers;
public:
void init(void);
TickerRSys();
void isr(void);
- void addTicker(TickerC *t);
- void delTicker(TickerC *t);
+ void addTicker(Ticker4 *t);
+ void delTicker(Ticker4 *t);
};
}; // namespace AjK ends.