sx60.c 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. #include "sx60.h"
  2. #include "i2cmaster.h"
  3. bool i2c_initialized = 0;
  4. uint8_t mcp23018_status = 0x20;
  5. uint8_t init_mcp23018(void) {
  6. mcp23018_status = 0x20;
  7. /* I2C subsystem */
  8. if (i2c_initialized == 0) {
  9. i2c_init(); // on pins D(1,0)
  10. i2c_initialized = true;
  11. _delay_ms(1000);
  12. }
  13. /* B Pins are Row, A pins are Columns
  14. Set them to output */
  15. mcp23018_status = i2c_start(I2C_ADDR_WRITE); if (mcp23018_status) goto out;
  16. mcp23018_status = i2c_write(IODIRA); if (mcp23018_status) goto out;
  17. mcp23018_status = i2c_write(0b11111111); if (mcp23018_status) goto out;
  18. /* Now write to IODIRB */
  19. mcp23018_status = i2c_write(0b00000000); if (mcp23018_status) goto out;
  20. i2c_stop();
  21. mcp23018_status = i2c_start(I2C_ADDR_WRITE); if (mcp23018_status) goto out;
  22. mcp23018_status = i2c_write(GPPUA); if (mcp23018_status) goto out;
  23. mcp23018_status = i2c_write(0b11111111); if (mcp23018_status) goto out;
  24. /* Now write to GPPUB */
  25. mcp23018_status = i2c_write(0b00000000); if (mcp23018_status) goto out;
  26. out:
  27. i2c_stop();
  28. return mcp23018_status;
  29. }