i2c_switch_max7311.c 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /* @brief This is a simple application for testing I2C communication on a RedPitaya
  2. *
  3. * (c) Red Pitaya http://www.redpitaya.com
  4. *
  5. * This part of code is written in C programming language.
  6. * Please visit http://en.wikipedia.org/wiki/C_(programming_language)
  7. * for more details on the language used herein.
  8. */
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <string.h>
  12. #include <unistd.h>
  13. #include "rp_hw.h"
  14. int main(int argc, char *argv[]){
  15. int res = rp_I2C_InitDevice("/dev/i2c-0",0x21); // Init i2c api.
  16. printf("Init result: %d\n",res);
  17. res = rp_I2C_setForceMode(true); // Set force mode.
  18. printf("Set force mode: %d\n",res);
  19. printf("Turn on AC/DC ch1 & ch2\n");
  20. uint16_t value = 0x0055;
  21. res = rp_I2C_SMBUS_WriteWord(0x02,value);
  22. printf("Write 2 bytes: %d\n",res);
  23. usleep(1000000);
  24. value = value & ~ 0x000F;
  25. res = rp_I2C_SMBUS_WriteWord(0x02,value);
  26. printf("Write 2 bytes: %d\n",res);
  27. usleep(3000000);
  28. printf("Turn off AC/DC ch1 & ch2\n");
  29. value = 0x00AA;
  30. res = rp_I2C_SMBUS_WriteWord(0x02,value);
  31. printf("Write 2 bytes: %d\n",res);
  32. usleep(1000000);
  33. value = value & ~ 0x000F;
  34. res = rp_I2C_SMBUS_WriteWord(0x02,value);
  35. printf("Write 2 bytes: %d\n",res);
  36. uint16_t read_value = 0;
  37. res = rp_I2C_SMBUS_ReadWord(0x02,&read_value);
  38. printf("Read 2 bytes: 0x%x (res: %d)\n",read_value, res);
  39. return 0;
  40. }