matrix.c 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #include <stdio.h>
  2. #include "ohos_init.h"
  3. #include "iot_gpio.h"
  4. #include "iot_gpio_ex.h"
  5. #include "iot_i2c.h"
  6. #include "cmsis_os2.h"
  7. #define IIC_SDA 0
  8. #define IIC_SCL 1
  9. #define ADDR 0x27 // 0100111
  10. #define IIC_IDX 1
  11. /*
  12. Command Register
  13. 0 Input port 0
  14. 1 Input port 1
  15. 2 Output port 0
  16. 3 Output port 1
  17. 4 Polarity Inversion port 0
  18. 5 Polarity Inversion port 1
  19. 6 Configuration port 0
  20. 7 Configuration port 1
  21. */
  22. #define CMD_CFG0 6
  23. #define CMD_CFG1 7
  24. #define CMD_OUT0 2
  25. #define CMD_OUT1 3
  26. int write_iic(uint8_t* data){
  27. int ret = IoTI2cWrite(IIC_IDX, (ADDR << 1) | 0x00, data, 3);
  28. if (ret != 0) {
  29. printf("===== Error: I2C write config 0 ret = 0x%x! =====\r\n", ret);
  30. }else{
  31. printf("i2c send succ %02x %02x %02x \n" , data[0], data[1], data[2]);
  32. }
  33. usleep(200*1000);
  34. return ret;
  35. }
  36. //start
  37. uint8_t CFG0[] = {CMD_CFG0,0x0,0x0}; //配置为输出
  38. uint8_t CFG1[] = {CMD_CFG1,0x0,0x0}; //配置为输出
  39. uint8_t OUT0[] = {CMD_OUT0,0x00,0xff}; // 输出
  40. uint8_t OUT1[] = {CMD_OUT1,0x00,0xff}; // 输出
  41. void iic(void* args ){
  42. printf("iic thread running...");
  43. IoTGpioInit(IIC_SDA);
  44. IoTGpioInit(IIC_SCL);
  45. IoTGpioSetFunc(IIC_SDA, IOT_GPIO_FUNC_GPIO_0_I2C1_SDA);
  46. IoTGpioSetFunc(IIC_SCL, IOT_GPIO_FUNC_GPIO_1_I2C1_SCL);
  47. IoTI2cInit(IIC_IDX, 400000);
  48. write_iic(CFG0);
  49. write_iic(CFG1);
  50. write_iic(OUT0);
  51. write_iic(OUT1);
  52. printf("set finish!\n");
  53. }
  54. APP_FEATURE_INIT(iic);