![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Contains all code needed for analog digital and oscope
main.cpp@8:d3ffe55fd5f6, 2020-04-28 (annotated)
- 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?
User | Revision | Line number | New 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 |