Kazuki Yamamoto / Mbed 2 deprecated uart_i2c_conv

Dependencies:   mbed

Committer:
Kazuki Yamamoto
Date:
Wed Dec 17 16:04:08 2014 +0900
Revision:
28:1fe126593ba1
Parent:
27:53a29982d658
Child:
29:fede50040202
[ LPC824 ] pinout changed for LPC824MAX

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 22:946c08f6daff 5 #define QUAD_I2C
Kazuki Yamamoto 5:07f7000ec747 6
Kazuki Yamamoto 5:07f7000ec747 7 Serial pc(USBTX,USBRX);
Kazuki Yamamoto 22:946c08f6daff 8 /** replace
Kazuki Yamamoto 19:93814b431bf5 9 Serial pc(P0_4, P0_0);
Kazuki Yamamoto 19:93814b431bf5 10 */
Kazuki Yamamoto 22:946c08f6daff 11
Kazuki Yamamoto 9:844e301ab0fd 12 I2C dev1(I2C_SDA, I2C_SCL);//11,10 hard coded
Kazuki Yamamoto 9:844e301ab0fd 13
Kazuki Yamamoto 22:946c08f6daff 14 #ifdef QUAD_I2C
Kazuki Yamamoto 18:e3286a42cf0e 15 I2C dev2(P0_6, P0_14);//6,14 | A0, A1
Kazuki Yamamoto 18:e3286a42cf0e 16 I2C dev3(P0_23, P0_22);//23,22 | A2, A3
Kazuki Yamamoto 18:e3286a42cf0e 17 I2C dev4(P0_21, P0_20);//21,20 | A4, A5
Kazuki Yamamoto 22:946c08f6daff 18 /** replace
Kazuki Yamamoto 18:e3286a42cf0e 19 I2C dev2(P0_16, P0_27);
Kazuki Yamamoto 18:e3286a42cf0e 20 I2C dev3(P0_26, P0_25);
Kazuki Yamamoto 18:e3286a42cf0e 21 I2C dev4(P0_24, P0_15);
Kazuki Yamamoto 18:e3286a42cf0e 22 */
Kazuki Yamamoto 22:946c08f6daff 23 #else
Kazuki Yamamoto 22:946c08f6daff 24 DigitalInOut _GPIO10(P0_15);
Kazuki Yamamoto 22:946c08f6daff 25 DigitalInOut _GPIO11(P0_24);
Kazuki Yamamoto 22:946c08f6daff 26 DigitalInOut _GPIO12(P0_25);
Kazuki Yamamoto 22:946c08f6daff 27 DigitalInOut _GPIO13(P0_26);
Kazuki Yamamoto 22:946c08f6daff 28 DigitalInOut _GPIO14(P0_27);
Kazuki Yamamoto 22:946c08f6daff 29 DigitalInOut _GPIO15(P0_16);
Kazuki Yamamoto 22:946c08f6daff 30 DigitalInOut _GPIO16(P0_28);
Kazuki Yamamoto 22:946c08f6daff 31 DigitalInOut _GPIO17(P0_12);
Kazuki Yamamoto 22:946c08f6daff 32 #endif
Kazuki Yamamoto 22:946c08f6daff 33
Kazuki Yamamoto 28:1fe126593ba1 34 DigitalInOut _GPIO00(D0); // P0_0
Kazuki Yamamoto 28:1fe126593ba1 35 DigitalInOut _GPIO01(D1); // P0_4
Kazuki Yamamoto 28:1fe126593ba1 36 DigitalInOut _GPIO02(D2); // P0_19
Kazuki Yamamoto 28:1fe126593ba1 37 DigitalInOut _GPIO03(D3); // P0_12
Kazuki Yamamoto 28:1fe126593ba1 38 DigitalInOut _GPIO04(P0_1); //
Kazuki Yamamoto 28:1fe126593ba1 39 DigitalInOut _GPIO05(D5); // P0_28
Kazuki Yamamoto 28:1fe126593ba1 40 DigitalInOut _GPIO06(D6); // P0_16
Kazuki Yamamoto 28:1fe126593ba1 41 DigitalInOut _GPIO07(D7); // P0_17
Kazuki Yamamoto 22:946c08f6daff 42 /** replace
Kazuki Yamamoto 22:946c08f6daff 43 DigitalInOut _GPIO00(P0_17);
Kazuki Yamamoto 22:946c08f6daff 44 DigitalInOut _GPIO01(P0_18);
Kazuki Yamamoto 22:946c08f6daff 45 DigitalInOut _GPIO02(P0_19);
Kazuki Yamamoto 22:946c08f6daff 46 DigitalInOut _GPIO03(P0_20);
Kazuki Yamamoto 22:946c08f6daff 47 DigitalInOut _GPIO04(P0_21);
Kazuki Yamamoto 22:946c08f6daff 48 DigitalInOut _GPIO05(P0_22);
Kazuki Yamamoto 22:946c08f6daff 49 DigitalInOut _GPIO06(P0_23);
Kazuki Yamamoto 22:946c08f6daff 50 DigitalInOut _GPIO07(P0_14);
Kazuki Yamamoto 18:e3286a42cf0e 51 */
Kazuki Yamamoto 5:07f7000ec747 52
Kazuki Yamamoto 18:e3286a42cf0e 53 SPI _spi(D11, D12, D13); // mosi, miso, sclk
Kazuki Yamamoto 28:1fe126593ba1 54 DigitalOut _cs(D10); // CS
Kazuki Yamamoto 24:223a68f33f09 55 /** replace
Kazuki Yamamoto 18:e3286a42cf0e 56 SPI _spi(P0_6, P0_7, P0_8); // mosi, miso, sclk
Kazuki Yamamoto 18:e3286a42cf0e 57 DigitalOut _cs(P0_9) // CS
Kazuki Yamamoto 18:e3286a42cf0e 58 */
Kazuki Yamamoto 19:93814b431bf5 59
Kazuki Yamamoto 5:07f7000ec747 60 //Table 3. ASCII commands supported by SC18IM700
Kazuki Yamamoto 5:07f7000ec747 61 //ASCII command Hex value Command function
Kazuki Yamamoto 5:07f7000ec747 62 //[X] S 0x53 I2C-bus START
Kazuki Yamamoto 5:07f7000ec747 63 //[X] P 0x50 I2C-bus STOP
Kazuki Yamamoto 9:844e301ab0fd 64 //[?] R 0x52 read SC18IM700 internal register
Kazuki Yamamoto 9:844e301ab0fd 65 //[?] W 0x57 write to SC18IM700 internal register
Kazuki Yamamoto 9:844e301ab0fd 66 //[?] I 0x49 read GPIO port
Kazuki Yamamoto 9:844e301ab0fd 67 //[?] O 0x4F write to GPIO port
Kazuki Yamamoto 5:07f7000ec747 68 //[_] Z 0x5A power down
Kazuki Yamamoto 5:07f7000ec747 69 //[X] C 0x43 change channel
Kazuki Yamamoto 9:844e301ab0fd 70 //[_] E 0x45 enable chip
Kazuki Yamamoto 9:844e301ab0fd 71 //[_] V 0x__ enable VDDIO output to chip
Kazuki Yamamoto 5:07f7000ec747 72
Kazuki Yamamoto 12:db621ae6a076 73 /**
Kazuki Yamamoto 12:db621ae6a076 74 "C| '0'| P"
Kazuki Yamamoto 12:db621ae6a076 75 "C| '1'| P"
Kazuki Yamamoto 12:db621ae6a076 76 "C| '2'| P"
Kazuki Yamamoto 12:db621ae6a076 77 "C| '3'| P"
Kazuki Yamamoto 12:db621ae6a076 78 "S| 0x_8 _0| 0x_0 _4| 0x_D _E _A _D _B _E _A _F| P"
Kazuki Yamamoto 12:db621ae6a076 79 "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 80 "S| 0x_8 _1| 0x_0 _4| P"
Kazuki Yamamoto 12:db621ae6a076 81 "R| '0'| P"
Kazuki Yamamoto 12:db621ae6a076 82 "R| '0'| '1'| ...| P"
Kazuki Yamamoto 12:db621ae6a076 83 "W| '0' 0x_a _a| P"
Kazuki Yamamoto 12:db621ae6a076 84 "W| '0' 0x_a _a| '1' 0x_b _b| ...| P"
Kazuki Yamamoto 22:946c08f6daff 85 "I| '0'| P"
Kazuki Yamamoto 22:946c08f6daff 86 "O| '0'| 0x_a _a| P"
Kazuki Yamamoto 12:db621ae6a076 87 */
Kazuki Yamamoto 5:07f7000ec747 88 int main()
Kazuki Yamamoto 5:07f7000ec747 89 {
Kazuki Yamamoto 5:07f7000ec747 90 I2C* dev=&dev1;
Kazuki Yamamoto 5:07f7000ec747 91 pc.baud(115200);
Kazuki Yamamoto 9:844e301ab0fd 92
Kazuki Yamamoto 26:7810c849cb78 93 bool s = false;
Kazuki Yamamoto 26:7810c849cb78 94 dev1.frequency(900000);//900k; works around 940kHz with 200ohm pullups/ not work at 1M?
Kazuki Yamamoto 24:223a68f33f09 95 LPC_IOCON->PIO0_11 &= ~(0x03<<8);
Kazuki Yamamoto 9:844e301ab0fd 96 LPC_IOCON->PIO0_11 |= (0x02<<8);
Kazuki Yamamoto 24:223a68f33f09 97 LPC_IOCON->PIO0_10 &= ~(0x03<<8);
Kazuki Yamamoto 9:844e301ab0fd 98 LPC_IOCON->PIO0_10 |= (0x02<<8);
Kazuki Yamamoto 26:7810c849cb78 99 // LPC_I2C0->CLKDIV &= 0xFFFFFF00;
Kazuki Yamamoto 26:7810c849cb78 100 // LPC_I2C0->CLKDIV |= 0x05;
Kazuki Yamamoto 26:7810c849cb78 101 // LPC_I2C0->MSTTIME &= 0xFFFFFF00;
Kazuki Yamamoto 26:7810c849cb78 102 // LPC_I2C0->MSTTIME |= 0x00;
Kazuki Yamamoto 22:946c08f6daff 103 #ifdef QUAD_I2C
Kazuki Yamamoto 9:844e301ab0fd 104 dev2.frequency(400000);//400k
Kazuki Yamamoto 9:844e301ab0fd 105 dev3.frequency(400000);//400k
Kazuki Yamamoto 9:844e301ab0fd 106 dev4.frequency(400000);//400k
Kazuki Yamamoto 22:946c08f6daff 107 #else
Kazuki Yamamoto 22:946c08f6daff 108 DigitalInOut* gpio1[]={
Kazuki Yamamoto 28:1fe126593ba1 109 &_GPIO10,
Kazuki Yamamoto 28:1fe126593ba1 110 &_GPIO11,
Kazuki Yamamoto 28:1fe126593ba1 111 &_GPIO12,
Kazuki Yamamoto 28:1fe126593ba1 112 &_GPIO13,
Kazuki Yamamoto 28:1fe126593ba1 113 &_GPIO14,
Kazuki Yamamoto 28:1fe126593ba1 114 &_GPIO15,
Kazuki Yamamoto 28:1fe126593ba1 115 &_GPIO16,
Kazuki Yamamoto 28:1fe126593ba1 116 &_GPIO17,
Kazuki Yamamoto 22:946c08f6daff 117 };
Kazuki Yamamoto 22:946c08f6daff 118 for(int k=0; k<8; k++){
Kazuki Yamamoto 22:946c08f6daff 119 gpio1[k]->input();
Kazuki Yamamoto 24:223a68f33f09 120 gpio1[k]->mode(PullDown);
Kazuki Yamamoto 22:946c08f6daff 121 }
Kazuki Yamamoto 22:946c08f6daff 122 #endif
Kazuki Yamamoto 18:e3286a42cf0e 123 DigitalInOut* gpio0[]={
Kazuki Yamamoto 28:1fe126593ba1 124 &_GPIO00,
Kazuki Yamamoto 28:1fe126593ba1 125 &_GPIO01,
Kazuki Yamamoto 28:1fe126593ba1 126 &_GPIO02,
Kazuki Yamamoto 28:1fe126593ba1 127 &_GPIO03,
Kazuki Yamamoto 28:1fe126593ba1 128 &_GPIO04,
Kazuki Yamamoto 28:1fe126593ba1 129 &_GPIO05,
Kazuki Yamamoto 28:1fe126593ba1 130 &_GPIO06,
Kazuki Yamamoto 28:1fe126593ba1 131 &_GPIO07,
Kazuki Yamamoto 18:e3286a42cf0e 132 };
Kazuki Yamamoto 16:ba11339fd9c6 133 for(int k=0; k<8; k++){
Kazuki Yamamoto 18:e3286a42cf0e 134 gpio0[k]->input();
Kazuki Yamamoto 24:223a68f33f09 135 gpio0[k]->mode(PullDown);
Kazuki Yamamoto 16:ba11339fd9c6 136 }
Kazuki Yamamoto 16:ba11339fd9c6 137
Kazuki Yamamoto 12:db621ae6a076 138 int ack = 0;
Kazuki Yamamoto 12:db621ae6a076 139 int plength = 0;
Kazuki Yamamoto 12:db621ae6a076 140 char recieve[] = {
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 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 151 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 152 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 153 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 154 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 155 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 156 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 157 };
Kazuki Yamamoto 12:db621ae6a076 158 char send[] = {
Kazuki Yamamoto 12:db621ae6a076 159 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 160 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 161 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 162 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 163 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 164 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 165 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 166 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 167 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 168 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 169 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 170 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 171 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 172 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 173 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 174 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 175 };
Kazuki Yamamoto 12:db621ae6a076 176
Kazuki Yamamoto 12:db621ae6a076 177 char read = 0;
Kazuki Yamamoto 12:db621ae6a076 178 int address = 0;
Kazuki Yamamoto 12:db621ae6a076 179 int data = 0;
Kazuki Yamamoto 12:db621ae6a076 180 int _data = 0;
Kazuki Yamamoto 12:db621ae6a076 181 int length = 0;
Kazuki Yamamoto 12:db621ae6a076 182 int channel = 0;
Kazuki Yamamoto 12:db621ae6a076 183 bool CE = false;
Kazuki Yamamoto 13:aa9e9a6fcef9 184 enum command_e {
Kazuki Yamamoto 13:aa9e9a6fcef9 185 CMD_S='S',
Kazuki Yamamoto 13:aa9e9a6fcef9 186 CMD_P='P',
Kazuki Yamamoto 13:aa9e9a6fcef9 187 CMD_C='C',
Kazuki Yamamoto 13:aa9e9a6fcef9 188 CMD_R='R',
Kazuki Yamamoto 13:aa9e9a6fcef9 189 CMD_W='W',
Kazuki Yamamoto 13:aa9e9a6fcef9 190 CMD_I='I',
Kazuki Yamamoto 13:aa9e9a6fcef9 191 CMD_O='O',
Kazuki Yamamoto 13:aa9e9a6fcef9 192 };
Kazuki Yamamoto 9:844e301ab0fd 193 enum channel_e {
Kazuki Yamamoto 9:844e301ab0fd 194 CH0 = '0',
Kazuki Yamamoto 9:844e301ab0fd 195 CH1 = '1',
Kazuki Yamamoto 9:844e301ab0fd 196 CH2 = '2',
Kazuki Yamamoto 9:844e301ab0fd 197 CH3 = '3',
Kazuki Yamamoto 5:07f7000ec747 198 };
Kazuki Yamamoto 9:844e301ab0fd 199 enum register_e {
Kazuki Yamamoto 12:db621ae6a076 200 CHIP_ID = '0',
Kazuki Yamamoto 22:946c08f6daff 201 GPIO0_STAT = '1',
Kazuki Yamamoto 22:946c08f6daff 202 GPIO1_STAT = '2',
Kazuki Yamamoto 22:946c08f6daff 203 GPIO0_CONF = '3',
Kazuki Yamamoto 22:946c08f6daff 204 GPIO1_CONF = '4',
Kazuki Yamamoto 22:946c08f6daff 205 REG5,
Kazuki Yamamoto 22:946c08f6daff 206 REG6,
Kazuki Yamamoto 22:946c08f6daff 207 REG7,
Kazuki Yamamoto 22:946c08f6daff 208 REG8,
Kazuki Yamamoto 22:946c08f6daff 209 REG9,
Kazuki Yamamoto 9:844e301ab0fd 210 };
Kazuki Yamamoto 9:844e301ab0fd 211 enum chipID_e {
Kazuki Yamamoto 9:844e301ab0fd 212 ID_LPC824 = '0',
Kazuki Yamamoto 9:844e301ab0fd 213 ID_LPC1768 = '1',
Kazuki Yamamoto 9:844e301ab0fd 214 ID_LPC11UXX = '2',
Kazuki Yamamoto 9:844e301ab0fd 215 };
Kazuki Yamamoto 14:5319d562834e 216 static const uint8_t chip_id=ID_LPC824;
Kazuki Yamamoto 14:5319d562834e 217 static uint8_t registers[]={
Kazuki Yamamoto 14:5319d562834e 218 chip_id,
Kazuki Yamamoto 13:aa9e9a6fcef9 219 0xBB,
Kazuki Yamamoto 14:5319d562834e 220 0xCC,
Kazuki Yamamoto 22:946c08f6daff 221 0xDD,
Kazuki Yamamoto 22:946c08f6daff 222 0xEE,
Kazuki Yamamoto 24:223a68f33f09 223 REG5,
Kazuki Yamamoto 24:223a68f33f09 224 REG6,
Kazuki Yamamoto 24:223a68f33f09 225 REG7,
Kazuki Yamamoto 24:223a68f33f09 226 REG8,
Kazuki Yamamoto 24:223a68f33f09 227 REG9,
Kazuki Yamamoto 9:844e301ab0fd 228 };
Kazuki Yamamoto 9:844e301ab0fd 229
Kazuki Yamamoto 5:07f7000ec747 230 int i=0;
Kazuki Yamamoto 5:07f7000ec747 231 while(1) {
Kazuki Yamamoto 12:db621ae6a076 232 i=0;
Kazuki Yamamoto 12:db621ae6a076 233 length=0;
Kazuki Yamamoto 5:07f7000ec747 234 while(true) {
Kazuki Yamamoto 5:07f7000ec747 235 read=pc.getc();
Kazuki Yamamoto 5:07f7000ec747 236 recieve[i]=read;
Kazuki Yamamoto 5:07f7000ec747 237 i++;
Kazuki Yamamoto 5:07f7000ec747 238 if(read == 'P') {
Kazuki Yamamoto 5:07f7000ec747 239 plength=i;
Kazuki Yamamoto 5:07f7000ec747 240 break;
Kazuki Yamamoto 5:07f7000ec747 241 }
Kazuki Yamamoto 5:07f7000ec747 242 }
Kazuki Yamamoto 5:07f7000ec747 243 i=0;
Kazuki Yamamoto 9:844e301ab0fd 244 while(i < plength) {
Kazuki Yamamoto 5:07f7000ec747 245 switch(recieve[i]) {
Kazuki Yamamoto 13:aa9e9a6fcef9 246 case CMD_C:
Kazuki Yamamoto 5:07f7000ec747 247 {
Kazuki Yamamoto 5:07f7000ec747 248 channel=recieve[i+1];
Kazuki Yamamoto 5:07f7000ec747 249 switch(channel) {
Kazuki Yamamoto 9:844e301ab0fd 250 case CH0:
Kazuki Yamamoto 5:07f7000ec747 251 {
Kazuki Yamamoto 18:e3286a42cf0e 252 channel = CH0;
Kazuki Yamamoto 5:07f7000ec747 253 dev=&dev1;
Kazuki Yamamoto 5:07f7000ec747 254 break;
Kazuki Yamamoto 5:07f7000ec747 255 }
Kazuki Yamamoto 22:946c08f6daff 256 #ifdef QUAD_I2C
Kazuki Yamamoto 9:844e301ab0fd 257 case CH1:
Kazuki Yamamoto 5:07f7000ec747 258 {
Kazuki Yamamoto 18:e3286a42cf0e 259 channel = CH1;
Kazuki Yamamoto 5:07f7000ec747 260 dev=&dev2;
Kazuki Yamamoto 5:07f7000ec747 261 break;
Kazuki Yamamoto 5:07f7000ec747 262 }
Kazuki Yamamoto 9:844e301ab0fd 263 case CH2:
Kazuki Yamamoto 5:07f7000ec747 264 {
Kazuki Yamamoto 18:e3286a42cf0e 265 channel = CH2;
Kazuki Yamamoto 5:07f7000ec747 266 dev=&dev3;
Kazuki Yamamoto 5:07f7000ec747 267 break;
Kazuki Yamamoto 5:07f7000ec747 268 }
Kazuki Yamamoto 9:844e301ab0fd 269 case CH3:
Kazuki Yamamoto 5:07f7000ec747 270 {
Kazuki Yamamoto 18:e3286a42cf0e 271 channel = CH3;
Kazuki Yamamoto 5:07f7000ec747 272 dev=&dev4;
Kazuki Yamamoto 5:07f7000ec747 273 break;
Kazuki Yamamoto 5:07f7000ec747 274 }
Kazuki Yamamoto 22:946c08f6daff 275 #endif
Kazuki Yamamoto 5:07f7000ec747 276 default:
Kazuki Yamamoto 5:07f7000ec747 277 {
Kazuki Yamamoto 18:e3286a42cf0e 278 channel = CH0;
Kazuki Yamamoto 5:07f7000ec747 279 dev=&dev1;
Kazuki Yamamoto 5:07f7000ec747 280 break;
Kazuki Yamamoto 5:07f7000ec747 281 }
Kazuki Yamamoto 5:07f7000ec747 282 }
Kazuki Yamamoto 5:07f7000ec747 283 i+=(2);
Kazuki Yamamoto 5:07f7000ec747 284 break;
Kazuki Yamamoto 5:07f7000ec747 285 }
Kazuki Yamamoto 13:aa9e9a6fcef9 286 case CMD_S:
Kazuki Yamamoto 5:07f7000ec747 287 {
Kazuki Yamamoto 9:844e301ab0fd 288 s = true;
Kazuki Yamamoto 9:844e301ab0fd 289 ack = plength - 2 - (i+1) + (recieve[i+2] & 0x01);
Kazuki Yamamoto 18:e3286a42cf0e 290 if(ack >= 4){ //valid packet
Kazuki Yamamoto 9:844e301ab0fd 291 address = 0xff & (recieve[i+1] << 4 | (recieve[i+2] & 0x0F));
Kazuki Yamamoto 9:844e301ab0fd 292 length = 0xff & (recieve[i+3] << 4 | (recieve[i+4] & 0x0F));
Kazuki Yamamoto 18:e3286a42cf0e 293
Kazuki Yamamoto 22:946c08f6daff 294 if(address & 0x01) { //read
Kazuki Yamamoto 11:0d8359a6e2c2 295 dev->read(address, send, length, false); //added
Kazuki Yamamoto 11:0d8359a6e2c2 296 i+=(5);
Kazuki Yamamoto 18:e3286a42cf0e 297 } else { // write
Kazuki Yamamoto 11:0d8359a6e2c2 298 for(int j=0; j < (length * 2); j+=2) {
Kazuki Yamamoto 15:98ec6b372a2b 299 ack = 0xff&((recieve[5+j] << 4) | (recieve[6+j] & 0x0F));
Kazuki Yamamoto 11:0d8359a6e2c2 300 *(send+(j/2)) = ack; //added
Kazuki Yamamoto 11:0d8359a6e2c2 301 }
Kazuki Yamamoto 11:0d8359a6e2c2 302 dev->write(address, send, length, true); //added
Kazuki Yamamoto 11:0d8359a6e2c2 303 i+=(5 + length * 2);
Kazuki Yamamoto 11:0d8359a6e2c2 304 length=0;
Kazuki Yamamoto 11:0d8359a6e2c2 305 }
Kazuki Yamamoto 9:844e301ab0fd 306 }else{
Kazuki Yamamoto 9:844e301ab0fd 307 pc.printf("bad packet! %d, %d, %02X, %d\n\r",plength,i,recieve[(i+2)]&0x0F,ack);
Kazuki Yamamoto 11:0d8359a6e2c2 308 i = plength;
Kazuki Yamamoto 5:07f7000ec747 309 }
Kazuki Yamamoto 5:07f7000ec747 310 break;
Kazuki Yamamoto 5:07f7000ec747 311 }
Kazuki Yamamoto 13:aa9e9a6fcef9 312 case CMD_P:
Kazuki Yamamoto 9:844e301ab0fd 313 {
Kazuki Yamamoto 5:07f7000ec747 314 if(s){
Kazuki Yamamoto 5:07f7000ec747 315 dev->stop();
Kazuki Yamamoto 11:0d8359a6e2c2 316 s = false;
Kazuki Yamamoto 5:07f7000ec747 317 }
Kazuki Yamamoto 11:0d8359a6e2c2 318 i = plength;
Kazuki Yamamoto 5:07f7000ec747 319 for(int j=0; j<length; j++) {
Kazuki Yamamoto 5:07f7000ec747 320 pc.printf("%02X,",send[j]);
Kazuki Yamamoto 5:07f7000ec747 321 }
Kazuki Yamamoto 5:07f7000ec747 322 pc.printf("ok\n\r");
Kazuki Yamamoto 5:07f7000ec747 323 break;
Kazuki Yamamoto 9:844e301ab0fd 324 }
Kazuki Yamamoto 13:aa9e9a6fcef9 325 case CMD_R:
Kazuki Yamamoto 9:844e301ab0fd 326 {
Kazuki Yamamoto 11:0d8359a6e2c2 327 length = plength - 2;
Kazuki Yamamoto 27:53a29982d658 328 if(length < 1){
Kazuki Yamamoto 16:ba11339fd9c6 329 pc.printf("bad packet! %d\n\r",length);
Kazuki Yamamoto 16:ba11339fd9c6 330 i = plength + 1;
Kazuki Yamamoto 16:ba11339fd9c6 331 length = 0;
Kazuki Yamamoto 16:ba11339fd9c6 332 }else{
Kazuki Yamamoto 16:ba11339fd9c6 333 for(int j=0; j<length; j++){
Kazuki Yamamoto 16:ba11339fd9c6 334 address = recieve[i+1+j];
Kazuki Yamamoto 16:ba11339fd9c6 335 switch(address){
Kazuki Yamamoto 16:ba11339fd9c6 336 case CHIP_ID:
Kazuki Yamamoto 16:ba11339fd9c6 337 {
Kazuki Yamamoto 16:ba11339fd9c6 338 data = chip_id;
Kazuki Yamamoto 22:946c08f6daff 339 break;
Kazuki Yamamoto 22:946c08f6daff 340 }
Kazuki Yamamoto 22:946c08f6daff 341 case GPIO0_STAT:
Kazuki Yamamoto 22:946c08f6daff 342 {
Kazuki Yamamoto 27:53a29982d658 343 for(int k=0; k<8; k++){
Kazuki Yamamoto 27:53a29982d658 344 _data = gpio0[k]->read();
Kazuki Yamamoto 27:53a29982d658 345 data |= (_data << k);
Kazuki Yamamoto 27:53a29982d658 346 }
Kazuki Yamamoto 27:53a29982d658 347 registers[GPIO0_STAT-'0'] = data;
Kazuki Yamamoto 16:ba11339fd9c6 348 break;
Kazuki Yamamoto 16:ba11339fd9c6 349 }
Kazuki Yamamoto 22:946c08f6daff 350 case GPIO0_CONF:
Kazuki Yamamoto 16:ba11339fd9c6 351 {
Kazuki Yamamoto 22:946c08f6daff 352 data = registers[GPIO0_CONF-'0'];
Kazuki Yamamoto 16:ba11339fd9c6 353 break;
Kazuki Yamamoto 16:ba11339fd9c6 354 }
Kazuki Yamamoto 27:53a29982d658 355 #ifndef QUAD_I2C
Kazuki Yamamoto 22:946c08f6daff 356 case GPIO1_STAT:
Kazuki Yamamoto 16:ba11339fd9c6 357 {
Kazuki Yamamoto 27:53a29982d658 358 for(int k=0; k<8; k++){
Kazuki Yamamoto 27:53a29982d658 359 _data = gpio1[k]->read();
Kazuki Yamamoto 27:53a29982d658 360 data |= (_data << k);
Kazuki Yamamoto 27:53a29982d658 361 }
Kazuki Yamamoto 27:53a29982d658 362 registers[GPIO1_STAT-'0'] = data;
Kazuki Yamamoto 22:946c08f6daff 363 break;
Kazuki Yamamoto 22:946c08f6daff 364 }
Kazuki Yamamoto 22:946c08f6daff 365 case GPIO1_CONF:
Kazuki Yamamoto 22:946c08f6daff 366 {
Kazuki Yamamoto 22:946c08f6daff 367 data = registers[GPIO1_CONF-'0'];
Kazuki Yamamoto 16:ba11339fd9c6 368 break;
Kazuki Yamamoto 16:ba11339fd9c6 369 }
Kazuki Yamamoto 27:53a29982d658 370 #endif
Kazuki Yamamoto 16:ba11339fd9c6 371 default:
Kazuki Yamamoto 16:ba11339fd9c6 372 {
Kazuki Yamamoto 16:ba11339fd9c6 373 data = 0xAA;
Kazuki Yamamoto 16:ba11339fd9c6 374 break;
Kazuki Yamamoto 16:ba11339fd9c6 375 }
Kazuki Yamamoto 11:0d8359a6e2c2 376 }
Kazuki Yamamoto 16:ba11339fd9c6 377 send[j] = (char)data;
Kazuki Yamamoto 27:53a29982d658 378 data=0;
Kazuki Yamamoto 11:0d8359a6e2c2 379 }
Kazuki Yamamoto 16:ba11339fd9c6 380 i += (length+1);
Kazuki Yamamoto 11:0d8359a6e2c2 381 }
Kazuki Yamamoto 5:07f7000ec747 382 break;
Kazuki Yamamoto 9:844e301ab0fd 383 }
Kazuki Yamamoto 13:aa9e9a6fcef9 384 case CMD_W:
Kazuki Yamamoto 9:844e301ab0fd 385 {
Kazuki Yamamoto 11:0d8359a6e2c2 386 length = plength - 2;
Kazuki Yamamoto 11:0d8359a6e2c2 387 if(length < 3){
Kazuki Yamamoto 11:0d8359a6e2c2 388 pc.printf("bad packet! %d\n\r",length);
Kazuki Yamamoto 11:0d8359a6e2c2 389 i = plength + 1;
Kazuki Yamamoto 16:ba11339fd9c6 390 length = 0;
Kazuki Yamamoto 11:0d8359a6e2c2 391 }else{
Kazuki Yamamoto 11:0d8359a6e2c2 392 for(int j=0; j<length; j+=3){
Kazuki Yamamoto 11:0d8359a6e2c2 393 address = recieve[i+1+j];
Kazuki Yamamoto 15:98ec6b372a2b 394 data = 0xff & (recieve[i+2+j] << 4 | (recieve[i+3+j] & 0x0F));
Kazuki Yamamoto 27:53a29982d658 395 _data = 0;
Kazuki Yamamoto 11:0d8359a6e2c2 396 switch(address){
Kazuki Yamamoto 11:0d8359a6e2c2 397 case CHIP_ID:
Kazuki Yamamoto 11:0d8359a6e2c2 398 {
Kazuki Yamamoto 11:0d8359a6e2c2 399 //READ ONLY: do nothing
Kazuki Yamamoto 16:ba11339fd9c6 400 data = registers[CHIP_ID-'0'];
Kazuki Yamamoto 11:0d8359a6e2c2 401 break;
Kazuki Yamamoto 11:0d8359a6e2c2 402 }
Kazuki Yamamoto 22:946c08f6daff 403 case GPIO0_STAT:
Kazuki Yamamoto 11:0d8359a6e2c2 404 {
Kazuki Yamamoto 27:53a29982d658 405 _data = registers[GPIO0_CONF-'0'];
Kazuki Yamamoto 27:53a29982d658 406 for(int k=0; k<8; k++){
Kazuki Yamamoto 27:53a29982d658 407 if(_data&0x01){ // output
Kazuki Yamamoto 27:53a29982d658 408 gpio0[k]->write((data>>k)&0x01);
Kazuki Yamamoto 27:53a29982d658 409 }else{ // input
Kazuki Yamamoto 27:53a29982d658 410 ; // do nothing
Kazuki Yamamoto 27:53a29982d658 411 }
Kazuki Yamamoto 27:53a29982d658 412 _data >>= 1;
Kazuki Yamamoto 27:53a29982d658 413 }
Kazuki Yamamoto 11:0d8359a6e2c2 414 break;
Kazuki Yamamoto 11:0d8359a6e2c2 415 }
Kazuki Yamamoto 22:946c08f6daff 416 case GPIO0_CONF:
Kazuki Yamamoto 11:0d8359a6e2c2 417 {
Kazuki Yamamoto 22:946c08f6daff 418 registers[GPIO0_CONF-'0'] = data;
Kazuki Yamamoto 16:ba11339fd9c6 419 for(int k=0; k<8; k++){
Kazuki Yamamoto 16:ba11339fd9c6 420 if(data&0x01){//output
Kazuki Yamamoto 18:e3286a42cf0e 421 gpio0[k]->output();
Kazuki Yamamoto 16:ba11339fd9c6 422 }else{//input
Kazuki Yamamoto 18:e3286a42cf0e 423 gpio0[k]->input();
Kazuki Yamamoto 18:e3286a42cf0e 424 gpio0[k]->mode(PullUp);
Kazuki Yamamoto 16:ba11339fd9c6 425 }
Kazuki Yamamoto 16:ba11339fd9c6 426 data >>= 1;
Kazuki Yamamoto 16:ba11339fd9c6 427 }
Kazuki Yamamoto 22:946c08f6daff 428 data = registers[GPIO0_CONF-'0'];
Kazuki Yamamoto 22:946c08f6daff 429 break;
Kazuki Yamamoto 22:946c08f6daff 430 }
Kazuki Yamamoto 27:53a29982d658 431 #ifndef QUAD_I2C
Kazuki Yamamoto 22:946c08f6daff 432 case GPIO1_STAT:
Kazuki Yamamoto 22:946c08f6daff 433 {
Kazuki Yamamoto 27:53a29982d658 434 _data = registers[GPIO1_CONF-'0'];
Kazuki Yamamoto 27:53a29982d658 435 for(int k=0; k<8; k++){
Kazuki Yamamoto 27:53a29982d658 436 if(_data&0x01){ // output
Kazuki Yamamoto 27:53a29982d658 437 gpio1[k]->write((data>>k)&0x01);
Kazuki Yamamoto 27:53a29982d658 438 }else{ // input
Kazuki Yamamoto 27:53a29982d658 439 ; // do nothing
Kazuki Yamamoto 27:53a29982d658 440 }
Kazuki Yamamoto 27:53a29982d658 441 _data >>= 1;
Kazuki Yamamoto 27:53a29982d658 442 }
Kazuki Yamamoto 22:946c08f6daff 443 break;
Kazuki Yamamoto 22:946c08f6daff 444 }
Kazuki Yamamoto 22:946c08f6daff 445 case GPIO1_CONF:
Kazuki Yamamoto 22:946c08f6daff 446 {
Kazuki Yamamoto 22:946c08f6daff 447 registers[GPIO1_CONF-'0'] = data;
Kazuki Yamamoto 22:946c08f6daff 448 for(int k=0; k<6; k++){
Kazuki Yamamoto 22:946c08f6daff 449 if(data&0x01){//output
Kazuki Yamamoto 22:946c08f6daff 450 gpio1[k]->output();
Kazuki Yamamoto 22:946c08f6daff 451 }else{//input
Kazuki Yamamoto 22:946c08f6daff 452 gpio1[k]->input();
Kazuki Yamamoto 22:946c08f6daff 453 gpio1[k]->mode(PullUp);
Kazuki Yamamoto 22:946c08f6daff 454 }
Kazuki Yamamoto 22:946c08f6daff 455 data >>= 1;
Kazuki Yamamoto 22:946c08f6daff 456 }
Kazuki Yamamoto 22:946c08f6daff 457 data = registers[GPIO1_CONF-'0'];
Kazuki Yamamoto 11:0d8359a6e2c2 458 break;
Kazuki Yamamoto 11:0d8359a6e2c2 459 }
Kazuki Yamamoto 27:53a29982d658 460 #endif
Kazuki Yamamoto 11:0d8359a6e2c2 461 default:
Kazuki Yamamoto 11:0d8359a6e2c2 462 {
Kazuki Yamamoto 11:0d8359a6e2c2 463 break;
Kazuki Yamamoto 11:0d8359a6e2c2 464 }
Kazuki Yamamoto 11:0d8359a6e2c2 465 }
Kazuki Yamamoto 27:53a29982d658 466 send[j/3] = data;
Kazuki Yamamoto 11:0d8359a6e2c2 467 }
Kazuki Yamamoto 27:53a29982d658 468 i += (length+1);
Kazuki Yamamoto 16:ba11339fd9c6 469 length /= 3;
Kazuki Yamamoto 11:0d8359a6e2c2 470 }
Kazuki Yamamoto 9:844e301ab0fd 471 break;
Kazuki Yamamoto 9:844e301ab0fd 472 }
Kazuki Yamamoto 13:aa9e9a6fcef9 473 case CMD_I:
Kazuki Yamamoto 9:844e301ab0fd 474 {
Kazuki Yamamoto 18:e3286a42cf0e 475 length = plength - 2;
Kazuki Yamamoto 27:53a29982d658 476 if(length < 1){
Kazuki Yamamoto 18:e3286a42cf0e 477 pc.printf("bad packet! %d\n\r",length);
Kazuki Yamamoto 18:e3286a42cf0e 478 i = plength + 1;
Kazuki Yamamoto 18:e3286a42cf0e 479 length = 0;
Kazuki Yamamoto 18:e3286a42cf0e 480 }else{
Kazuki Yamamoto 27:53a29982d658 481 for(int j=0; j<length; j++){
Kazuki Yamamoto 27:53a29982d658 482 address = recieve[i+1+j];
Kazuki Yamamoto 27:53a29982d658 483 _data=0;
Kazuki Yamamoto 27:53a29982d658 484 switch(address){
Kazuki Yamamoto 27:53a29982d658 485 case GPIO0_STAT:
Kazuki Yamamoto 27:53a29982d658 486 {
Kazuki Yamamoto 27:53a29982d658 487 for(int k=0; k<8; k++){
Kazuki Yamamoto 27:53a29982d658 488 _data = gpio0[k]->read();
Kazuki Yamamoto 27:53a29982d658 489 data |= (_data << k);
Kazuki Yamamoto 27:53a29982d658 490 }
Kazuki Yamamoto 27:53a29982d658 491 registers[GPIO0_STAT-'0'] = data;
Kazuki Yamamoto 27:53a29982d658 492 break;
Kazuki Yamamoto 27:53a29982d658 493 }
Kazuki Yamamoto 27:53a29982d658 494 #ifndef QUAD_I2C
Kazuki Yamamoto 27:53a29982d658 495 case GPIO1_STAT:
Kazuki Yamamoto 27:53a29982d658 496 {
Kazuki Yamamoto 27:53a29982d658 497 for(int k=0; k<8; k++){
Kazuki Yamamoto 27:53a29982d658 498 _data = gpio1[k]->read();
Kazuki Yamamoto 27:53a29982d658 499 data |= (_data << k);
Kazuki Yamamoto 27:53a29982d658 500 }
Kazuki Yamamoto 27:53a29982d658 501 registers[GPIO1_STAT-'0'] = data;
Kazuki Yamamoto 27:53a29982d658 502 break;
Kazuki Yamamoto 27:53a29982d658 503 }
Kazuki Yamamoto 27:53a29982d658 504 #endif
Kazuki Yamamoto 27:53a29982d658 505 default:
Kazuki Yamamoto 27:53a29982d658 506 {
Kazuki Yamamoto 27:53a29982d658 507 data = 0xAA;
Kazuki Yamamoto 27:53a29982d658 508 break;
Kazuki Yamamoto 27:53a29982d658 509 }
Kazuki Yamamoto 27:53a29982d658 510 }
Kazuki Yamamoto 27:53a29982d658 511 send[j] = (char)data;
Kazuki Yamamoto 27:53a29982d658 512 data = 0;
Kazuki Yamamoto 18:e3286a42cf0e 513 }
Kazuki Yamamoto 27:53a29982d658 514 i += (length+1);
Kazuki Yamamoto 18:e3286a42cf0e 515 }
Kazuki Yamamoto 5:07f7000ec747 516 break;
Kazuki Yamamoto 9:844e301ab0fd 517 }
Kazuki Yamamoto 13:aa9e9a6fcef9 518 case CMD_O:
Kazuki Yamamoto 9:844e301ab0fd 519 {
Kazuki Yamamoto 18:e3286a42cf0e 520 length = plength - 2;
Kazuki Yamamoto 27:53a29982d658 521 if(length < 3){
Kazuki Yamamoto 18:e3286a42cf0e 522 pc.printf("bad packet! %d\n\r",length);
Kazuki Yamamoto 18:e3286a42cf0e 523 i = plength + 1;
Kazuki Yamamoto 18:e3286a42cf0e 524 length = 0;
Kazuki Yamamoto 18:e3286a42cf0e 525 }else{
Kazuki Yamamoto 27:53a29982d658 526 for(int j=0; j<length; j+=3){
Kazuki Yamamoto 27:53a29982d658 527 address = recieve[i+1+j];
Kazuki Yamamoto 27:53a29982d658 528 data = 0xff & (recieve[i+2+j] << 4 | (recieve[i+3+j] & 0x0F));
Kazuki Yamamoto 27:53a29982d658 529 switch(address){
Kazuki Yamamoto 27:53a29982d658 530 case GPIO0_STAT:
Kazuki Yamamoto 27:53a29982d658 531 {
Kazuki Yamamoto 27:53a29982d658 532 _data = registers[GPIO0_CONF-'0'];
Kazuki Yamamoto 27:53a29982d658 533 for(int k=0; k<8; k++){
Kazuki Yamamoto 27:53a29982d658 534 if(_data&0x01){ // output
Kazuki Yamamoto 27:53a29982d658 535 gpio0[k]->write(data&0x01);
Kazuki Yamamoto 27:53a29982d658 536 }else{ // input
Kazuki Yamamoto 27:53a29982d658 537 ; // do nothing
Kazuki Yamamoto 27:53a29982d658 538 }
Kazuki Yamamoto 27:53a29982d658 539 data >>= 1;
Kazuki Yamamoto 27:53a29982d658 540 _data >>= 1;
Kazuki Yamamoto 27:53a29982d658 541 }
Kazuki Yamamoto 27:53a29982d658 542 break;
Kazuki Yamamoto 27:53a29982d658 543 }
Kazuki Yamamoto 27:53a29982d658 544 #ifndef QUAD_I2C
Kazuki Yamamoto 27:53a29982d658 545 case GPIO1_STAT:
Kazuki Yamamoto 27:53a29982d658 546 {
Kazuki Yamamoto 27:53a29982d658 547 _data = registers[GPIO1_CONF-'0'];
Kazuki Yamamoto 27:53a29982d658 548 for(int k=0; k<8; k++){
Kazuki Yamamoto 27:53a29982d658 549 if(_data&0x01){ // output
Kazuki Yamamoto 27:53a29982d658 550 gpio1[k]->write(data&0x01);
Kazuki Yamamoto 27:53a29982d658 551 }else{ // input
Kazuki Yamamoto 27:53a29982d658 552 ; // do nothing
Kazuki Yamamoto 27:53a29982d658 553 }
Kazuki Yamamoto 27:53a29982d658 554 data >>= 1;
Kazuki Yamamoto 27:53a29982d658 555 _data >>= 1;
Kazuki Yamamoto 27:53a29982d658 556 }
Kazuki Yamamoto 27:53a29982d658 557 break;
Kazuki Yamamoto 27:53a29982d658 558 }
Kazuki Yamamoto 27:53a29982d658 559 #endif
Kazuki Yamamoto 27:53a29982d658 560 default:
Kazuki Yamamoto 27:53a29982d658 561 {
Kazuki Yamamoto 27:53a29982d658 562 break;
Kazuki Yamamoto 27:53a29982d658 563 }
Kazuki Yamamoto 18:e3286a42cf0e 564 }
Kazuki Yamamoto 27:53a29982d658 565 send[j/3] = data;
Kazuki Yamamoto 18:e3286a42cf0e 566 }
Kazuki Yamamoto 18:e3286a42cf0e 567 }
Kazuki Yamamoto 27:53a29982d658 568 i += (length+1);
Kazuki Yamamoto 27:53a29982d658 569 length /= 3;
Kazuki Yamamoto 18:e3286a42cf0e 570 // pc.printf("command O is not implemented, ");
Kazuki Yamamoto 5:07f7000ec747 571 break;
Kazuki Yamamoto 9:844e301ab0fd 572 }
Kazuki Yamamoto 9:844e301ab0fd 573 case 'Z':
Kazuki Yamamoto 9:844e301ab0fd 574 {
Kazuki Yamamoto 9:844e301ab0fd 575 pc.printf("command Z is not implemented\n\r");
Kazuki Yamamoto 5:07f7000ec747 576 i=plength;
Kazuki Yamamoto 5:07f7000ec747 577 break;
Kazuki Yamamoto 9:844e301ab0fd 578 }
Kazuki Yamamoto 9:844e301ab0fd 579 case 'E':
Kazuki Yamamoto 9:844e301ab0fd 580 {
Kazuki Yamamoto 9:844e301ab0fd 581 pc.printf("command E is not implemented\n\r");
Kazuki Yamamoto 5:07f7000ec747 582 i=plength;
Kazuki Yamamoto 5:07f7000ec747 583 break;
Kazuki Yamamoto 9:844e301ab0fd 584 }
Kazuki Yamamoto 9:844e301ab0fd 585 case 'V':
Kazuki Yamamoto 9:844e301ab0fd 586 {
Kazuki Yamamoto 9:844e301ab0fd 587 pc.printf("command V is not implemented\n\r");
Kazuki Yamamoto 5:07f7000ec747 588 i=plength;
Kazuki Yamamoto 5:07f7000ec747 589 break;
Kazuki Yamamoto 9:844e301ab0fd 590 }
Kazuki Yamamoto 9:844e301ab0fd 591 default:
Kazuki Yamamoto 9:844e301ab0fd 592 {
Kazuki Yamamoto 16:ba11339fd9c6 593 pc.printf("command %c is not implemented\n\r", recieve[i]);
Kazuki Yamamoto 9:844e301ab0fd 594 i=plength;
Kazuki Yamamoto 9:844e301ab0fd 595 break;
Kazuki Yamamoto 9:844e301ab0fd 596 }
Kazuki Yamamoto 5:07f7000ec747 597 }
Kazuki Yamamoto 5:07f7000ec747 598 }
Kazuki Yamamoto 5:07f7000ec747 599 i=0;
Kazuki Yamamoto 5:07f7000ec747 600 length=0;
Kazuki Yamamoto 5:07f7000ec747 601 }
Kazuki Yamamoto 5:07f7000ec747 602 }