tusb322.cpp 966 B

12345678910111213141516171819202122232425262728293031323334
  1. #include "tusb322.h"
  2. extern I2C i2c;
  3. InterruptIn IO_Usb(PB_4);
  4. void UsbInterrupt(void) {
  5. // No real uses for this at the moment
  6. }
  7. void TUSB322_Init(void) {
  8. char buffer[sizeof(TUSB322_REGS)] = {0};
  9. IO_Usb.fall(&UsbInterrupt);
  10. // Disable UFP accessory support (otherwise IC stays in DRP mode)
  11. buffer[0] = FIELD_OFFSET(TUSB322_REGS, Status2);
  12. CONN_STATUS2 *stat = (CONN_STATUS2*)&buffer[1];
  13. stat->UFP_ACCESSORY = 0x1;
  14. i2c.write(TUSB322_ADDR << 1, buffer, 2);
  15. // Disable CC termination to change to UFP mode
  16. buffer[0] = FIELD_OFFSET(TUSB322_REGS, Control);
  17. CTRL *ctrl = (CTRL*)&buffer[1];
  18. ctrl->DISABLE_TERM = 0x1;
  19. i2c.write(TUSB322_ADDR << 1, buffer, 2);
  20. // For operation in UFP mode
  21. ctrl->MODE_SELECT = 0x01;
  22. i2c.write(TUSB322_ADDR << 1, buffer, 2);
  23. // Reenable CC termination
  24. ctrl->DISABLE_TERM = 0x0;
  25. i2c.write(TUSB322_ADDR << 1, buffer, 2);
  26. }