AE11 GUI for PICO

Dependencies:   max32625pico USBDevice

Committer:
PowerIC
Date:
Thu Jun 25 17:25:24 2020 +0000
Revision:
0:a13d6826cf66
Initial_Upload

Who changed what in which revision?

UserRevisionLine numberNew contents of line
PowerIC 0:a13d6826cf66 1 #include "mbed.h"
PowerIC 0:a13d6826cf66 2 #include "i2c.h"
PowerIC 0:a13d6826cf66 3 //#include "mcp4728.h"
PowerIC 0:a13d6826cf66 4
PowerIC 0:a13d6826cf66 5 //-- PIN DEFINITIONS ----------------------------------------------------------------------------------
PowerIC 0:a13d6826cf66 6 I2C i2c1(P1_6, P1_7); // Enable I2C Master 1(SDA, SCL)
PowerIC 0:a13d6826cf66 7 //I2C i2c2(P5_7, P6_0); // Enable I2C Master 2(SDA, SCL)
PowerIC 0:a13d6826cf66 8
PowerIC 0:a13d6826cf66 9 //-- VARIABLES ----------------------------------------------------------------------------------------
PowerIC 0:a13d6826cf66 10 extern char I2C1_TXDATA[];
PowerIC 0:a13d6826cf66 11 extern char I2C1_RXDATA[];
PowerIC 0:a13d6826cf66 12 //extern char I2C2_TXDATA[];
PowerIC 0:a13d6826cf66 13 //extern char I2C2_RXDATA[];
PowerIC 0:a13d6826cf66 14
PowerIC 0:a13d6826cf66 15 void Init_I2C()
PowerIC 0:a13d6826cf66 16 {
PowerIC 0:a13d6826cf66 17 i2c1.frequency(400000); // Set I2C Bus = 400KHz
PowerIC 0:a13d6826cf66 18 //i2c2.frequency(400000); // Set I2C Bus = 400KHz
PowerIC 0:a13d6826cf66 19 }
PowerIC 0:a13d6826cf66 20
PowerIC 0:a13d6826cf66 21 char I2C_Quick_Write(char port, char address)
PowerIC 0:a13d6826cf66 22 {
PowerIC 0:a13d6826cf66 23 // Device present should respond with 0x01, otherwise 0x00
PowerIC 0:a13d6826cf66 24 char RESPONSE = 0x00;
PowerIC 0:a13d6826cf66 25 port = I2C_PORT1;
PowerIC 0:a13d6826cf66 26
PowerIC 0:a13d6826cf66 27 if(port == I2C_PORT2)
PowerIC 0:a13d6826cf66 28 {
PowerIC 0:a13d6826cf66 29 //i2c2.start();
PowerIC 0:a13d6826cf66 30 //RESPONSE = i2c2.write(address); // Echo ACK/NACK Status
PowerIC 0:a13d6826cf66 31 //i2c2.stop();
PowerIC 0:a13d6826cf66 32 }
PowerIC 0:a13d6826cf66 33 else
PowerIC 0:a13d6826cf66 34 {
PowerIC 0:a13d6826cf66 35 i2c1.start();
PowerIC 0:a13d6826cf66 36 RESPONSE = i2c1.write(address); // Echo ACK/NACK Status
PowerIC 0:a13d6826cf66 37 i2c1.stop();
PowerIC 0:a13d6826cf66 38 }
PowerIC 0:a13d6826cf66 39
PowerIC 0:a13d6826cf66 40 return RESPONSE;
PowerIC 0:a13d6826cf66 41 }
PowerIC 0:a13d6826cf66 42
PowerIC 0:a13d6826cf66 43 char I2C_Read_Byte(char port, char address, char reg)
PowerIC 0:a13d6826cf66 44 {
PowerIC 0:a13d6826cf66 45 char RESPONSE = 0x00;
PowerIC 0:a13d6826cf66 46 port = I2C_PORT1;
PowerIC 0:a13d6826cf66 47
PowerIC 0:a13d6826cf66 48 if(port == I2C_PORT2)
PowerIC 0:a13d6826cf66 49 {
PowerIC 0:a13d6826cf66 50 //I2C2_TXDATA[0] = reg; // Which register?
PowerIC 0:a13d6826cf66 51 //(void)i2c2.write(address, I2C2_TXDATA, 1, true);
PowerIC 0:a13d6826cf66 52 //(void)i2c2.read(address, I2C2_RXDATA, 1); // Ask for data
PowerIC 0:a13d6826cf66 53 //wait_us(25); // Wait for it
PowerIC 0:a13d6826cf66 54 //RESPONSE = I2C2_RXDATA[0]; // Return Data
PowerIC 0:a13d6826cf66 55 }
PowerIC 0:a13d6826cf66 56 else
PowerIC 0:a13d6826cf66 57 {
PowerIC 0:a13d6826cf66 58 I2C1_TXDATA[0] = reg; // Which register?
PowerIC 0:a13d6826cf66 59 (void)i2c1.write(address, I2C1_TXDATA, 1, true);
PowerIC 0:a13d6826cf66 60 (void)i2c1.read(address, I2C1_RXDATA, 1); // Ask for data
PowerIC 0:a13d6826cf66 61 wait_us(25); // Wait for it
PowerIC 0:a13d6826cf66 62 RESPONSE = I2C1_RXDATA[0]; // Return Data
PowerIC 0:a13d6826cf66 63 }
PowerIC 0:a13d6826cf66 64
PowerIC 0:a13d6826cf66 65 return RESPONSE;
PowerIC 0:a13d6826cf66 66 }
PowerIC 0:a13d6826cf66 67
PowerIC 0:a13d6826cf66 68 char I2C_Write_Register(char port, char address, char reg, char data)
PowerIC 0:a13d6826cf66 69 {
PowerIC 0:a13d6826cf66 70 char RESPONSE = 0x00;
PowerIC 0:a13d6826cf66 71 port = I2C_PORT1;
PowerIC 0:a13d6826cf66 72
PowerIC 0:a13d6826cf66 73 if(port == I2C_PORT2)
PowerIC 0:a13d6826cf66 74 {
PowerIC 0:a13d6826cf66 75 //I2C2_TXDATA[0] = reg; // Register
PowerIC 0:a13d6826cf66 76 //I2C2_TXDATA[1] = data; // Data
PowerIC 0:a13d6826cf66 77 //RESPONSE = i2c2.write(address,I2C2_TXDATA,2); // Echo ACK/NACK
PowerIC 0:a13d6826cf66 78 }
PowerIC 0:a13d6826cf66 79 else
PowerIC 0:a13d6826cf66 80 {
PowerIC 0:a13d6826cf66 81 I2C1_TXDATA[0] = reg; // Register
PowerIC 0:a13d6826cf66 82 I2C1_TXDATA[1] = data; // Data
PowerIC 0:a13d6826cf66 83 RESPONSE = i2c1.write(address,I2C1_TXDATA,2); // Echo ACK/NACK
PowerIC 0:a13d6826cf66 84 }
PowerIC 0:a13d6826cf66 85
PowerIC 0:a13d6826cf66 86 return RESPONSE;
PowerIC 0:a13d6826cf66 87 }
PowerIC 0:a13d6826cf66 88
PowerIC 0:a13d6826cf66 89 unsigned short I2C_Read_Word(char port, char address, char reg)
PowerIC 0:a13d6826cf66 90 {
PowerIC 0:a13d6826cf66 91 unsigned short RESPONSE = 0x0000;
PowerIC 0:a13d6826cf66 92 port = I2C_PORT1;
PowerIC 0:a13d6826cf66 93
PowerIC 0:a13d6826cf66 94 if(port == I2C_PORT2)
PowerIC 0:a13d6826cf66 95 {
PowerIC 0:a13d6826cf66 96 //I2C2_TXDATA[0] = reg; // Which register?
PowerIC 0:a13d6826cf66 97 //(void)i2c2.write(address, I2C2_TXDATA, 1, true);
PowerIC 0:a13d6826cf66 98 //(void)i2c2.read(address, I2C2_RXDATA, 2); // Ask for data
PowerIC 0:a13d6826cf66 99 //wait_us(25); // Wait for it
PowerIC 0:a13d6826cf66 100
PowerIC 0:a13d6826cf66 101 //RESPONSE = (unsigned short)((I2C2_RXDATA[0] * 256) + I2C2_RXDATA[1]); // Return Data
PowerIC 0:a13d6826cf66 102 }
PowerIC 0:a13d6826cf66 103 else
PowerIC 0:a13d6826cf66 104 {
PowerIC 0:a13d6826cf66 105 I2C1_TXDATA[0] = reg; // Which register?
PowerIC 0:a13d6826cf66 106 (void)i2c1.write(address, I2C1_TXDATA, 1, true);
PowerIC 0:a13d6826cf66 107 (void)i2c1.read(address, I2C1_RXDATA, 2); // Ask for data
PowerIC 0:a13d6826cf66 108 wait_us(25); // Wait for it
PowerIC 0:a13d6826cf66 109
PowerIC 0:a13d6826cf66 110 RESPONSE = (unsigned short)((I2C1_RXDATA[0] * 256) + I2C1_RXDATA[1]); // Return Data
PowerIC 0:a13d6826cf66 111 }
PowerIC 0:a13d6826cf66 112
PowerIC 0:a13d6826cf66 113 return RESPONSE;
PowerIC 0:a13d6826cf66 114 }
PowerIC 0:a13d6826cf66 115
PowerIC 0:a13d6826cf66 116 char I2C_Write_Word(char port, char address, char reg, char hbyte, char lbyte)
PowerIC 0:a13d6826cf66 117 {
PowerIC 0:a13d6826cf66 118 char RESPONSE = 0x00;
PowerIC 0:a13d6826cf66 119 port = I2C_PORT1;
PowerIC 0:a13d6826cf66 120
PowerIC 0:a13d6826cf66 121 if(port == I2C_PORT2)
PowerIC 0:a13d6826cf66 122 {
PowerIC 0:a13d6826cf66 123 //I2C2_TXDATA[0] = reg; // Register
PowerIC 0:a13d6826cf66 124 //I2C2_TXDATA[1] = hbyte; // HB Data
PowerIC 0:a13d6826cf66 125 //I2C2_TXDATA[2] = lbyte; // LB Data
PowerIC 0:a13d6826cf66 126 //RESPONSE = i2c2.write(address,I2C2_TXDATA,3); // Echo ACK/NACK
PowerIC 0:a13d6826cf66 127 }
PowerIC 0:a13d6826cf66 128 else
PowerIC 0:a13d6826cf66 129 {
PowerIC 0:a13d6826cf66 130 I2C1_TXDATA[0] = reg; // Register
PowerIC 0:a13d6826cf66 131 I2C1_TXDATA[1] = hbyte; // HB Data
PowerIC 0:a13d6826cf66 132 I2C1_TXDATA[2] = lbyte; // LB Data
PowerIC 0:a13d6826cf66 133 RESPONSE = i2c1.write(address,I2C1_TXDATA,3); // Echo ACK/NACK
PowerIC 0:a13d6826cf66 134 }
PowerIC 0:a13d6826cf66 135
PowerIC 0:a13d6826cf66 136 return RESPONSE;
PowerIC 0:a13d6826cf66 137 }
PowerIC 0:a13d6826cf66 138
PowerIC 0:a13d6826cf66 139 void I2C_Write_Byte(char address, char data)
PowerIC 0:a13d6826cf66 140 {
PowerIC 0:a13d6826cf66 141 I2C1_TXDATA[0] = data; // Data
PowerIC 0:a13d6826cf66 142 (void)i2c1.write(address,I2C1_TXDATA,1);
PowerIC 0:a13d6826cf66 143 wait_us(10); // Wait for Mux to settle
PowerIC 0:a13d6826cf66 144 }
PowerIC 0:a13d6826cf66 145
PowerIC 0:a13d6826cf66 146
PowerIC 0:a13d6826cf66 147 char I2C_Write_Block(char port, char address, char nbytes)
PowerIC 0:a13d6826cf66 148 {
PowerIC 0:a13d6826cf66 149 char RESPONSE = 0x00;
PowerIC 0:a13d6826cf66 150 port = I2C_PORT1;
PowerIC 0:a13d6826cf66 151
PowerIC 0:a13d6826cf66 152 if(port == I2C_PORT2)
PowerIC 0:a13d6826cf66 153 {
PowerIC 0:a13d6826cf66 154 //RESPONSE = i2c2.write(address,I2C2_TXDATA,nbytes + 1); // Echo ACK/NACK
PowerIC 0:a13d6826cf66 155 }
PowerIC 0:a13d6826cf66 156 else
PowerIC 0:a13d6826cf66 157 {
PowerIC 0:a13d6826cf66 158 RESPONSE = i2c1.write(address,I2C1_TXDATA,nbytes + 1); // Echo ACK/NACK
PowerIC 0:a13d6826cf66 159 }
PowerIC 0:a13d6826cf66 160
PowerIC 0:a13d6826cf66 161 return RESPONSE;
PowerIC 0:a13d6826cf66 162 }
PowerIC 0:a13d6826cf66 163
PowerIC 0:a13d6826cf66 164
PowerIC 0:a13d6826cf66 165 /*
PowerIC 0:a13d6826cf66 166 char I2C_Write_Fast(char port, char address, char daca_hb, char daca_lb, char dacb_hb, char dacb_lb, char dacc_hb, char dacc_lb, char dacd_hb, char dacd_lb)
PowerIC 0:a13d6826cf66 167 {
PowerIC 0:a13d6826cf66 168 char RESPONSE = 0x00;
PowerIC 0:a13d6826cf66 169 //port = I2C_PORT1;
PowerIC 0:a13d6826cf66 170
PowerIC 0:a13d6826cf66 171 if(port == I2C_PORT2)
PowerIC 0:a13d6826cf66 172 {
PowerIC 0:a13d6826cf66 173 I2C2_TXDATA[0] = daca_hb; // DAC_A High Byte
PowerIC 0:a13d6826cf66 174 I2C2_TXDATA[1] = daca_lb; // DAC_A Low Byte
PowerIC 0:a13d6826cf66 175 I2C2_TXDATA[2] = dacb_hb; // DAC_B High Byte
PowerIC 0:a13d6826cf66 176 I2C2_TXDATA[3] = dacb_lb; // DAC_B Low Byte
PowerIC 0:a13d6826cf66 177 I2C2_TXDATA[4] = dacc_hb; // DAC_C High Byte
PowerIC 0:a13d6826cf66 178 I2C2_TXDATA[5] = dacc_lb; // DAC_C Low Byte
PowerIC 0:a13d6826cf66 179 I2C2_TXDATA[6] = dacd_hb; // DAC_D High Byte
PowerIC 0:a13d6826cf66 180 I2C2_TXDATA[7] = dacd_lb; // DAC_D Low Byte
PowerIC 0:a13d6826cf66 181 RESPONSE = i2c2.write(address,I2C2_TXDATA,3); // Echo ACK/NACK
PowerIC 0:a13d6826cf66 182 }
PowerIC 0:a13d6826cf66 183 else
PowerIC 0:a13d6826cf66 184 {
PowerIC 0:a13d6826cf66 185 I2C1_TXDATA[0] = daca_hb; // DAC_A High Byte
PowerIC 0:a13d6826cf66 186 I2C1_TXDATA[1] = daca_lb; // DAC_A Low Byte
PowerIC 0:a13d6826cf66 187 I2C1_TXDATA[2] = dacb_hb; // DAC_B High Byte
PowerIC 0:a13d6826cf66 188 I2C1_TXDATA[3] = dacb_lb; // DAC_B Low Byte
PowerIC 0:a13d6826cf66 189 I2C1_TXDATA[4] = dacc_hb; // DAC_C High Byte
PowerIC 0:a13d6826cf66 190 I2C1_TXDATA[5] = dacc_lb; // DAC_C Low Byte
PowerIC 0:a13d6826cf66 191 I2C1_TXDATA[6] = dacd_hb; // DAC_D High Byte
PowerIC 0:a13d6826cf66 192 I2C1_TXDATA[7] = dacd_lb; // DAC_D Low Byte
PowerIC 0:a13d6826cf66 193 RESPONSE = i2c1.write(address,I2C1_TXDATA,8); // Echo ACK/NACK
PowerIC 0:a13d6826cf66 194 }
PowerIC 0:a13d6826cf66 195
PowerIC 0:a13d6826cf66 196 return RESPONSE;
PowerIC 0:a13d6826cf66 197 }
PowerIC 0:a13d6826cf66 198 */
PowerIC 0:a13d6826cf66 199
PowerIC 0:a13d6826cf66 200 /*
PowerIC 0:a13d6826cf66 201 char I2C_Write_Block(char port, char address, char reg, char byte1, char byte2, char byte3, char byte4, char byte5, char byte6, char byte7, char byte8)
PowerIC 0:a13d6826cf66 202 {
PowerIC 0:a13d6826cf66 203 char RESPONSE = 0x00;
PowerIC 0:a13d6826cf66 204 //port = I2C_PORT1;
PowerIC 0:a13d6826cf66 205
PowerIC 0:a13d6826cf66 206 if(port == I2C_PORT2)
PowerIC 0:a13d6826cf66 207 {
PowerIC 0:a13d6826cf66 208 I2C2_TXDATA[0] = reg; // Register
PowerIC 0:a13d6826cf66 209 I2C2_TXDATA[1] = byte1; // Byte 1
PowerIC 0:a13d6826cf66 210 I2C2_TXDATA[2] = byte2; // Byte 2
PowerIC 0:a13d6826cf66 211 I2C2_TXDATA[3] = byte3; // Byte 3
PowerIC 0:a13d6826cf66 212 I2C2_TXDATA[4] = byte4; // Byte 4
PowerIC 0:a13d6826cf66 213 I2C2_TXDATA[5] = byte5; // Byte 5
PowerIC 0:a13d6826cf66 214 I2C2_TXDATA[6] = byte6; // Byte 6
PowerIC 0:a13d6826cf66 215 I2C2_TXDATA[7] = byte7; // Byte 7
PowerIC 0:a13d6826cf66 216 I2C2_TXDATA[8] = byte8; // Byte 8
PowerIC 0:a13d6826cf66 217 RESPONSE = i2c2.write(address,I2C2_TXDATA,3); // Echo ACK/NACK
PowerIC 0:a13d6826cf66 218 }
PowerIC 0:a13d6826cf66 219 else
PowerIC 0:a13d6826cf66 220 {
PowerIC 0:a13d6826cf66 221 I2C1_TXDATA[0] = reg; // Register
PowerIC 0:a13d6826cf66 222 I2C1_TXDATA[1] = byte1; // Byte 1
PowerIC 0:a13d6826cf66 223 I2C1_TXDATA[2] = byte2; // Byte 2
PowerIC 0:a13d6826cf66 224 I2C1_TXDATA[3] = byte3; // Byte 3
PowerIC 0:a13d6826cf66 225 I2C1_TXDATA[4] = byte4; // Byte 4
PowerIC 0:a13d6826cf66 226 I2C1_TXDATA[5] = byte5; // Byte 5
PowerIC 0:a13d6826cf66 227 I2C1_TXDATA[6] = byte6; // Byte 6
PowerIC 0:a13d6826cf66 228 I2C1_TXDATA[7] = byte7; // Byte 7
PowerIC 0:a13d6826cf66 229 I2C1_TXDATA[8] = byte8; // Byte 8
PowerIC 0:a13d6826cf66 230 RESPONSE = i2c1.write(address,I2C1_TXDATA,9); // Echo ACK/NACK
PowerIC 0:a13d6826cf66 231 }
PowerIC 0:a13d6826cf66 232
PowerIC 0:a13d6826cf66 233 return RESPONSE;
PowerIC 0:a13d6826cf66 234 }
PowerIC 0:a13d6826cf66 235 */
PowerIC 0:a13d6826cf66 236
PowerIC 0:a13d6826cf66 237
PowerIC 0:a13d6826cf66 238 /*
PowerIC 0:a13d6826cf66 239 unsigned short I2C_Read_Block(char address, char reg, int nbytes)
PowerIC 0:a13d6826cf66 240 {
PowerIC 0:a13d6826cf66 241 unsigned short RESPONSE = 0x0000;
PowerIC 0:a13d6826cf66 242
PowerIC 0:a13d6826cf66 243 I2C1_TXDATA[0] = reg; // Which register?
PowerIC 0:a13d6826cf66 244 (void)i2c.write(address, I2C1_TXDATA, 1, true);
PowerIC 0:a13d6826cf66 245 (void)i2c.read(address,I2C1_RXDATA,nbytes);
PowerIC 0:a13d6826cf66 246
PowerIC 0:a13d6826cf66 247 switch(reg)
PowerIC 0:a13d6826cf66 248 {
PowerIC 0:a13d6826cf66 249 case DAC_A:
PowerIC 0:a13d6826cf66 250 RESPONSE = (unsigned short)(((I2C1_RXDATA[1] & 0x0F) * 256) + I2C1_RXDATA[2]); // Return DAC A Data
PowerIC 0:a13d6826cf66 251 break;
PowerIC 0:a13d6826cf66 252 case DAC_B:
PowerIC 0:a13d6826cf66 253 RESPONSE = (unsigned short)(((I2C1_RXDATA[7] & 0x0F) * 256) + I2C1_RXDATA[8]); // Return DAC B Data
PowerIC 0:a13d6826cf66 254 break;
PowerIC 0:a13d6826cf66 255 case DAC_C:
PowerIC 0:a13d6826cf66 256 RESPONSE = (unsigned short)(((I2C1_RXDATA[13] & 0x0F) * 256) + I2C1_RXDATA[14]); // Return DAC C Data
PowerIC 0:a13d6826cf66 257 break;
PowerIC 0:a13d6826cf66 258 case DAC_D:
PowerIC 0:a13d6826cf66 259 RESPONSE = (unsigned short)(((I2C1_RXDATA[19] & 0x0F) * 256) + I2C1_RXDATA[20]); // Return DAC D Data
PowerIC 0:a13d6826cf66 260 break;
PowerIC 0:a13d6826cf66 261 default:
PowerIC 0:a13d6826cf66 262 break;
PowerIC 0:a13d6826cf66 263 }
PowerIC 0:a13d6826cf66 264
PowerIC 0:a13d6826cf66 265 return RESPONSE;
PowerIC 0:a13d6826cf66 266 }
PowerIC 0:a13d6826cf66 267 */