my implementation of mbed-like classes using the LPC1768 register access.

Dependents:   registers-example RedWireBridge

This is just to satisfy my curiosity on how the mbed libraries work. I put it here just in case others are too. Every time I learn how another internal register works, I'll keep it here to save myself from future coding headaches.

working

  • DigitalIn
  • DigitalOut
  • wait()

mostly working

  • Serial
  • Timer
  • Ticker
  • Timeout

Serial doesn't have all the methods that mbed had, but it works for me. (only UART0, so only over USB to the pc for now) Timer has the same limitations of mbed for default resolution (30 min limit), and if you start at the end of resolution and stop after it rolls back to 0, it doesn't take that into account. But I added the option to change resolution, so I can have longer timers.

For Ticker, I used a 100 microsecond timer instead of a 1 microsecond Timer, so the smallest interval in between function calls is 100 microseconds. (10KHz) However, this means that the maximum interval in between function calls is 59 hours. (untested)

The Timeout class, simply uses a Ticker, but then marks it as nonactive after the first function call. Automatically calls the detach() function when attaching it again, so no don't need to worry about it.

Committer:
elevatorguy
Date:
Thu Jan 03 05:25:18 2013 +0000
Revision:
2:276fb0fe230c
Parent:
0:d2d9baa1a6d8
fix

Who changed what in which revision?

UserRevisionLine numberNew contents of line
elevatorguy 0:d2d9baa1a6d8 1 #ifndef __TIMER_H_
elevatorguy 0:d2d9baa1a6d8 2 #define __TIMER_H_
elevatorguy 0:d2d9baa1a6d8 3
elevatorguy 0:d2d9baa1a6d8 4 #include "LPC17xx.h"
elevatorguy 0:d2d9baa1a6d8 5
elevatorguy 0:d2d9baa1a6d8 6 class Timer
elevatorguy 0:d2d9baa1a6d8 7 {
elevatorguy 0:d2d9baa1a6d8 8 void initTimer1(int); // the constructor initializes the hardware timer, if it wasn't already initialized
elevatorguy 0:d2d9baa1a6d8 9 static bool timer1initialized; //stores whether the timer has been initialized
elevatorguy 0:d2d9baa1a6d8 10 static int resolution;
elevatorguy 0:d2d9baa1a6d8 11 int starttime;
elevatorguy 0:d2d9baa1a6d8 12 int stoptime;
elevatorguy 0:d2d9baa1a6d8 13 bool running;
elevatorguy 0:d2d9baa1a6d8 14 public:
elevatorguy 0:d2d9baa1a6d8 15 Timer(); //default of microsecond resolution
elevatorguy 0:d2d9baa1a6d8 16 Timer(int); //custom resolution.. eg. 1000 = millisecond resolution
elevatorguy 0:d2d9baa1a6d8 17 void start();
elevatorguy 0:d2d9baa1a6d8 18 void stop();
elevatorguy 0:d2d9baa1a6d8 19 void reset();
elevatorguy 0:d2d9baa1a6d8 20 float read();
elevatorguy 0:d2d9baa1a6d8 21 operator float(); //read shortcut
elevatorguy 0:d2d9baa1a6d8 22 };
elevatorguy 0:d2d9baa1a6d8 23
elevatorguy 0:d2d9baa1a6d8 24 #endif