Kazuki Yamamoto / Mbed 2 deprecated uart_i2c_conv

Dependencies:   mbed

Committer:
Kazuki Yamamoto
Date:
Wed Dec 10 19:08:55 2014 +0900
Revision:
18:e3286a42cf0e
Parent:
16:ba11339fd9c6
Child:
19:93814b431bf5
[ LPC824 ] I and O commands implemented

still need some tests with SSCI-LPC824 or else

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