Frequency counter with i2c slave.

Dependencies:   mbed

Committer:
rutles
Date:
Thu Jun 12 05:34:52 2014 +0000
Revision:
0:1913ea9baf30
Child:
1:20b452641613
Frequency counter with i2c slave.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rutles 0:1913ea9baf30 1 // fc1114 - Frequency counter with i2c slave output
rutles 0:1913ea9baf30 2 // target: LPC1114FN28
rutles 0:1913ea9baf30 3
rutles 0:1913ea9baf30 4 #include "mbed.h"
rutles 0:1913ea9baf30 5
rutles 0:1913ea9baf30 6 #define I2C_ADRS 0x70
rutles 0:1913ea9baf30 7
rutles 0:1913ea9baf30 8 DigitalOut led(dp28);
rutles 0:1913ea9baf30 9 I2CSlave slave(dp5, dp27);
rutles 0:1913ea9baf30 10 Ticker tick;
rutles 0:1913ea9baf30 11
rutles 0:1913ea9baf30 12 uint32_t frq;
rutles 0:1913ea9baf30 13
rutles 0:1913ea9baf30 14 void isr_tick(){
rutles 0:1913ea9baf30 15 frq = LPC_TMR32B0->TC;
rutles 0:1913ea9baf30 16 LPC_TMR32B0->TC = 0;
rutles 0:1913ea9baf30 17
rutles 0:1913ea9baf30 18 led = !led;
rutles 0:1913ea9baf30 19 }
rutles 0:1913ea9baf30 20
rutles 0:1913ea9baf30 21 int main() {
rutles 0:1913ea9baf30 22 union {
rutles 0:1913ea9baf30 23 char b[4];
rutles 0:1913ea9baf30 24 uint32_t w;
rutles 0:1913ea9baf30 25 } buf;
rutles 0:1913ea9baf30 26 char dummy[4];
rutles 0:1913ea9baf30 27
rutles 0:1913ea9baf30 28 tick.attach(&isr_tick, 1);
rutles 0:1913ea9baf30 29
rutles 0:1913ea9baf30 30 led = 1;
rutles 0:1913ea9baf30 31
rutles 0:1913ea9baf30 32 LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 9);//TMR32B0 wakeup
rutles 0:1913ea9baf30 33 LPC_IOCON->PIO1_5 |= (1 << 1);// Set PIN14 as CT32B0_CAP0
rutles 0:1913ea9baf30 34 LPC_IOCON->PIO1_5 |= (1 << 5);// Hysteresis enable
rutles 0:1913ea9baf30 35 LPC_TMR32B0->TCR = 2; // reset
rutles 0:1913ea9baf30 36 LPC_TMR32B0->CTCR = 1; // counter mode
rutles 0:1913ea9baf30 37 LPC_TMR32B0->CCR = 0; // Input Capture Disable)
rutles 0:1913ea9baf30 38 LPC_TMR32B0->PR = 0;// no prescale
rutles 0:1913ea9baf30 39 LPC_TMR32B0->TCR = 1; // start
rutles 0:1913ea9baf30 40
rutles 0:1913ea9baf30 41 slave.address(I2C_ADRS << 1);
rutles 0:1913ea9baf30 42
rutles 0:1913ea9baf30 43 while (1) {
rutles 0:1913ea9baf30 44 int i = slave.receive();
rutles 0:1913ea9baf30 45 switch (i) {
rutles 0:1913ea9baf30 46 case I2CSlave::ReadAddressed:
rutles 0:1913ea9baf30 47 buf.w = frq;
rutles 0:1913ea9baf30 48 slave.write(buf.b, 4);
rutles 0:1913ea9baf30 49 break;
rutles 0:1913ea9baf30 50 case I2CSlave::WriteGeneral:
rutles 0:1913ea9baf30 51 slave.read(dummy, 4);
rutles 0:1913ea9baf30 52 break;
rutles 0:1913ea9baf30 53 case I2CSlave::WriteAddressed:
rutles 0:1913ea9baf30 54 slave.read(dummy, 4);
rutles 0:1913ea9baf30 55 break;
rutles 0:1913ea9baf30 56 }
rutles 0:1913ea9baf30 57 }
rutles 0:1913ea9baf30 58 }