Contains all code needed for analog digital and oscope

Dependencies:   mbed

Committer:
EricGlunn
Date:
Tue Apr 28 21:02:07 2020 +0000
Revision:
8:d3ffe55fd5f6
Parent:
7:60e993355f76
I2C shell code;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
EricGlunn 0:f4b1c6a95f25 1 #include "mbed.h"
EricGlunn 2:9a88de905577 2
EricGlunn 2:9a88de905577 3 #define reset 0b00000000 //Define function masks
EricGlunn 0:f4b1c6a95f25 4 #define digital 0b00100000
EricGlunn 0:f4b1c6a95f25 5 #define analog 0b01000000
EricGlunn 0:f4b1c6a95f25 6 #define I2C 0b01100000
EricGlunn 2:9a88de905577 7 #define oScope 0b10000000
EricGlunn 2:9a88de905577 8
EricGlunn 2:9a88de905577 9 #define stateMask 0b11100000 //general masks
EricGlunn 0:f4b1c6a95f25 10 #define pinMask 0b00011111
EricGlunn 2:9a88de905577 11 #define FULL 0b11111111
EricGlunn 2:9a88de905577 12
EricGlunn 0:f4b1c6a95f25 13
EricGlunn 0:f4b1c6a95f25 14 DigitalOut myled(LED1);
EricGlunn 0:f4b1c6a95f25 15
EricGlunn 2:9a88de905577 16
EricGlunn 8:d3ffe55fd5f6 17 AnalogIn a1(p16); //SDA
EricGlunn 8:d3ffe55fd5f6 18 InterruptIn i1(p15); //SCL
EricGlunn 0:f4b1c6a95f25 19
EricGlunn 8:d3ffe55fd5f6 20 volatile bool I2CRunning=false;
EricGlunn 8:d3ffe55fd5f6 21 volatile bool newI2CData=false;
EricGlunn 8:d3ffe55fd5f6 22 Ticker I2C_ticker;
EricGlunn 0:f4b1c6a95f25 23
EricGlunn 0:f4b1c6a95f25 24
EricGlunn 0:f4b1c6a95f25 25 volatile unsigned char command;
EricGlunn 0:f4b1c6a95f25 26 volatile unsigned char state;
EricGlunn 8:d3ffe55fd5f6 27 Serial PC(USBTX,USBRX);
EricGlunn 6:f2c589ad6241 28
EricGlunn 2:9a88de905577 29
EricGlunn 8:d3ffe55fd5f6 30 void I2C_state_machine(void){
EricGlunn 8:d3ffe55fd5f6 31 //Implement the state machine here to record address, data, R/W, ACK
EricGlunn 2:9a88de905577 32 }
EricGlunn 2:9a88de905577 33
EricGlunn 8:d3ffe55fd5f6 34 void I2C_sample_func(void){
EricGlunn 8:d3ffe55fd5f6 35 //This function will sample the SDA line every 10uS
EricGlunn 2:9a88de905577 36 }
EricGlunn 2:9a88de905577 37
EricGlunn 2:9a88de905577 38 void SerialInterrupt(void)
EricGlunn 2:9a88de905577 39 {
EricGlunn 2:9a88de905577 40 command=PC.getc();
EricGlunn 2:9a88de905577 41 state= command & stateMask;
EricGlunn 2:9a88de905577 42
EricGlunn 2:9a88de905577 43 switch(state) {
EricGlunn 2:9a88de905577 44 case reset:
EricGlunn 8:d3ffe55fd5f6 45
EricGlunn 8:d3ffe55fd5f6 46 I2CRunning=false;
EricGlunn 8:d3ffe55fd5f6 47 I2C_ticker.detach();
EricGlunn 8:d3ffe55fd5f6 48 volatile bool newI2CData=true;
EricGlunn 3:60f30ca6a65d 49
EricGlunn 2:9a88de905577 50
EricGlunn 0:f4b1c6a95f25 51 break;
EricGlunn 8:d3ffe55fd5f6 52
EricGlunn 8:d3ffe55fd5f6 53 case I2C:
EricGlunn 8:d3ffe55fd5f6 54 I2CRunning=true;
EricGlunn 8:d3ffe55fd5f6 55 I2C_ticker.attach_us(I2C_sample_func, 10);
EricGlunn 8:d3ffe55fd5f6 56
EricGlunn 7:60e993355f76 57 break;
EricGlunn 8:d3ffe55fd5f6 58
EricGlunn 8:d3ffe55fd5f6 59 }
EricGlunn 2:9a88de905577 60
EricGlunn 8:d3ffe55fd5f6 61
EricGlunn 0:f4b1c6a95f25 62 }
EricGlunn 0:f4b1c6a95f25 63
EricGlunn 2:9a88de905577 64 int main()
EricGlunn 2:9a88de905577 65 {
EricGlunn 2:9a88de905577 66 PC.attach(&SerialInterrupt, Serial::RxIrq);
EricGlunn 8:d3ffe55fd5f6 67 i1.rise(&I2C_state_machine); //here is the interrupt that will call the state machine
EricGlunn 2:9a88de905577 68
EricGlunn 0:f4b1c6a95f25 69 while(1) {
EricGlunn 8:d3ffe55fd5f6 70
EricGlunn 8:d3ffe55fd5f6 71 while(I2CRunning){ //Hang here and do nothing
EricGlunn 8:d3ffe55fd5f6 72
EricGlunn 8:d3ffe55fd5f6 73
EricGlunn 8:d3ffe55fd5f6 74 }
EricGlunn 8:d3ffe55fd5f6 75 if(newI2CData){
EricGlunn 8:d3ffe55fd5f6 76 //I2C done running send the data to PC
EricGlunn 0:f4b1c6a95f25 77 }
EricGlunn 2:9a88de905577 78
EricGlunn 2:9a88de905577 79
EricGlunn 2:9a88de905577 80
EricGlunn 0:f4b1c6a95f25 81 myled = 1; //indicate main loop is running
EricGlunn 0:f4b1c6a95f25 82 wait(0.2);
EricGlunn 0:f4b1c6a95f25 83 myled = 0;
EricGlunn 2:9a88de905577 84 wait(0.2);
EricGlunn 0:f4b1c6a95f25 85 }
EricGlunn 0:f4b1c6a95f25 86 }
EricGlunn 0:f4b1c6a95f25 87
EricGlunn 0:f4b1c6a95f25 88
EricGlunn 0:f4b1c6a95f25 89