AE11 GUI for PICO
Dependencies: max32625pico USBDevice
i2c.cpp
- Committer:
- PowerIC
- Date:
- 2020-06-25
- Revision:
- 0:a13d6826cf66
File content as of revision 0:a13d6826cf66:
#include "mbed.h" #include "i2c.h" //#include "mcp4728.h" //-- PIN DEFINITIONS ---------------------------------------------------------------------------------- I2C i2c1(P1_6, P1_7); // Enable I2C Master 1(SDA, SCL) //I2C i2c2(P5_7, P6_0); // Enable I2C Master 2(SDA, SCL) //-- VARIABLES ---------------------------------------------------------------------------------------- extern char I2C1_TXDATA[]; extern char I2C1_RXDATA[]; //extern char I2C2_TXDATA[]; //extern char I2C2_RXDATA[]; void Init_I2C() { i2c1.frequency(400000); // Set I2C Bus = 400KHz //i2c2.frequency(400000); // Set I2C Bus = 400KHz } char I2C_Quick_Write(char port, char address) { // Device present should respond with 0x01, otherwise 0x00 char RESPONSE = 0x00; port = I2C_PORT1; if(port == I2C_PORT2) { //i2c2.start(); //RESPONSE = i2c2.write(address); // Echo ACK/NACK Status //i2c2.stop(); } else { i2c1.start(); RESPONSE = i2c1.write(address); // Echo ACK/NACK Status i2c1.stop(); } return RESPONSE; } char I2C_Read_Byte(char port, char address, char reg) { char RESPONSE = 0x00; port = I2C_PORT1; if(port == I2C_PORT2) { //I2C2_TXDATA[0] = reg; // Which register? //(void)i2c2.write(address, I2C2_TXDATA, 1, true); //(void)i2c2.read(address, I2C2_RXDATA, 1); // Ask for data //wait_us(25); // Wait for it //RESPONSE = I2C2_RXDATA[0]; // Return Data } else { I2C1_TXDATA[0] = reg; // Which register? (void)i2c1.write(address, I2C1_TXDATA, 1, true); (void)i2c1.read(address, I2C1_RXDATA, 1); // Ask for data wait_us(25); // Wait for it RESPONSE = I2C1_RXDATA[0]; // Return Data } return RESPONSE; } char I2C_Write_Register(char port, char address, char reg, char data) { char RESPONSE = 0x00; port = I2C_PORT1; if(port == I2C_PORT2) { //I2C2_TXDATA[0] = reg; // Register //I2C2_TXDATA[1] = data; // Data //RESPONSE = i2c2.write(address,I2C2_TXDATA,2); // Echo ACK/NACK } else { I2C1_TXDATA[0] = reg; // Register I2C1_TXDATA[1] = data; // Data RESPONSE = i2c1.write(address,I2C1_TXDATA,2); // Echo ACK/NACK } return RESPONSE; } unsigned short I2C_Read_Word(char port, char address, char reg) { unsigned short RESPONSE = 0x0000; port = I2C_PORT1; if(port == I2C_PORT2) { //I2C2_TXDATA[0] = reg; // Which register? //(void)i2c2.write(address, I2C2_TXDATA, 1, true); //(void)i2c2.read(address, I2C2_RXDATA, 2); // Ask for data //wait_us(25); // Wait for it //RESPONSE = (unsigned short)((I2C2_RXDATA[0] * 256) + I2C2_RXDATA[1]); // Return Data } else { I2C1_TXDATA[0] = reg; // Which register? (void)i2c1.write(address, I2C1_TXDATA, 1, true); (void)i2c1.read(address, I2C1_RXDATA, 2); // Ask for data wait_us(25); // Wait for it RESPONSE = (unsigned short)((I2C1_RXDATA[0] * 256) + I2C1_RXDATA[1]); // Return Data } return RESPONSE; } char I2C_Write_Word(char port, char address, char reg, char hbyte, char lbyte) { char RESPONSE = 0x00; port = I2C_PORT1; if(port == I2C_PORT2) { //I2C2_TXDATA[0] = reg; // Register //I2C2_TXDATA[1] = hbyte; // HB Data //I2C2_TXDATA[2] = lbyte; // LB Data //RESPONSE = i2c2.write(address,I2C2_TXDATA,3); // Echo ACK/NACK } else { I2C1_TXDATA[0] = reg; // Register I2C1_TXDATA[1] = hbyte; // HB Data I2C1_TXDATA[2] = lbyte; // LB Data RESPONSE = i2c1.write(address,I2C1_TXDATA,3); // Echo ACK/NACK } return RESPONSE; } void I2C_Write_Byte(char address, char data) { I2C1_TXDATA[0] = data; // Data (void)i2c1.write(address,I2C1_TXDATA,1); wait_us(10); // Wait for Mux to settle } char I2C_Write_Block(char port, char address, char nbytes) { char RESPONSE = 0x00; port = I2C_PORT1; if(port == I2C_PORT2) { //RESPONSE = i2c2.write(address,I2C2_TXDATA,nbytes + 1); // Echo ACK/NACK } else { RESPONSE = i2c1.write(address,I2C1_TXDATA,nbytes + 1); // Echo ACK/NACK } return RESPONSE; } /* 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) { char RESPONSE = 0x00; //port = I2C_PORT1; if(port == I2C_PORT2) { I2C2_TXDATA[0] = daca_hb; // DAC_A High Byte I2C2_TXDATA[1] = daca_lb; // DAC_A Low Byte I2C2_TXDATA[2] = dacb_hb; // DAC_B High Byte I2C2_TXDATA[3] = dacb_lb; // DAC_B Low Byte I2C2_TXDATA[4] = dacc_hb; // DAC_C High Byte I2C2_TXDATA[5] = dacc_lb; // DAC_C Low Byte I2C2_TXDATA[6] = dacd_hb; // DAC_D High Byte I2C2_TXDATA[7] = dacd_lb; // DAC_D Low Byte RESPONSE = i2c2.write(address,I2C2_TXDATA,3); // Echo ACK/NACK } else { I2C1_TXDATA[0] = daca_hb; // DAC_A High Byte I2C1_TXDATA[1] = daca_lb; // DAC_A Low Byte I2C1_TXDATA[2] = dacb_hb; // DAC_B High Byte I2C1_TXDATA[3] = dacb_lb; // DAC_B Low Byte I2C1_TXDATA[4] = dacc_hb; // DAC_C High Byte I2C1_TXDATA[5] = dacc_lb; // DAC_C Low Byte I2C1_TXDATA[6] = dacd_hb; // DAC_D High Byte I2C1_TXDATA[7] = dacd_lb; // DAC_D Low Byte RESPONSE = i2c1.write(address,I2C1_TXDATA,8); // Echo ACK/NACK } return RESPONSE; } */ /* 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) { char RESPONSE = 0x00; //port = I2C_PORT1; if(port == I2C_PORT2) { I2C2_TXDATA[0] = reg; // Register I2C2_TXDATA[1] = byte1; // Byte 1 I2C2_TXDATA[2] = byte2; // Byte 2 I2C2_TXDATA[3] = byte3; // Byte 3 I2C2_TXDATA[4] = byte4; // Byte 4 I2C2_TXDATA[5] = byte5; // Byte 5 I2C2_TXDATA[6] = byte6; // Byte 6 I2C2_TXDATA[7] = byte7; // Byte 7 I2C2_TXDATA[8] = byte8; // Byte 8 RESPONSE = i2c2.write(address,I2C2_TXDATA,3); // Echo ACK/NACK } else { I2C1_TXDATA[0] = reg; // Register I2C1_TXDATA[1] = byte1; // Byte 1 I2C1_TXDATA[2] = byte2; // Byte 2 I2C1_TXDATA[3] = byte3; // Byte 3 I2C1_TXDATA[4] = byte4; // Byte 4 I2C1_TXDATA[5] = byte5; // Byte 5 I2C1_TXDATA[6] = byte6; // Byte 6 I2C1_TXDATA[7] = byte7; // Byte 7 I2C1_TXDATA[8] = byte8; // Byte 8 RESPONSE = i2c1.write(address,I2C1_TXDATA,9); // Echo ACK/NACK } return RESPONSE; } */ /* unsigned short I2C_Read_Block(char address, char reg, int nbytes) { unsigned short RESPONSE = 0x0000; I2C1_TXDATA[0] = reg; // Which register? (void)i2c.write(address, I2C1_TXDATA, 1, true); (void)i2c.read(address,I2C1_RXDATA,nbytes); switch(reg) { case DAC_A: RESPONSE = (unsigned short)(((I2C1_RXDATA[1] & 0x0F) * 256) + I2C1_RXDATA[2]); // Return DAC A Data break; case DAC_B: RESPONSE = (unsigned short)(((I2C1_RXDATA[7] & 0x0F) * 256) + I2C1_RXDATA[8]); // Return DAC B Data break; case DAC_C: RESPONSE = (unsigned short)(((I2C1_RXDATA[13] & 0x0F) * 256) + I2C1_RXDATA[14]); // Return DAC C Data break; case DAC_D: RESPONSE = (unsigned short)(((I2C1_RXDATA[19] & 0x0F) * 256) + I2C1_RXDATA[20]); // Return DAC D Data break; default: break; } return RESPONSE; } */