Kazuki Yamamoto / Mbed 2 deprecated uart_i2c_conv

Dependencies:   mbed

Committer:
Kazuki Yamamoto
Date:
Thu Dec 11 19:21:12 2014 +0900
Revision:
19:93814b431bf5
Parent:
18:e3286a42cf0e
Child:
22:946c08f6daff
[ LPC824 ] Pinout setting(commented out)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Kazuki Yamamoto 9:844e301ab0fd 1 /** uart_i2c_conv for LPC824
Kazuki Yamamoto 9:844e301ab0fd 2 */
Kazuki Yamamoto 9:844e301ab0fd 3
Kazuki Yamamoto 5:07f7000ec747 4 #include "mbed.h"
Kazuki Yamamoto 5:07f7000ec747 5
Kazuki Yamamoto 5:07f7000ec747 6 Serial pc(USBTX,USBRX);
Kazuki Yamamoto 19:93814b431bf5 7 /*
Kazuki Yamamoto 19:93814b431bf5 8 Serial pc(P0_4, P0_0);
Kazuki Yamamoto 19:93814b431bf5 9 */
Kazuki Yamamoto 9:844e301ab0fd 10 I2C dev1(I2C_SDA, I2C_SCL);//11,10 hard coded
Kazuki Yamamoto 9:844e301ab0fd 11
Kazuki Yamamoto 18:e3286a42cf0e 12 I2C dev2(P0_6, P0_14);//6,14 | A0, A1
Kazuki Yamamoto 18:e3286a42cf0e 13 I2C dev3(P0_23, P0_22);//23,22 | A2, A3
Kazuki Yamamoto 18:e3286a42cf0e 14 I2C dev4(P0_21, P0_20);//21,20 | A4, A5
Kazuki Yamamoto 18:e3286a42cf0e 15 /*
Kazuki Yamamoto 18:e3286a42cf0e 16 I2C dev2(P0_16, P0_27);
Kazuki Yamamoto 18:e3286a42cf0e 17 I2C dev3(P0_26, P0_25);
Kazuki Yamamoto 18:e3286a42cf0e 18 I2C dev4(P0_24, P0_15);
Kazuki Yamamoto 18:e3286a42cf0e 19 */
Kazuki Yamamoto 19:93814b431bf5 20 DigitalInOut _GPIO0(D0); // P0_0
Kazuki Yamamoto 19:93814b431bf5 21 DigitalInOut _GPIO1(D1); // P0_4
Kazuki Yamamoto 19:93814b431bf5 22 DigitalInOut _GPIO2(D2); // P0_19
Kazuki Yamamoto 19:93814b431bf5 23 DigitalInOut _GPIO3(D4); // P0_18
Kazuki Yamamoto 19:93814b431bf5 24 DigitalInOut _GPIO4(D5); // P0_28
Kazuki Yamamoto 19:93814b431bf5 25 DigitalInOut _GPIO5(D7); // P0_17
Kazuki Yamamoto 19:93814b431bf5 26 DigitalInOut _GPIO6(D8); // P0_13
Kazuki Yamamoto 19:93814b431bf5 27 DigitalInOut _GPIO7(D10); // P0_15
Kazuki Yamamoto 18:e3286a42cf0e 28 /*
Kazuki Yamamoto 19:93814b431bf5 29 DigitalInOut _GPIO00(P0_13);
Kazuki Yamamoto 19:93814b431bf5 30 DigitalInOut _GPIO01(P0_17);
Kazuki Yamamoto 19:93814b431bf5 31 DigitalInOut _GPIO02(P0_18);
Kazuki Yamamoto 19:93814b431bf5 32 DigitalInOut _GPIO03(P0_19);
Kazuki Yamamoto 19:93814b431bf5 33 DigitalInOut _GPIO04(P0_20);
Kazuki Yamamoto 19:93814b431bf5 34 DigitalInOut _GPIO05(P0_21);
Kazuki Yamamoto 19:93814b431bf5 35 DigitalInOut _GPIO06(P0_22);
Kazuki Yamamoto 19:93814b431bf5 36 DigitalInOut _GPIO07(P0_23);
Kazuki Yamamoto 19:93814b431bf5 37
Kazuki Yamamoto 19:93814b431bf5 38 DigitalInOut _GPIO10(P0_14);
Kazuki Yamamoto 19:93814b431bf5 39 DigitalInOut _GPIO11(P0_1);
Kazuki Yamamoto 19:93814b431bf5 40 //DigitalInOut _GPIO12( );
Kazuki Yamamoto 19:93814b431bf5 41 //DigitalInOut _GPIO13( );
Kazuki Yamamoto 19:93814b431bf5 42 //DigitalInOut _GPIO14( );
Kazuki Yamamoto 19:93814b431bf5 43 //DigitalInOut _GPIO15( );
Kazuki Yamamoto 18:e3286a42cf0e 44 */
Kazuki Yamamoto 5:07f7000ec747 45
Kazuki Yamamoto 18:e3286a42cf0e 46 SPI _spi(D11, D12, D13); // mosi, miso, sclk
Kazuki Yamamoto 18:e3286a42cf0e 47 /*
Kazuki Yamamoto 18:e3286a42cf0e 48 SPI _spi(P0_6, P0_7, P0_8); // mosi, miso, sclk
Kazuki Yamamoto 18:e3286a42cf0e 49 DigitalOut _cs(P0_9) // CS
Kazuki Yamamoto 18:e3286a42cf0e 50 */
Kazuki Yamamoto 19:93814b431bf5 51
Kazuki Yamamoto 19:93814b431bf5 52 /**
Kazuki Yamamoto 19:93814b431bf5 53 */
Kazuki Yamamoto 5:07f7000ec747 54 //Table 3. ASCII commands supported by SC18IM700
Kazuki Yamamoto 5:07f7000ec747 55 //ASCII command Hex value Command function
Kazuki Yamamoto 5:07f7000ec747 56 //[X] S 0x53 I2C-bus START
Kazuki Yamamoto 5:07f7000ec747 57 //[X] P 0x50 I2C-bus STOP
Kazuki Yamamoto 9:844e301ab0fd 58 //[?] R 0x52 read SC18IM700 internal register
Kazuki Yamamoto 9:844e301ab0fd 59 //[?] W 0x57 write to SC18IM700 internal register
Kazuki Yamamoto 9:844e301ab0fd 60 //[?] I 0x49 read GPIO port
Kazuki Yamamoto 9:844e301ab0fd 61 //[?] O 0x4F write to GPIO port
Kazuki Yamamoto 5:07f7000ec747 62 //[_] Z 0x5A power down
Kazuki Yamamoto 5:07f7000ec747 63 //[X] C 0x43 change channel
Kazuki Yamamoto 9:844e301ab0fd 64 //[_] E 0x45 enable chip
Kazuki Yamamoto 9:844e301ab0fd 65 //[_] V 0x__ enable VDDIO output to chip
Kazuki Yamamoto 5:07f7000ec747 66
Kazuki Yamamoto 12:db621ae6a076 67 /**
Kazuki Yamamoto 12:db621ae6a076 68 "C| '0'| P"
Kazuki Yamamoto 12:db621ae6a076 69 "C| '1'| P"
Kazuki Yamamoto 12:db621ae6a076 70 "C| '2'| P"
Kazuki Yamamoto 12:db621ae6a076 71 "C| '3'| P"
Kazuki Yamamoto 12:db621ae6a076 72 "S| 0x_8 _0| 0x_0 _4| 0x_D _E _A _D _B _E _A _F| P"
Kazuki Yamamoto 12:db621ae6a076 73 "S| 0x_8 _0| 0x_0 _4| 0x_D _E _A _D _B _E _A _F| S| 0x_8 _1| 0x_0 _4| P"
Kazuki Yamamoto 12:db621ae6a076 74 "S| 0x_8 _1| 0x_0 _4| P"
Kazuki Yamamoto 12:db621ae6a076 75 "R| '0'| P"
Kazuki Yamamoto 12:db621ae6a076 76 "R| '0'| '1'| ...| P"
Kazuki Yamamoto 12:db621ae6a076 77 "W| '0' 0x_a _a| P"
Kazuki Yamamoto 12:db621ae6a076 78 "W| '0' 0x_a _a| '1' 0x_b _b| ...| P"
Kazuki Yamamoto 12:db621ae6a076 79 "I| P"
Kazuki Yamamoto 12:db621ae6a076 80 "O| 0x_a _a| P"
Kazuki Yamamoto 12:db621ae6a076 81 */
Kazuki Yamamoto 5:07f7000ec747 82 int main()
Kazuki Yamamoto 5:07f7000ec747 83 {
Kazuki Yamamoto 5:07f7000ec747 84 I2C* dev=&dev1;
Kazuki Yamamoto 5:07f7000ec747 85 pc.baud(115200);
Kazuki Yamamoto 9:844e301ab0fd 86
Kazuki Yamamoto 9:844e301ab0fd 87 LPC_IOCON->PIO0_11 &= ~(0x02<<8);
Kazuki Yamamoto 9:844e301ab0fd 88 LPC_IOCON->PIO0_11 |= (0x02<<8);
Kazuki Yamamoto 9:844e301ab0fd 89 LPC_IOCON->PIO0_10 &= ~(0x02<<8);
Kazuki Yamamoto 9:844e301ab0fd 90 LPC_IOCON->PIO0_10 |= (0x02<<8);
Kazuki Yamamoto 5:07f7000ec747 91
Kazuki Yamamoto 9:844e301ab0fd 92 bool s = false;
Kazuki Yamamoto 9:844e301ab0fd 93 dev1.frequency(800000);//800k not work at 1M? too large pullup?
Kazuki Yamamoto 9:844e301ab0fd 94 dev2.frequency(400000);//400k
Kazuki Yamamoto 9:844e301ab0fd 95 dev3.frequency(400000);//400k
Kazuki Yamamoto 9:844e301ab0fd 96 dev4.frequency(400000);//400k
Kazuki Yamamoto 16:ba11339fd9c6 97
Kazuki Yamamoto 18:e3286a42cf0e 98 DigitalInOut* gpio0[]={
Kazuki Yamamoto 11:0d8359a6e2c2 99 &_GPIO0,
Kazuki Yamamoto 11:0d8359a6e2c2 100 &_GPIO1,
Kazuki Yamamoto 11:0d8359a6e2c2 101 &_GPIO2,
Kazuki Yamamoto 11:0d8359a6e2c2 102 &_GPIO3,
Kazuki Yamamoto 11:0d8359a6e2c2 103 &_GPIO4,
Kazuki Yamamoto 11:0d8359a6e2c2 104 &_GPIO5,
Kazuki Yamamoto 11:0d8359a6e2c2 105 &_GPIO6,
Kazuki Yamamoto 11:0d8359a6e2c2 106 &_GPIO7,
Kazuki Yamamoto 18:e3286a42cf0e 107 };
Kazuki Yamamoto 16:ba11339fd9c6 108 for(int k=0; k<8; k++){
Kazuki Yamamoto 18:e3286a42cf0e 109 gpio0[k]->input();
Kazuki Yamamoto 18:e3286a42cf0e 110 gpio0[k]->mode(PullUp);
Kazuki Yamamoto 16:ba11339fd9c6 111 }
Kazuki Yamamoto 16:ba11339fd9c6 112
Kazuki Yamamoto 12:db621ae6a076 113 int ack = 0;
Kazuki Yamamoto 12:db621ae6a076 114 int plength = 0;
Kazuki Yamamoto 12:db621ae6a076 115 char recieve[] = {
Kazuki Yamamoto 12:db621ae6a076 116 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 117 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 118 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 119 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 120 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 121 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 122 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 123 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 124 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 125 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 126 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 127 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 128 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 129 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 130 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 131 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 132 };
Kazuki Yamamoto 12:db621ae6a076 133 char send[] = {
Kazuki Yamamoto 12:db621ae6a076 134 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 135 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 136 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 137 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 138 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 139 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 140 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 141 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 142 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 143 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 144 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 145 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 146 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 147 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 148 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 149 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 150 };
Kazuki Yamamoto 12:db621ae6a076 151
Kazuki Yamamoto 12:db621ae6a076 152 char read = 0;
Kazuki Yamamoto 12:db621ae6a076 153 int address = 0;
Kazuki Yamamoto 12:db621ae6a076 154 int data = 0;
Kazuki Yamamoto 12:db621ae6a076 155 int _data = 0;
Kazuki Yamamoto 12:db621ae6a076 156 int length = 0;
Kazuki Yamamoto 12:db621ae6a076 157 int channel = 0;
Kazuki Yamamoto 12:db621ae6a076 158 bool CE = false;
Kazuki Yamamoto 13:aa9e9a6fcef9 159 enum command_e {
Kazuki Yamamoto 13:aa9e9a6fcef9 160 CMD_S='S',
Kazuki Yamamoto 13:aa9e9a6fcef9 161 CMD_P='P',
Kazuki Yamamoto 13:aa9e9a6fcef9 162 CMD_C='C',
Kazuki Yamamoto 13:aa9e9a6fcef9 163 CMD_R='R',
Kazuki Yamamoto 13:aa9e9a6fcef9 164 CMD_W='W',
Kazuki Yamamoto 13:aa9e9a6fcef9 165 CMD_I='I',
Kazuki Yamamoto 13:aa9e9a6fcef9 166 CMD_O='O',
Kazuki Yamamoto 13:aa9e9a6fcef9 167 };
Kazuki Yamamoto 9:844e301ab0fd 168 enum channel_e {
Kazuki Yamamoto 9:844e301ab0fd 169 CH0 = '0',
Kazuki Yamamoto 9:844e301ab0fd 170 CH1 = '1',
Kazuki Yamamoto 9:844e301ab0fd 171 CH2 = '2',
Kazuki Yamamoto 9:844e301ab0fd 172 CH3 = '3',
Kazuki Yamamoto 5:07f7000ec747 173 };
Kazuki Yamamoto 9:844e301ab0fd 174 enum register_e {
Kazuki Yamamoto 12:db621ae6a076 175 CHIP_ID = '0',
Kazuki Yamamoto 9:844e301ab0fd 176 GPIO_STAT = '1',
Kazuki Yamamoto 18:e3286a42cf0e 177 GPIO_CONF = '2',
Kazuki Yamamoto 9:844e301ab0fd 178 };
Kazuki Yamamoto 9:844e301ab0fd 179 enum chipID_e {
Kazuki Yamamoto 9:844e301ab0fd 180 ID_LPC824 = '0',
Kazuki Yamamoto 9:844e301ab0fd 181 ID_LPC1768 = '1',
Kazuki Yamamoto 9:844e301ab0fd 182 ID_LPC11UXX = '2',
Kazuki Yamamoto 9:844e301ab0fd 183 };
Kazuki Yamamoto 14:5319d562834e 184 static const uint8_t chip_id=ID_LPC824;
Kazuki Yamamoto 14:5319d562834e 185 static uint8_t registers[]={
Kazuki Yamamoto 14:5319d562834e 186 chip_id,
Kazuki Yamamoto 13:aa9e9a6fcef9 187 0xBB,
Kazuki Yamamoto 14:5319d562834e 188 0xCC,
Kazuki Yamamoto 12:db621ae6a076 189 // 0b00000000, // all 0
Kazuki Yamamoto 12:db621ae6a076 190 // 0b00000000, // all input
Kazuki Yamamoto 9:844e301ab0fd 191 };
Kazuki Yamamoto 9:844e301ab0fd 192
Kazuki Yamamoto 5:07f7000ec747 193 int i=0;
Kazuki Yamamoto 5:07f7000ec747 194 while(1) {
Kazuki Yamamoto 12:db621ae6a076 195 i=0;
Kazuki Yamamoto 12:db621ae6a076 196 length=0;
Kazuki Yamamoto 5:07f7000ec747 197 while(true) {
Kazuki Yamamoto 5:07f7000ec747 198 read=pc.getc();
Kazuki Yamamoto 5:07f7000ec747 199 recieve[i]=read;
Kazuki Yamamoto 5:07f7000ec747 200 i++;
Kazuki Yamamoto 5:07f7000ec747 201 if(read == 'P') {
Kazuki Yamamoto 5:07f7000ec747 202 plength=i;
Kazuki Yamamoto 5:07f7000ec747 203 break;
Kazuki Yamamoto 5:07f7000ec747 204 }
Kazuki Yamamoto 5:07f7000ec747 205 }
Kazuki Yamamoto 5:07f7000ec747 206 i=0;
Kazuki Yamamoto 9:844e301ab0fd 207 while(i < plength) {
Kazuki Yamamoto 5:07f7000ec747 208 switch(recieve[i]) {
Kazuki Yamamoto 13:aa9e9a6fcef9 209 case CMD_C:
Kazuki Yamamoto 5:07f7000ec747 210 {
Kazuki Yamamoto 5:07f7000ec747 211 channel=recieve[i+1];
Kazuki Yamamoto 5:07f7000ec747 212 switch(channel) {
Kazuki Yamamoto 9:844e301ab0fd 213 case CH0:
Kazuki Yamamoto 5:07f7000ec747 214 {
Kazuki Yamamoto 18:e3286a42cf0e 215 channel = CH0;
Kazuki Yamamoto 5:07f7000ec747 216 dev=&dev1;
Kazuki Yamamoto 5:07f7000ec747 217 break;
Kazuki Yamamoto 5:07f7000ec747 218 }
Kazuki Yamamoto 9:844e301ab0fd 219 case CH1:
Kazuki Yamamoto 5:07f7000ec747 220 {
Kazuki Yamamoto 18:e3286a42cf0e 221 channel = CH1;
Kazuki Yamamoto 5:07f7000ec747 222 dev=&dev2;
Kazuki Yamamoto 5:07f7000ec747 223 break;
Kazuki Yamamoto 5:07f7000ec747 224 }
Kazuki Yamamoto 9:844e301ab0fd 225 case CH2:
Kazuki Yamamoto 5:07f7000ec747 226 {
Kazuki Yamamoto 18:e3286a42cf0e 227 channel = CH2;
Kazuki Yamamoto 5:07f7000ec747 228 dev=&dev3;
Kazuki Yamamoto 5:07f7000ec747 229 break;
Kazuki Yamamoto 5:07f7000ec747 230 }
Kazuki Yamamoto 9:844e301ab0fd 231 case CH3:
Kazuki Yamamoto 5:07f7000ec747 232 {
Kazuki Yamamoto 18:e3286a42cf0e 233 channel = CH3;
Kazuki Yamamoto 5:07f7000ec747 234 dev=&dev4;
Kazuki Yamamoto 5:07f7000ec747 235 break;
Kazuki Yamamoto 5:07f7000ec747 236 }
Kazuki Yamamoto 5:07f7000ec747 237 default:
Kazuki Yamamoto 5:07f7000ec747 238 {
Kazuki Yamamoto 18:e3286a42cf0e 239 channel = CH0;
Kazuki Yamamoto 5:07f7000ec747 240 dev=&dev1;
Kazuki Yamamoto 5:07f7000ec747 241 break;
Kazuki Yamamoto 5:07f7000ec747 242 }
Kazuki Yamamoto 5:07f7000ec747 243 }
Kazuki Yamamoto 5:07f7000ec747 244 i+=(2);
Kazuki Yamamoto 5:07f7000ec747 245 break;
Kazuki Yamamoto 5:07f7000ec747 246 }
Kazuki Yamamoto 13:aa9e9a6fcef9 247 case CMD_S:
Kazuki Yamamoto 5:07f7000ec747 248 {
Kazuki Yamamoto 9:844e301ab0fd 249 s = true;
Kazuki Yamamoto 9:844e301ab0fd 250 ack = plength - 2 - (i+1) + (recieve[i+2] & 0x01);
Kazuki Yamamoto 18:e3286a42cf0e 251 if(ack >= 4){ //valid packet
Kazuki Yamamoto 9:844e301ab0fd 252 address = 0xff & (recieve[i+1] << 4 | (recieve[i+2] & 0x0F));
Kazuki Yamamoto 9:844e301ab0fd 253 length = 0xff & (recieve[i+3] << 4 | (recieve[i+4] & 0x0F));
Kazuki Yamamoto 18:e3286a42cf0e 254
Kazuki Yamamoto 18:e3286a42cf0e 255 if( (address&0x01)) { //read
Kazuki Yamamoto 11:0d8359a6e2c2 256 dev->read(address, send, length, false); //added
Kazuki Yamamoto 11:0d8359a6e2c2 257 i+=(5);
Kazuki Yamamoto 18:e3286a42cf0e 258 } else { // write
Kazuki Yamamoto 11:0d8359a6e2c2 259 for(int j=0; j < (length * 2); j+=2) {
Kazuki Yamamoto 15:98ec6b372a2b 260 ack = 0xff&((recieve[5+j] << 4) | (recieve[6+j] & 0x0F));
Kazuki Yamamoto 11:0d8359a6e2c2 261 *(send+(j/2)) = ack; //added
Kazuki Yamamoto 11:0d8359a6e2c2 262 }
Kazuki Yamamoto 11:0d8359a6e2c2 263 dev->write(address, send, length, true); //added
Kazuki Yamamoto 11:0d8359a6e2c2 264 i+=(5 + length * 2);
Kazuki Yamamoto 11:0d8359a6e2c2 265 length=0;
Kazuki Yamamoto 11:0d8359a6e2c2 266 }
Kazuki Yamamoto 9:844e301ab0fd 267 }else{
Kazuki Yamamoto 9:844e301ab0fd 268 pc.printf("bad packet! %d, %d, %02X, %d\n\r",plength,i,recieve[(i+2)]&0x0F,ack);
Kazuki Yamamoto 11:0d8359a6e2c2 269 i = plength;
Kazuki Yamamoto 5:07f7000ec747 270 }
Kazuki Yamamoto 5:07f7000ec747 271 break;
Kazuki Yamamoto 5:07f7000ec747 272 }
Kazuki Yamamoto 13:aa9e9a6fcef9 273 case CMD_P:
Kazuki Yamamoto 9:844e301ab0fd 274 {
Kazuki Yamamoto 5:07f7000ec747 275 if(s){
Kazuki Yamamoto 5:07f7000ec747 276 dev->stop();
Kazuki Yamamoto 11:0d8359a6e2c2 277 s = false;
Kazuki Yamamoto 5:07f7000ec747 278 }
Kazuki Yamamoto 11:0d8359a6e2c2 279 i = plength;
Kazuki Yamamoto 5:07f7000ec747 280 for(int j=0; j<length; j++) {
Kazuki Yamamoto 5:07f7000ec747 281 pc.printf("%02X,",send[j]);
Kazuki Yamamoto 5:07f7000ec747 282 }
Kazuki Yamamoto 5:07f7000ec747 283 pc.printf("ok\n\r");
Kazuki Yamamoto 5:07f7000ec747 284 break;
Kazuki Yamamoto 9:844e301ab0fd 285 }
Kazuki Yamamoto 13:aa9e9a6fcef9 286 case CMD_R:
Kazuki Yamamoto 9:844e301ab0fd 287 {
Kazuki Yamamoto 11:0d8359a6e2c2 288 length = plength - 2;
Kazuki Yamamoto 16:ba11339fd9c6 289 if(length<1){
Kazuki Yamamoto 16:ba11339fd9c6 290 pc.printf("bad packet! %d\n\r",length);
Kazuki Yamamoto 16:ba11339fd9c6 291 i = plength + 1;
Kazuki Yamamoto 16:ba11339fd9c6 292 length = 0;
Kazuki Yamamoto 16:ba11339fd9c6 293 }else{
Kazuki Yamamoto 16:ba11339fd9c6 294 for(int j=0; j<length; j++){
Kazuki Yamamoto 16:ba11339fd9c6 295 address = recieve[i+1+j];
Kazuki Yamamoto 16:ba11339fd9c6 296 switch(address){
Kazuki Yamamoto 16:ba11339fd9c6 297 case CHIP_ID:
Kazuki Yamamoto 16:ba11339fd9c6 298 {
Kazuki Yamamoto 16:ba11339fd9c6 299 data = chip_id;
Kazuki Yamamoto 16:ba11339fd9c6 300 // send[j] = chip_id;
Kazuki Yamamoto 16:ba11339fd9c6 301 break;
Kazuki Yamamoto 16:ba11339fd9c6 302 }
Kazuki Yamamoto 16:ba11339fd9c6 303 case GPIO_STAT:
Kazuki Yamamoto 16:ba11339fd9c6 304 {
Kazuki Yamamoto 16:ba11339fd9c6 305 data = registers[GPIO_STAT-'0'];
Kazuki Yamamoto 16:ba11339fd9c6 306 // send[j] = (char)data;
Kazuki Yamamoto 16:ba11339fd9c6 307 break;
Kazuki Yamamoto 16:ba11339fd9c6 308 }
Kazuki Yamamoto 16:ba11339fd9c6 309 case GPIO_CONF:
Kazuki Yamamoto 16:ba11339fd9c6 310 {
Kazuki Yamamoto 16:ba11339fd9c6 311 data = registers[GPIO_CONF-'0'];
Kazuki Yamamoto 16:ba11339fd9c6 312 // send[j] = (char)data;
Kazuki Yamamoto 16:ba11339fd9c6 313 break;
Kazuki Yamamoto 16:ba11339fd9c6 314 }
Kazuki Yamamoto 16:ba11339fd9c6 315 default:
Kazuki Yamamoto 16:ba11339fd9c6 316 {
Kazuki Yamamoto 16:ba11339fd9c6 317 data = 0xAA;
Kazuki Yamamoto 16:ba11339fd9c6 318 // send[j] = 0xAA;
Kazuki Yamamoto 16:ba11339fd9c6 319 break;
Kazuki Yamamoto 16:ba11339fd9c6 320 }
Kazuki Yamamoto 11:0d8359a6e2c2 321 }
Kazuki Yamamoto 16:ba11339fd9c6 322 send[j] = (char)data;
Kazuki Yamamoto 11:0d8359a6e2c2 323 }
Kazuki Yamamoto 16:ba11339fd9c6 324 i += (length+1);
Kazuki Yamamoto 16:ba11339fd9c6 325 // pc.printf("command R is not implemented, ");
Kazuki Yamamoto 11:0d8359a6e2c2 326 }
Kazuki Yamamoto 5:07f7000ec747 327 break;
Kazuki Yamamoto 9:844e301ab0fd 328 }
Kazuki Yamamoto 13:aa9e9a6fcef9 329 case CMD_W:
Kazuki Yamamoto 9:844e301ab0fd 330 {
Kazuki Yamamoto 11:0d8359a6e2c2 331 length = plength - 2;
Kazuki Yamamoto 11:0d8359a6e2c2 332 if(length < 3){
Kazuki Yamamoto 11:0d8359a6e2c2 333 pc.printf("bad packet! %d\n\r",length);
Kazuki Yamamoto 11:0d8359a6e2c2 334 i = plength + 1;
Kazuki Yamamoto 16:ba11339fd9c6 335 length = 0;
Kazuki Yamamoto 11:0d8359a6e2c2 336 }else{
Kazuki Yamamoto 11:0d8359a6e2c2 337 for(int j=0; j<length; j+=3){
Kazuki Yamamoto 11:0d8359a6e2c2 338 address = recieve[i+1+j];
Kazuki Yamamoto 15:98ec6b372a2b 339 data = 0xff & (recieve[i+2+j] << 4 | (recieve[i+3+j] & 0x0F));
Kazuki Yamamoto 11:0d8359a6e2c2 340 switch(address){
Kazuki Yamamoto 11:0d8359a6e2c2 341 case CHIP_ID:
Kazuki Yamamoto 11:0d8359a6e2c2 342 {
Kazuki Yamamoto 11:0d8359a6e2c2 343 //READ ONLY: do nothing
Kazuki Yamamoto 16:ba11339fd9c6 344 data = registers[CHIP_ID-'0'];
Kazuki Yamamoto 16:ba11339fd9c6 345 // *(send+j) = registers[CHIP_ID-'0'];
Kazuki Yamamoto 11:0d8359a6e2c2 346 break;
Kazuki Yamamoto 11:0d8359a6e2c2 347 }
Kazuki Yamamoto 11:0d8359a6e2c2 348 case GPIO_STAT:
Kazuki Yamamoto 11:0d8359a6e2c2 349 {
Kazuki Yamamoto 12:db621ae6a076 350 //READ ONLY from this command: do nothing
Kazuki Yamamoto 16:ba11339fd9c6 351 data = registers[GPIO_STAT-'0'];
Kazuki Yamamoto 16:ba11339fd9c6 352 // *(send+j) = registers[GPIO_STAT-'0'];
Kazuki Yamamoto 11:0d8359a6e2c2 353 break;
Kazuki Yamamoto 11:0d8359a6e2c2 354 }
Kazuki Yamamoto 11:0d8359a6e2c2 355 case GPIO_CONF:
Kazuki Yamamoto 11:0d8359a6e2c2 356 {
Kazuki Yamamoto 15:98ec6b372a2b 357 registers[GPIO_CONF-'0'] = data;
Kazuki Yamamoto 16:ba11339fd9c6 358 // data = 0;
Kazuki Yamamoto 16:ba11339fd9c6 359 for(int k=0; k<8; k++){
Kazuki Yamamoto 16:ba11339fd9c6 360 if(data&0x01){//output
Kazuki Yamamoto 18:e3286a42cf0e 361 gpio0[k]->output();
Kazuki Yamamoto 16:ba11339fd9c6 362 }else{//input
Kazuki Yamamoto 18:e3286a42cf0e 363 gpio0[k]->input();
Kazuki Yamamoto 18:e3286a42cf0e 364 gpio0[k]->mode(PullUp);
Kazuki Yamamoto 16:ba11339fd9c6 365 }
Kazuki Yamamoto 16:ba11339fd9c6 366 data >>= 1;
Kazuki Yamamoto 16:ba11339fd9c6 367 }
Kazuki Yamamoto 16:ba11339fd9c6 368 data = registers[GPIO_CONF-'0'];
Kazuki Yamamoto 16:ba11339fd9c6 369 // *(send+j) = registers[GPIO_CONF-'0'];
Kazuki Yamamoto 11:0d8359a6e2c2 370 break;
Kazuki Yamamoto 11:0d8359a6e2c2 371 }
Kazuki Yamamoto 11:0d8359a6e2c2 372 default:
Kazuki Yamamoto 11:0d8359a6e2c2 373 {
Kazuki Yamamoto 11:0d8359a6e2c2 374 break;
Kazuki Yamamoto 11:0d8359a6e2c2 375 }
Kazuki Yamamoto 11:0d8359a6e2c2 376 }
Kazuki Yamamoto 16:ba11339fd9c6 377 send[j/3] = (char)data;
Kazuki Yamamoto 11:0d8359a6e2c2 378 }
Kazuki Yamamoto 16:ba11339fd9c6 379 i += length+1;
Kazuki Yamamoto 16:ba11339fd9c6 380 length /= 3;
Kazuki Yamamoto 11:0d8359a6e2c2 381 }
Kazuki Yamamoto 15:98ec6b372a2b 382 // pc.printf("command W is not implemented, ");
Kazuki Yamamoto 9:844e301ab0fd 383 break;
Kazuki Yamamoto 9:844e301ab0fd 384 }
Kazuki Yamamoto 13:aa9e9a6fcef9 385 case CMD_I:
Kazuki Yamamoto 9:844e301ab0fd 386 {
Kazuki Yamamoto 18:e3286a42cf0e 387 length = plength - 2;
Kazuki Yamamoto 18:e3286a42cf0e 388 data = 0;
Kazuki Yamamoto 18:e3286a42cf0e 389 if(length != 0){
Kazuki Yamamoto 18:e3286a42cf0e 390 pc.printf("bad packet! %d\n\r",length);
Kazuki Yamamoto 18:e3286a42cf0e 391 i = plength + 1;
Kazuki Yamamoto 18:e3286a42cf0e 392 length = 0;
Kazuki Yamamoto 18:e3286a42cf0e 393 }else{
Kazuki Yamamoto 18:e3286a42cf0e 394 for(int j=0; j<8; j++){
Kazuki Yamamoto 18:e3286a42cf0e 395 _data = gpio0[j]->read();
Kazuki Yamamoto 18:e3286a42cf0e 396 data |= (_data << j);
Kazuki Yamamoto 18:e3286a42cf0e 397 }
Kazuki Yamamoto 18:e3286a42cf0e 398 registers[GPIO_STAT-'0'] = data;
Kazuki Yamamoto 18:e3286a42cf0e 399 send[0] = data;
Kazuki Yamamoto 18:e3286a42cf0e 400 length = 1;
Kazuki Yamamoto 18:e3286a42cf0e 401 }
Kazuki Yamamoto 18:e3286a42cf0e 402 // pc.printf("command I is not implemented, ");
Kazuki Yamamoto 18:e3286a42cf0e 403 i+=length;
Kazuki Yamamoto 5:07f7000ec747 404 break;
Kazuki Yamamoto 9:844e301ab0fd 405 }
Kazuki Yamamoto 13:aa9e9a6fcef9 406 case CMD_O:
Kazuki Yamamoto 9:844e301ab0fd 407 {
Kazuki Yamamoto 18:e3286a42cf0e 408 length = plength - 2;
Kazuki Yamamoto 18:e3286a42cf0e 409 if(length != 2){
Kazuki Yamamoto 18:e3286a42cf0e 410 pc.printf("bad packet! %d\n\r",length);
Kazuki Yamamoto 18:e3286a42cf0e 411 i = plength + 1;
Kazuki Yamamoto 18:e3286a42cf0e 412 length = 0;
Kazuki Yamamoto 18:e3286a42cf0e 413 }else{
Kazuki Yamamoto 18:e3286a42cf0e 414 data = 0xff & (recieve[i+1] << 4 | (recieve[i+2] & 0x0F));
Kazuki Yamamoto 18:e3286a42cf0e 415 _data = registers[GPIO_CONF-'0'];
Kazuki Yamamoto 18:e3286a42cf0e 416 send[0] = (char)data;
Kazuki Yamamoto 18:e3286a42cf0e 417 for(int j=0; j<8; j++){
Kazuki Yamamoto 18:e3286a42cf0e 418 if(_data&0x01){ // output
Kazuki Yamamoto 18:e3286a42cf0e 419 gpio0[j]->write(data&0x01);
Kazuki Yamamoto 18:e3286a42cf0e 420 }else{ // input
Kazuki Yamamoto 18:e3286a42cf0e 421 ; // do nothing
Kazuki Yamamoto 18:e3286a42cf0e 422 }
Kazuki Yamamoto 18:e3286a42cf0e 423 data >>= 1;
Kazuki Yamamoto 18:e3286a42cf0e 424 _data >>= 1;
Kazuki Yamamoto 18:e3286a42cf0e 425 }
Kazuki Yamamoto 18:e3286a42cf0e 426 i += length+1;
Kazuki Yamamoto 18:e3286a42cf0e 427 length = 1;
Kazuki Yamamoto 18:e3286a42cf0e 428 }
Kazuki Yamamoto 18:e3286a42cf0e 429 // pc.printf("command O is not implemented, ");
Kazuki Yamamoto 5:07f7000ec747 430 break;
Kazuki Yamamoto 9:844e301ab0fd 431 }
Kazuki Yamamoto 9:844e301ab0fd 432 case 'Z':
Kazuki Yamamoto 9:844e301ab0fd 433 {
Kazuki Yamamoto 9:844e301ab0fd 434 pc.printf("command Z is not implemented\n\r");
Kazuki Yamamoto 5:07f7000ec747 435 i=plength;
Kazuki Yamamoto 5:07f7000ec747 436 break;
Kazuki Yamamoto 9:844e301ab0fd 437 }
Kazuki Yamamoto 9:844e301ab0fd 438 case 'E':
Kazuki Yamamoto 9:844e301ab0fd 439 {
Kazuki Yamamoto 9:844e301ab0fd 440 pc.printf("command E is not implemented\n\r");
Kazuki Yamamoto 5:07f7000ec747 441 i=plength;
Kazuki Yamamoto 5:07f7000ec747 442 break;
Kazuki Yamamoto 9:844e301ab0fd 443 }
Kazuki Yamamoto 9:844e301ab0fd 444 case 'V':
Kazuki Yamamoto 9:844e301ab0fd 445 {
Kazuki Yamamoto 9:844e301ab0fd 446 pc.printf("command V is not implemented\n\r");
Kazuki Yamamoto 5:07f7000ec747 447 i=plength;
Kazuki Yamamoto 5:07f7000ec747 448 break;
Kazuki Yamamoto 9:844e301ab0fd 449 }
Kazuki Yamamoto 9:844e301ab0fd 450 default:
Kazuki Yamamoto 9:844e301ab0fd 451 {
Kazuki Yamamoto 16:ba11339fd9c6 452 pc.printf("command %c is not implemented\n\r", recieve[i]);
Kazuki Yamamoto 9:844e301ab0fd 453 i=plength;
Kazuki Yamamoto 9:844e301ab0fd 454 break;
Kazuki Yamamoto 9:844e301ab0fd 455 }
Kazuki Yamamoto 5:07f7000ec747 456 }
Kazuki Yamamoto 5:07f7000ec747 457 }
Kazuki Yamamoto 5:07f7000ec747 458 i=0;
Kazuki Yamamoto 5:07f7000ec747 459 length=0;
Kazuki Yamamoto 5:07f7000ec747 460 }
Kazuki Yamamoto 5:07f7000ec747 461 }