Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of Delphi2I2c by
main.cpp@0:daee39a441b0, 2016-02-29 (annotated)
- Committer:
- yamasho
- Date:
- Mon Feb 29 10:58:00 2016 +0000
- Revision:
- 0:daee39a441b0
- Child:
- 1:dcd9840bdd66
232ctoi2c
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| yamasho | 0:daee39a441b0 | 1 | #include "mbed.h" |
| yamasho | 0:daee39a441b0 | 2 | |
| yamasho | 0:daee39a441b0 | 3 | #define PCBAUD 115200 |
| yamasho | 0:daee39a441b0 | 4 | #define I2CSPEED 10000 /* 10 KBPS */ |
| yamasho | 0:daee39a441b0 | 5 | |
| yamasho | 0:daee39a441b0 | 6 | #define HI ( true ) |
| yamasho | 0:daee39a441b0 | 7 | #define LOW ( false ) |
| yamasho | 0:daee39a441b0 | 8 | |
| yamasho | 0:daee39a441b0 | 9 | //////////////////// ポート定義 ////////////////////// |
| yamasho | 0:daee39a441b0 | 10 | Serial PC(USBTX, USBRX); /* PC UART */ |
| yamasho | 0:daee39a441b0 | 11 | I2C I2CS(p9, p10); /* I2C (SDA ,SCL) */ |
| yamasho | 0:daee39a441b0 | 12 | uint8_t I2cDataBuffer[256]; /* I2C DATA BUFFER */ |
| yamasho | 0:daee39a441b0 | 13 | uint8_t I2cAddr; /* I2C Addr */ |
| yamasho | 0:daee39a441b0 | 14 | uint32_t I2cSpeed; /* I2C Addr */ |
| yamasho | 0:daee39a441b0 | 15 | uint8_t Code; /* Check Buffer */ |
| yamasho | 0:daee39a441b0 | 16 | |
| yamasho | 0:daee39a441b0 | 17 | |
| yamasho | 0:daee39a441b0 | 18 | /* //////////////////////////////////////////////////////////////////////// */ |
| yamasho | 0:daee39a441b0 | 19 | /* // I2Cシリアル出力書込み処理 /////////////////////////////////////// */ |
| yamasho | 0:daee39a441b0 | 20 | /* //////////////////////////////////////////////////////////////////////// */ |
| yamasho | 0:daee39a441b0 | 21 | int I2cWrite(uint8_t I2cAddr, uint8_t len ) |
| yamasho | 0:daee39a441b0 | 22 | { |
| yamasho | 0:daee39a441b0 | 23 | I2CS.frequency(I2cSpeed); |
| yamasho | 0:daee39a441b0 | 24 | return I2CS.write(I2cAddr,(char *)I2cDataBuffer, len ); /* I2C シリアル書込み */ |
| yamasho | 0:daee39a441b0 | 25 | } |
| yamasho | 0:daee39a441b0 | 26 | /* //////////////////////////////////////////////////////////////////////// */ |
| yamasho | 0:daee39a441b0 | 27 | /* // I2Cシリアル読み込み処理 ///////////////////////////////////////// */ |
| yamasho | 0:daee39a441b0 | 28 | /* //////////////////////////////////////////////////////////////////////// */ |
| yamasho | 0:daee39a441b0 | 29 | int I2cRead(uint8_t I2cAddr, uint8_t len ) |
| yamasho | 0:daee39a441b0 | 30 | { |
| yamasho | 0:daee39a441b0 | 31 | I2CS.frequency(I2cSpeed); |
| yamasho | 0:daee39a441b0 | 32 | return I2CS.read(I2cAddr,(char *)I2cDataBuffer , len ); /* I2C シリアル読込み */ |
| yamasho | 0:daee39a441b0 | 33 | } |
| yamasho | 0:daee39a441b0 | 34 | /* //////////////////////////////////////////////////////////////////////// */ |
| yamasho | 0:daee39a441b0 | 35 | /* // PCへの送信バッファ設定処理 //////////////////////////////////////// */ |
| yamasho | 0:daee39a441b0 | 36 | /* //////////////////////////////////////////////////////////////////////// */ |
| yamasho | 0:daee39a441b0 | 37 | void PcReturn(uint8_t RetCode) |
| yamasho | 0:daee39a441b0 | 38 | { |
| yamasho | 0:daee39a441b0 | 39 | PC.putc(RetCode); |
| yamasho | 0:daee39a441b0 | 40 | } |
| yamasho | 0:daee39a441b0 | 41 | /* //////////////////////////////////////////////////////////////////////// */ |
| yamasho | 0:daee39a441b0 | 42 | /* // コマンド処理 //////////////////////////////////////////////////////// */ |
| yamasho | 0:daee39a441b0 | 43 | /* //////////////////////////////////////////////////////////////////////// */ |
| yamasho | 0:daee39a441b0 | 44 | void Command(void) |
| yamasho | 0:daee39a441b0 | 45 | { |
| yamasho | 0:daee39a441b0 | 46 | uint8_t i; |
| yamasho | 0:daee39a441b0 | 47 | uint8_t Count; |
| yamasho | 0:daee39a441b0 | 48 | if( !PC.readable() ) return; /* PCからの要求がなければ抜け */ |
| yamasho | 0:daee39a441b0 | 49 | Code = PC.getc(); |
| yamasho | 0:daee39a441b0 | 50 | |
| yamasho | 0:daee39a441b0 | 51 | switch(Code) |
| yamasho | 0:daee39a441b0 | 52 | { |
| yamasho | 0:daee39a441b0 | 53 | /*********** I2C 送信 ************/ |
| yamasho | 0:daee39a441b0 | 54 | case 'O': |
| yamasho | 0:daee39a441b0 | 55 | wait_us(200); //100ms 以内 |
| yamasho | 0:daee39a441b0 | 56 | if( !PC.readable() ) |
| yamasho | 0:daee39a441b0 | 57 | { |
| yamasho | 0:daee39a441b0 | 58 | PcReturn('T'); // Error; |
| yamasho | 0:daee39a441b0 | 59 | return; |
| yamasho | 0:daee39a441b0 | 60 | } |
| yamasho | 0:daee39a441b0 | 61 | Count = PC.getc(); |
| yamasho | 0:daee39a441b0 | 62 | |
| yamasho | 0:daee39a441b0 | 63 | // PC.printf("size: %2d \n",Count); |
| yamasho | 0:daee39a441b0 | 64 | wait_us(200); //100ms 以内 |
| yamasho | 0:daee39a441b0 | 65 | if( !PC.readable() ) |
| yamasho | 0:daee39a441b0 | 66 | { |
| yamasho | 0:daee39a441b0 | 67 | PcReturn('T'); // Error; |
| yamasho | 0:daee39a441b0 | 68 | return; |
| yamasho | 0:daee39a441b0 | 69 | } |
| yamasho | 0:daee39a441b0 | 70 | I2cAddr = PC.getc(); |
| yamasho | 0:daee39a441b0 | 71 | |
| yamasho | 0:daee39a441b0 | 72 | if(Count != 0) Count--; |
| yamasho | 0:daee39a441b0 | 73 | for( i = 0 ; i < Count ; i++) |
| yamasho | 0:daee39a441b0 | 74 | { |
| yamasho | 0:daee39a441b0 | 75 | wait_us(300); //100ms 以内 |
| yamasho | 0:daee39a441b0 | 76 | if( !PC.readable() ) |
| yamasho | 0:daee39a441b0 | 77 | { |
| yamasho | 0:daee39a441b0 | 78 | PcReturn('T'); // Error; |
| yamasho | 0:daee39a441b0 | 79 | return; |
| yamasho | 0:daee39a441b0 | 80 | } |
| yamasho | 0:daee39a441b0 | 81 | I2cDataBuffer[i] = PC.getc(); |
| yamasho | 0:daee39a441b0 | 82 | } |
| yamasho | 0:daee39a441b0 | 83 | { |
| yamasho | 0:daee39a441b0 | 84 | if(!I2cWrite( I2cAddr, Count )) |
| yamasho | 0:daee39a441b0 | 85 | { |
| yamasho | 0:daee39a441b0 | 86 | PcReturn('S'); // Success |
| yamasho | 0:daee39a441b0 | 87 | } |
| yamasho | 0:daee39a441b0 | 88 | else |
| yamasho | 0:daee39a441b0 | 89 | { |
| yamasho | 0:daee39a441b0 | 90 | PcReturn('E'); // Error |
| yamasho | 0:daee39a441b0 | 91 | } |
| yamasho | 0:daee39a441b0 | 92 | } |
| yamasho | 0:daee39a441b0 | 93 | break; |
| yamasho | 0:daee39a441b0 | 94 | /*********** I2CI BUS ************/ |
| yamasho | 0:daee39a441b0 | 95 | case 'I': |
| yamasho | 0:daee39a441b0 | 96 | wait_us(200); //100ms 以内 |
| yamasho | 0:daee39a441b0 | 97 | if( !PC.readable() ) |
| yamasho | 0:daee39a441b0 | 98 | { |
| yamasho | 0:daee39a441b0 | 99 | PcReturn('T'); // Error; |
| yamasho | 0:daee39a441b0 | 100 | return; /* PCからの要求がなければ抜け */ |
| yamasho | 0:daee39a441b0 | 101 | } |
| yamasho | 0:daee39a441b0 | 102 | Count = PC.getc(); |
| yamasho | 0:daee39a441b0 | 103 | |
| yamasho | 0:daee39a441b0 | 104 | // PC.printf("size: %2d \n",Count); |
| yamasho | 0:daee39a441b0 | 105 | |
| yamasho | 0:daee39a441b0 | 106 | wait_us(200); //100ms 以内 |
| yamasho | 0:daee39a441b0 | 107 | if( !PC.readable() ) |
| yamasho | 0:daee39a441b0 | 108 | { |
| yamasho | 0:daee39a441b0 | 109 | PcReturn('T'); // Error; |
| yamasho | 0:daee39a441b0 | 110 | return; /* PCからの要求がなければ抜け */ |
| yamasho | 0:daee39a441b0 | 111 | } |
| yamasho | 0:daee39a441b0 | 112 | I2cAddr = PC.getc(); |
| yamasho | 0:daee39a441b0 | 113 | |
| yamasho | 0:daee39a441b0 | 114 | if( Count == 0) |
| yamasho | 0:daee39a441b0 | 115 | { |
| yamasho | 0:daee39a441b0 | 116 | PcReturn('T'); // Error; |
| yamasho | 0:daee39a441b0 | 117 | return; |
| yamasho | 0:daee39a441b0 | 118 | } |
| yamasho | 0:daee39a441b0 | 119 | |
| yamasho | 0:daee39a441b0 | 120 | if(!I2cRead(I2cAddr, Count )) |
| yamasho | 0:daee39a441b0 | 121 | { // success // |
| yamasho | 0:daee39a441b0 | 122 | PcReturn('I'); // Success; |
| yamasho | 0:daee39a441b0 | 123 | PcReturn(Count); |
| yamasho | 0:daee39a441b0 | 124 | for( uint8_t i = 0 ; i < Count ; i ++ ) |
| yamasho | 0:daee39a441b0 | 125 | { |
| yamasho | 0:daee39a441b0 | 126 | PcReturn(I2cDataBuffer[i]); |
| yamasho | 0:daee39a441b0 | 127 | } |
| yamasho | 0:daee39a441b0 | 128 | } |
| yamasho | 0:daee39a441b0 | 129 | else |
| yamasho | 0:daee39a441b0 | 130 | { // ng // |
| yamasho | 0:daee39a441b0 | 131 | PcReturn('E'); // Error; |
| yamasho | 0:daee39a441b0 | 132 | } |
| yamasho | 0:daee39a441b0 | 133 | break; |
| yamasho | 0:daee39a441b0 | 134 | /*********** SPI1O BUS ************/ |
| yamasho | 0:daee39a441b0 | 135 | case 'S': |
| yamasho | 0:daee39a441b0 | 136 | wait_us(200); //100ms 以内 |
| yamasho | 0:daee39a441b0 | 137 | if( !PC.readable() ) |
| yamasho | 0:daee39a441b0 | 138 | { |
| yamasho | 0:daee39a441b0 | 139 | PcReturn('T'); // Error; |
| yamasho | 0:daee39a441b0 | 140 | return; |
| yamasho | 0:daee39a441b0 | 141 | } |
| yamasho | 0:daee39a441b0 | 142 | Code = PC.getc(); |
| yamasho | 0:daee39a441b0 | 143 | wait_us(200); //100ms 以内 |
| yamasho | 0:daee39a441b0 | 144 | if( !PC.readable() ) |
| yamasho | 0:daee39a441b0 | 145 | { |
| yamasho | 0:daee39a441b0 | 146 | PcReturn('T'); // Error; |
| yamasho | 0:daee39a441b0 | 147 | return; |
| yamasho | 0:daee39a441b0 | 148 | } |
| yamasho | 0:daee39a441b0 | 149 | I2cSpeed = ((uint16_t)Code << 8) | PC.getc(); |
| yamasho | 0:daee39a441b0 | 150 | |
| yamasho | 0:daee39a441b0 | 151 | PcReturn('S'); // Success; |
| yamasho | 0:daee39a441b0 | 152 | break; |
| yamasho | 0:daee39a441b0 | 153 | } |
| yamasho | 0:daee39a441b0 | 154 | |
| yamasho | 0:daee39a441b0 | 155 | } |
| yamasho | 0:daee39a441b0 | 156 | /* //////////////////////////////////////////////////////////////////////// */ |
| yamasho | 0:daee39a441b0 | 157 | /* // メイン処理 ////////////////////////////////////////////////////////// */ |
| yamasho | 0:daee39a441b0 | 158 | /* //////////////////////////////////////////////////////////////////////// */ |
| yamasho | 0:daee39a441b0 | 159 | int main(void) |
| yamasho | 0:daee39a441b0 | 160 | { |
| yamasho | 0:daee39a441b0 | 161 | //// PC 通信設定 //////////// |
| yamasho | 0:daee39a441b0 | 162 | PC.baud(PCBAUD); /* PC間フォーマット設定 ボ-レート */ |
| yamasho | 0:daee39a441b0 | 163 | I2cSpeed = I2CSPEED; |
| yamasho | 0:daee39a441b0 | 164 | PC.printf("Progam Start!\n"); |
| yamasho | 0:daee39a441b0 | 165 | while( true ) |
| yamasho | 0:daee39a441b0 | 166 | { |
| yamasho | 0:daee39a441b0 | 167 | Command(); //PC =>PCB Command |
| yamasho | 0:daee39a441b0 | 168 | } |
| yamasho | 0:daee39a441b0 | 169 | } |
| yamasho | 0:daee39a441b0 | 170 |
