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.
LPC824/main.cpp@12:db621ae6a076, 2014-12-05 (annotated)
- Committer:
- Kazuki Yamamoto
- Date:
- Fri Dec 05 17:34:37 2014 +0900
- Revision:
- 12:db621ae6a076
- Parent:
- 11:0d8359a6e2c2
- Child:
- 13:aa9e9a6fcef9
[ LPC824 ] R command fix
Who changed what in which revision?
User | Revision | Line number | New 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 | I2C dev2(P0_6, P0_14);//6,14 |
Kazuki Yamamoto |
9:844e301ab0fd | 9 | I2C dev3(P0_23, P0_22);//23,22 |
Kazuki Yamamoto |
9:844e301ab0fd | 10 | I2C dev4(P0_21, P0_20);//21,20 |
Kazuki Yamamoto |
9:844e301ab0fd | 11 | |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 12 | /* |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 13 | DigitalInOut _GPIO0(D0); |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 14 | DigitalInOut _GPIO1(D1); |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 15 | DigitalInOut _GPIO2(D2); |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 16 | DigitalInOut _GPIO3(D3); |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 17 | DigitalInOut _GPIO4(D4); |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 18 | DigitalInOut _GPIO5(D5); |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 19 | DigitalInOut _GPIO6(D6); |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 20 | DigitalInOut _GPIO7(D7); |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 21 | */ |
Kazuki Yamamoto |
5:07f7000ec747 | 22 | |
Kazuki Yamamoto |
5:07f7000ec747 | 23 | //Table 3. ASCII commands supported by SC18IM700 |
Kazuki Yamamoto |
5:07f7000ec747 | 24 | //ASCII command Hex value Command function |
Kazuki Yamamoto |
5:07f7000ec747 | 25 | //[X] S 0x53 I2C-bus START |
Kazuki Yamamoto |
5:07f7000ec747 | 26 | //[X] P 0x50 I2C-bus STOP |
Kazuki Yamamoto |
9:844e301ab0fd | 27 | //[?] R 0x52 read SC18IM700 internal register |
Kazuki Yamamoto |
9:844e301ab0fd | 28 | //[?] W 0x57 write to SC18IM700 internal register |
Kazuki Yamamoto |
9:844e301ab0fd | 29 | //[?] I 0x49 read GPIO port |
Kazuki Yamamoto |
9:844e301ab0fd | 30 | //[?] O 0x4F write to GPIO port |
Kazuki Yamamoto |
5:07f7000ec747 | 31 | //[_] Z 0x5A power down |
Kazuki Yamamoto |
5:07f7000ec747 | 32 | //[X] C 0x43 change channel |
Kazuki Yamamoto |
9:844e301ab0fd | 33 | //[_] E 0x45 enable chip |
Kazuki Yamamoto |
9:844e301ab0fd | 34 | //[_] V 0x__ enable VDDIO output to chip |
Kazuki Yamamoto |
5:07f7000ec747 | 35 | |
Kazuki Yamamoto |
12:db621ae6a076 | 36 | /** |
Kazuki Yamamoto |
12:db621ae6a076 | 37 | "C| '0'| P" |
Kazuki Yamamoto |
12:db621ae6a076 | 38 | "C| '1'| P" |
Kazuki Yamamoto |
12:db621ae6a076 | 39 | "C| '2'| P" |
Kazuki Yamamoto |
12:db621ae6a076 | 40 | "C| '3'| P" |
Kazuki Yamamoto |
12:db621ae6a076 | 41 | "S| 0x_8 _0| 0x_0 _4| 0x_D _E _A _D _B _E _A _F| P" |
Kazuki Yamamoto |
12:db621ae6a076 | 42 | "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 | 43 | "S| 0x_8 _1| 0x_0 _4| P" |
Kazuki Yamamoto |
12:db621ae6a076 | 44 | "R| '0'| P" |
Kazuki Yamamoto |
12:db621ae6a076 | 45 | "R| '0'| '1'| ...| P" |
Kazuki Yamamoto |
12:db621ae6a076 | 46 | "W| '0' 0x_a _a| P" |
Kazuki Yamamoto |
12:db621ae6a076 | 47 | "W| '0' 0x_a _a| '1' 0x_b _b| ...| P" |
Kazuki Yamamoto |
12:db621ae6a076 | 48 | "I| P" |
Kazuki Yamamoto |
12:db621ae6a076 | 49 | "O| 0x_a _a| P" |
Kazuki Yamamoto |
12:db621ae6a076 | 50 | */ |
Kazuki Yamamoto |
5:07f7000ec747 | 51 | int main() |
Kazuki Yamamoto |
5:07f7000ec747 | 52 | { |
Kazuki Yamamoto |
5:07f7000ec747 | 53 | I2C* dev=&dev1; |
Kazuki Yamamoto |
5:07f7000ec747 | 54 | pc.baud(115200); |
Kazuki Yamamoto |
9:844e301ab0fd | 55 | |
Kazuki Yamamoto |
9:844e301ab0fd | 56 | LPC_IOCON->PIO0_11 &= ~(0x02<<8); |
Kazuki Yamamoto |
9:844e301ab0fd | 57 | LPC_IOCON->PIO0_11 |= (0x02<<8); |
Kazuki Yamamoto |
9:844e301ab0fd | 58 | LPC_IOCON->PIO0_10 &= ~(0x02<<8); |
Kazuki Yamamoto |
9:844e301ab0fd | 59 | LPC_IOCON->PIO0_10 |= (0x02<<8); |
Kazuki Yamamoto |
5:07f7000ec747 | 60 | |
Kazuki Yamamoto |
9:844e301ab0fd | 61 | bool s = false; |
Kazuki Yamamoto |
9:844e301ab0fd | 62 | dev1.frequency(800000);//800k not work at 1M? too large pullup? |
Kazuki Yamamoto |
9:844e301ab0fd | 63 | dev2.frequency(400000);//400k |
Kazuki Yamamoto |
9:844e301ab0fd | 64 | dev3.frequency(400000);//400k |
Kazuki Yamamoto |
9:844e301ab0fd | 65 | dev4.frequency(400000);//400k |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 66 | /* |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 67 | DigitalInOut* gpio[]={ |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 68 | &_GPIO0, |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 69 | &_GPIO1, |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 70 | &_GPIO2, |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 71 | &_GPIO3, |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 72 | &_GPIO4, |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 73 | &_GPIO5, |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 74 | &_GPIO6, |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 75 | &_GPIO7, |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 76 | }; |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 77 | */ |
Kazuki Yamamoto |
12:db621ae6a076 | 78 | int ack = 0; |
Kazuki Yamamoto |
12:db621ae6a076 | 79 | int plength = 0; |
Kazuki Yamamoto |
12:db621ae6a076 | 80 | char recieve[] = { |
Kazuki Yamamoto |
12:db621ae6a076 | 81 | 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0, |
Kazuki Yamamoto |
12:db621ae6a076 | 82 | 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0, |
Kazuki Yamamoto |
12:db621ae6a076 | 83 | 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0, |
Kazuki Yamamoto |
12:db621ae6a076 | 84 | 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0, |
Kazuki Yamamoto |
12:db621ae6a076 | 85 | 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0, |
Kazuki Yamamoto |
12:db621ae6a076 | 86 | 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0, |
Kazuki Yamamoto |
12:db621ae6a076 | 87 | 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0, |
Kazuki Yamamoto |
12:db621ae6a076 | 88 | 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0, |
Kazuki Yamamoto |
12:db621ae6a076 | 89 | 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0, |
Kazuki Yamamoto |
12:db621ae6a076 | 90 | 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0, |
Kazuki Yamamoto |
12:db621ae6a076 | 91 | 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0, |
Kazuki Yamamoto |
12:db621ae6a076 | 92 | 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0, |
Kazuki Yamamoto |
12:db621ae6a076 | 93 | 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0, |
Kazuki Yamamoto |
12:db621ae6a076 | 94 | 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0, |
Kazuki Yamamoto |
12:db621ae6a076 | 95 | 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0, |
Kazuki Yamamoto |
12:db621ae6a076 | 96 | 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0, |
Kazuki Yamamoto |
12:db621ae6a076 | 97 | }; |
Kazuki Yamamoto |
12:db621ae6a076 | 98 | char send[] = { |
Kazuki Yamamoto |
12:db621ae6a076 | 99 | 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0, |
Kazuki Yamamoto |
12:db621ae6a076 | 100 | 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0, |
Kazuki Yamamoto |
12:db621ae6a076 | 101 | 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0, |
Kazuki Yamamoto |
12:db621ae6a076 | 102 | 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0, |
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 | }; |
Kazuki Yamamoto |
12:db621ae6a076 | 116 | |
Kazuki Yamamoto |
12:db621ae6a076 | 117 | char read = 0; |
Kazuki Yamamoto |
12:db621ae6a076 | 118 | int address = 0; |
Kazuki Yamamoto |
12:db621ae6a076 | 119 | int data = 0; |
Kazuki Yamamoto |
12:db621ae6a076 | 120 | int _data = 0; |
Kazuki Yamamoto |
12:db621ae6a076 | 121 | int length = 0; |
Kazuki Yamamoto |
12:db621ae6a076 | 122 | int channel = 0; |
Kazuki Yamamoto |
12:db621ae6a076 | 123 | bool CE = false; |
Kazuki Yamamoto |
9:844e301ab0fd | 124 | enum channel_e { |
Kazuki Yamamoto |
9:844e301ab0fd | 125 | CH0 = '0', |
Kazuki Yamamoto |
9:844e301ab0fd | 126 | CH1 = '1', |
Kazuki Yamamoto |
9:844e301ab0fd | 127 | CH2 = '2', |
Kazuki Yamamoto |
9:844e301ab0fd | 128 | CH3 = '3', |
Kazuki Yamamoto |
5:07f7000ec747 | 129 | }; |
Kazuki Yamamoto |
9:844e301ab0fd | 130 | enum register_e { |
Kazuki Yamamoto |
12:db621ae6a076 | 131 | CHIP_ID = '0', |
Kazuki Yamamoto |
9:844e301ab0fd | 132 | GPIO_STAT = '1', |
Kazuki Yamamoto |
9:844e301ab0fd | 133 | GPIO_CONF = '2', |
Kazuki Yamamoto |
9:844e301ab0fd | 134 | }; |
Kazuki Yamamoto |
9:844e301ab0fd | 135 | enum chipID_e { |
Kazuki Yamamoto |
9:844e301ab0fd | 136 | ID_LPC824 = '0', |
Kazuki Yamamoto |
9:844e301ab0fd | 137 | ID_LPC1768 = '1', |
Kazuki Yamamoto |
9:844e301ab0fd | 138 | ID_LPC11UXX = '2', |
Kazuki Yamamoto |
9:844e301ab0fd | 139 | }; |
Kazuki Yamamoto |
9:844e301ab0fd | 140 | uint8_t chip_id=ID_LPC824; |
Kazuki Yamamoto |
9:844e301ab0fd | 141 | uint8_t registers[]={ |
Kazuki Yamamoto |
9:844e301ab0fd | 142 | chip_id, |
Kazuki Yamamoto |
12:db621ae6a076 | 143 | 0x00, |
Kazuki Yamamoto |
12:db621ae6a076 | 144 | 0x00, |
Kazuki Yamamoto |
12:db621ae6a076 | 145 | // 0b00000000, // all 0 |
Kazuki Yamamoto |
12:db621ae6a076 | 146 | // 0b00000000, // all input |
Kazuki Yamamoto |
9:844e301ab0fd | 147 | }; |
Kazuki Yamamoto |
9:844e301ab0fd | 148 | |
Kazuki Yamamoto |
5:07f7000ec747 | 149 | int i=0; |
Kazuki Yamamoto |
5:07f7000ec747 | 150 | while(1) { |
Kazuki Yamamoto |
12:db621ae6a076 | 151 | i=0; |
Kazuki Yamamoto |
12:db621ae6a076 | 152 | length=0; |
Kazuki Yamamoto |
5:07f7000ec747 | 153 | while(true) { |
Kazuki Yamamoto |
5:07f7000ec747 | 154 | read=pc.getc(); |
Kazuki Yamamoto |
5:07f7000ec747 | 155 | recieve[i]=read; |
Kazuki Yamamoto |
5:07f7000ec747 | 156 | i++; |
Kazuki Yamamoto |
5:07f7000ec747 | 157 | if(read == 'P') { |
Kazuki Yamamoto |
5:07f7000ec747 | 158 | plength=i; |
Kazuki Yamamoto |
5:07f7000ec747 | 159 | break; |
Kazuki Yamamoto |
5:07f7000ec747 | 160 | } |
Kazuki Yamamoto |
5:07f7000ec747 | 161 | } |
Kazuki Yamamoto |
5:07f7000ec747 | 162 | i=0; |
Kazuki Yamamoto |
9:844e301ab0fd | 163 | while(i < plength) { |
Kazuki Yamamoto |
5:07f7000ec747 | 164 | switch(recieve[i]) { |
Kazuki Yamamoto |
5:07f7000ec747 | 165 | case 'C': |
Kazuki Yamamoto |
5:07f7000ec747 | 166 | { |
Kazuki Yamamoto |
5:07f7000ec747 | 167 | channel=recieve[i+1]; |
Kazuki Yamamoto |
5:07f7000ec747 | 168 | switch(channel) { |
Kazuki Yamamoto |
9:844e301ab0fd | 169 | case CH0: |
Kazuki Yamamoto |
5:07f7000ec747 | 170 | { |
Kazuki Yamamoto |
5:07f7000ec747 | 171 | channel='0'; |
Kazuki Yamamoto |
5:07f7000ec747 | 172 | dev=&dev1; |
Kazuki Yamamoto |
5:07f7000ec747 | 173 | break; |
Kazuki Yamamoto |
5:07f7000ec747 | 174 | } |
Kazuki Yamamoto |
9:844e301ab0fd | 175 | case CH1: |
Kazuki Yamamoto |
5:07f7000ec747 | 176 | { |
Kazuki Yamamoto |
5:07f7000ec747 | 177 | channel='1'; |
Kazuki Yamamoto |
5:07f7000ec747 | 178 | dev=&dev2; |
Kazuki Yamamoto |
5:07f7000ec747 | 179 | break; |
Kazuki Yamamoto |
5:07f7000ec747 | 180 | } |
Kazuki Yamamoto |
9:844e301ab0fd | 181 | case CH2: |
Kazuki Yamamoto |
5:07f7000ec747 | 182 | { |
Kazuki Yamamoto |
5:07f7000ec747 | 183 | channel='2'; |
Kazuki Yamamoto |
5:07f7000ec747 | 184 | dev=&dev3; |
Kazuki Yamamoto |
5:07f7000ec747 | 185 | break; |
Kazuki Yamamoto |
5:07f7000ec747 | 186 | } |
Kazuki Yamamoto |
9:844e301ab0fd | 187 | case CH3: |
Kazuki Yamamoto |
5:07f7000ec747 | 188 | { |
Kazuki Yamamoto |
5:07f7000ec747 | 189 | channel='3'; |
Kazuki Yamamoto |
5:07f7000ec747 | 190 | dev=&dev4; |
Kazuki Yamamoto |
5:07f7000ec747 | 191 | break; |
Kazuki Yamamoto |
5:07f7000ec747 | 192 | } |
Kazuki Yamamoto |
5:07f7000ec747 | 193 | default: |
Kazuki Yamamoto |
5:07f7000ec747 | 194 | { |
Kazuki Yamamoto |
5:07f7000ec747 | 195 | channel='0'; |
Kazuki Yamamoto |
5:07f7000ec747 | 196 | dev=&dev1; |
Kazuki Yamamoto |
5:07f7000ec747 | 197 | break; |
Kazuki Yamamoto |
5:07f7000ec747 | 198 | } |
Kazuki Yamamoto |
5:07f7000ec747 | 199 | } |
Kazuki Yamamoto |
5:07f7000ec747 | 200 | i+=(2); |
Kazuki Yamamoto |
5:07f7000ec747 | 201 | break; |
Kazuki Yamamoto |
5:07f7000ec747 | 202 | } |
Kazuki Yamamoto |
5:07f7000ec747 | 203 | case 'S': |
Kazuki Yamamoto |
5:07f7000ec747 | 204 | { |
Kazuki Yamamoto |
9:844e301ab0fd | 205 | s = true; |
Kazuki Yamamoto |
9:844e301ab0fd | 206 | ack = plength - 2 - (i+1) + (recieve[i+2] & 0x01); |
Kazuki Yamamoto |
9:844e301ab0fd | 207 | if( ack >= 4){ //valid packet |
Kazuki Yamamoto |
9:844e301ab0fd | 208 | address = 0xff & (recieve[i+1] << 4 | (recieve[i+2] & 0x0F)); |
Kazuki Yamamoto |
9:844e301ab0fd | 209 | length = 0xff & (recieve[i+3] << 4 | (recieve[i+4] & 0x0F)); |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 210 | /* hidden |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 211 | dev->start(); |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 212 | ack=dev->write(address); |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 213 | */ |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 214 | if( (address&0x01)) {//read |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 215 | dev->read(address, send, length, false); //added |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 216 | s=false; //added |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 217 | /* hidden |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 218 | for(int j=0; j<length; j++) { |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 219 | send[j] = dev->read(1); |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 220 | } |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 221 | */ |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 222 | i+=(5); |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 223 | } else {//write |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 224 | for(int j=0; j < (length * 2); j+=2) { |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 225 | ack = dev->write( 0xff&(recieve[5+j] << 4 | (recieve[6+j] & 0x0F)) ); |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 226 | *(send+(j/2)) = ack; //added |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 227 | } |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 228 | dev->write(address, send, length, true); //added |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 229 | i+=(5 + length * 2); |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 230 | length=0; |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 231 | } |
Kazuki Yamamoto |
9:844e301ab0fd | 232 | }else{ |
Kazuki Yamamoto |
9:844e301ab0fd | 233 | pc.printf("bad packet! %d, %d, %02X, %d\n\r",plength,i,recieve[(i+2)]&0x0F,ack); |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 234 | i = plength; |
Kazuki Yamamoto |
5:07f7000ec747 | 235 | } |
Kazuki Yamamoto |
5:07f7000ec747 | 236 | break; |
Kazuki Yamamoto |
5:07f7000ec747 | 237 | } |
Kazuki Yamamoto |
5:07f7000ec747 | 238 | case 'P': |
Kazuki Yamamoto |
9:844e301ab0fd | 239 | { |
Kazuki Yamamoto |
5:07f7000ec747 | 240 | if(s){ |
Kazuki Yamamoto |
5:07f7000ec747 | 241 | dev->stop(); |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 242 | s = false; |
Kazuki Yamamoto |
5:07f7000ec747 | 243 | } |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 244 | i = plength; |
Kazuki Yamamoto |
5:07f7000ec747 | 245 | for(int j=0; j<length; j++) { |
Kazuki Yamamoto |
5:07f7000ec747 | 246 | pc.printf("%02X,",send[j]); |
Kazuki Yamamoto |
5:07f7000ec747 | 247 | } |
Kazuki Yamamoto |
5:07f7000ec747 | 248 | pc.printf("ok\n\r"); |
Kazuki Yamamoto |
5:07f7000ec747 | 249 | break; |
Kazuki Yamamoto |
9:844e301ab0fd | 250 | } |
Kazuki Yamamoto |
5:07f7000ec747 | 251 | case 'R': |
Kazuki Yamamoto |
9:844e301ab0fd | 252 | { |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 253 | length = plength - 2; |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 254 | for(int j=0; j<length; j++){ |
Kazuki Yamamoto |
12:db621ae6a076 | 255 | address = recieve[i+1+j]; |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 256 | switch(address){ |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 257 | case CHIP_ID: |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 258 | { |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 259 | *(send+j) = registers[CHIP_ID]; |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 260 | break; |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 261 | } |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 262 | case GPIO_STAT: |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 263 | { |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 264 | *(send+j) = registers[GPIO_STAT]; |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 265 | break; |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 266 | } |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 267 | case GPIO_CONF: |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 268 | { |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 269 | *(send+j) = registers[GPIO_CONF]; |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 270 | break; |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 271 | } |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 272 | default: |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 273 | { |
Kazuki Yamamoto |
12:db621ae6a076 | 274 | *(send+j) = 0xAA; |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 275 | break; |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 276 | } |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 277 | } |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 278 | } |
Kazuki Yamamoto |
12:db621ae6a076 | 279 | i += length+1; |
Kazuki Yamamoto |
12:db621ae6a076 | 280 | // pc.printf("command R is not implemented, "); |
Kazuki Yamamoto |
5:07f7000ec747 | 281 | break; |
Kazuki Yamamoto |
9:844e301ab0fd | 282 | } |
Kazuki Yamamoto |
5:07f7000ec747 | 283 | case 'W': |
Kazuki Yamamoto |
9:844e301ab0fd | 284 | { |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 285 | length = plength - 2; |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 286 | if(length < 3){ |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 287 | pc.printf("bad packet! %d\n\r",length); |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 288 | i = plength + 1; |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 289 | }else{ |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 290 | for(int j=0; j<length; j+=3){ |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 291 | address = recieve[i+1+j]; |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 292 | data = 0xff & (recieve[i+1+j] << 4 | (recieve[i+2+j] & 0x0F)); |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 293 | switch(address){ |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 294 | case CHIP_ID: |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 295 | { |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 296 | //READ ONLY: do nothing |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 297 | *(send+j) = registers[CHIP_ID]; |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 298 | break; |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 299 | } |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 300 | case GPIO_STAT: |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 301 | { |
Kazuki Yamamoto |
12:db621ae6a076 | 302 | //READ ONLY from this command: do nothing |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 303 | *(send+j) = registers[GPIO_STAT]; |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 304 | break; |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 305 | } |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 306 | case GPIO_CONF: |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 307 | { |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 308 | registers[GPIO_CONF] = data; |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 309 | *(send+j) = registers[GPIO_CONF]; |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 310 | break; |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 311 | } |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 312 | default: |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 313 | { |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 314 | break; |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 315 | } |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 316 | } |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 317 | } |
Kazuki Yamamoto |
11:0d8359a6e2c2 | 318 | } |
Kazuki Yamamoto |
12:db621ae6a076 | 319 | i += length+1; |
Kazuki Yamamoto |
12:db621ae6a076 | 320 | pc.printf("command W is not implemented, "); |
Kazuki Yamamoto |
9:844e301ab0fd | 321 | break; |
Kazuki Yamamoto |
9:844e301ab0fd | 322 | } |
Kazuki Yamamoto |
9:844e301ab0fd | 323 | case 'I': |
Kazuki Yamamoto |
9:844e301ab0fd | 324 | { |
Kazuki Yamamoto |
9:844e301ab0fd | 325 | pc.printf("command I is not implemented\n\r"); |
Kazuki Yamamoto |
5:07f7000ec747 | 326 | i=plength; |
Kazuki Yamamoto |
5:07f7000ec747 | 327 | break; |
Kazuki Yamamoto |
9:844e301ab0fd | 328 | } |
Kazuki Yamamoto |
9:844e301ab0fd | 329 | case 'O': |
Kazuki Yamamoto |
9:844e301ab0fd | 330 | { |
Kazuki Yamamoto |
9:844e301ab0fd | 331 | pc.printf("command O is not implemented\n\r"); |
Kazuki Yamamoto |
5:07f7000ec747 | 332 | i=plength; |
Kazuki Yamamoto |
5:07f7000ec747 | 333 | break; |
Kazuki Yamamoto |
9:844e301ab0fd | 334 | } |
Kazuki Yamamoto |
9:844e301ab0fd | 335 | case 'Z': |
Kazuki Yamamoto |
9:844e301ab0fd | 336 | { |
Kazuki Yamamoto |
9:844e301ab0fd | 337 | pc.printf("command Z is not implemented\n\r"); |
Kazuki Yamamoto |
5:07f7000ec747 | 338 | i=plength; |
Kazuki Yamamoto |
5:07f7000ec747 | 339 | break; |
Kazuki Yamamoto |
9:844e301ab0fd | 340 | } |
Kazuki Yamamoto |
9:844e301ab0fd | 341 | case 'E': |
Kazuki Yamamoto |
9:844e301ab0fd | 342 | { |
Kazuki Yamamoto |
9:844e301ab0fd | 343 | pc.printf("command E is not implemented\n\r"); |
Kazuki Yamamoto |
5:07f7000ec747 | 344 | i=plength; |
Kazuki Yamamoto |
5:07f7000ec747 | 345 | break; |
Kazuki Yamamoto |
9:844e301ab0fd | 346 | } |
Kazuki Yamamoto |
9:844e301ab0fd | 347 | case 'V': |
Kazuki Yamamoto |
9:844e301ab0fd | 348 | { |
Kazuki Yamamoto |
9:844e301ab0fd | 349 | pc.printf("command V is not implemented\n\r"); |
Kazuki Yamamoto |
5:07f7000ec747 | 350 | i=plength; |
Kazuki Yamamoto |
5:07f7000ec747 | 351 | break; |
Kazuki Yamamoto |
9:844e301ab0fd | 352 | } |
Kazuki Yamamoto |
9:844e301ab0fd | 353 | default: |
Kazuki Yamamoto |
9:844e301ab0fd | 354 | { |
Kazuki Yamamoto |
12:db621ae6a076 | 355 | pc.printf("command %s is not implemented\n\r", recieve[i]); |
Kazuki Yamamoto |
9:844e301ab0fd | 356 | i=plength; |
Kazuki Yamamoto |
9:844e301ab0fd | 357 | break; |
Kazuki Yamamoto |
9:844e301ab0fd | 358 | } |
Kazuki Yamamoto |
5:07f7000ec747 | 359 | } |
Kazuki Yamamoto |
5:07f7000ec747 | 360 | } |
Kazuki Yamamoto |
5:07f7000ec747 | 361 | i=0; |
Kazuki Yamamoto |
5:07f7000ec747 | 362 | length=0; |
Kazuki Yamamoto |
5:07f7000ec747 | 363 | } |
Kazuki Yamamoto |
5:07f7000ec747 | 364 | } |