laforge has submitted this change. ( https://gerrit.osmocom.org/c/simtrace2/+/15875 )
Change subject: add/fix mcp23017 i2c gpio expander functions and tests ...................................................................... add/fix mcp23017 i2c gpio expander functions and tests Change-Id: Ia2e5a1bf3f97272931014e54e587109297556c03 --- M firmware/apps/gpio_test/gpio_test.c M firmware/libboard/octsimtest/include/i2c.h M firmware/libboard/octsimtest/include/mcp23017.h M firmware/libboard/octsimtest/source/board_octsimtest.c M firmware/libboard/octsimtest/source/i2c.c M firmware/libboard/octsimtest/source/mcp23017.c 6 files changed, 52 insertions(+), 9 deletions(-) Approvals: Jenkins Builder: Verified laforge: Looks good to me, approved diff --git a/firmware/apps/gpio_test/gpio_test.c b/firmware/apps/gpio_test/gpio_test.c index 2ab23e7..a6b0a00 100644 --- a/firmware/apps/gpio_test/gpio_test.c +++ b/firmware/apps/gpio_test/gpio_test.c @@ -2,9 +2,7 @@ #include "utils.h" #include "chip.h" - - void gpio_test_init(void) { - printf("FIXME run tests here\n\n"); + printf("FIXME run tests here\n\r"); } diff --git a/firmware/libboard/octsimtest/include/i2c.h b/firmware/libboard/octsimtest/include/i2c.h index 5a8c908..6c94d26 100644 --- a/firmware/libboard/octsimtest/include/i2c.h +++ b/firmware/libboard/octsimtest/include/i2c.h @@ -22,7 +22,7 @@ bool i2c_write_byte(bool send_start, bool send_stop, uint8_t byte); uint8_t i2c_read_byte(bool nack, bool send_stop); -static void i2c_stop_cond(void); +void i2c_stop_cond(void); int eeprom_write_byte(uint8_t slave, uint8_t addr, uint8_t byte); int eeprom_read_byte(uint8_t slave, uint8_t addr); diff --git a/firmware/libboard/octsimtest/include/mcp23017.h b/firmware/libboard/octsimtest/include/mcp23017.h index dea6285..962a1d5 100644 --- a/firmware/libboard/octsimtest/include/mcp23017.h +++ b/firmware/libboard/octsimtest/include/mcp23017.h @@ -19,5 +19,7 @@ #define MCP23017_ADDRESS 0x20 int mcp23017_init(uint8_t slave); +int mcp23017_test(uint8_t slave); +int mcp23017_toggle(uint8_t slave); //int mcp23017_write_byte(uint8_t slave, uint8_t addr, uint8_t byte); //int mcp23017_read_byte(uint8_t slave, uint8_t addr); diff --git a/firmware/libboard/octsimtest/source/board_octsimtest.c b/firmware/libboard/octsimtest/source/board_octsimtest.c index 2772015..b7d7245 100644 --- a/firmware/libboard/octsimtest/source/board_octsimtest.c +++ b/firmware/libboard/octsimtest/source/board_octsimtest.c @@ -32,12 +32,20 @@ case '?': printf("\t?\thelp\n\r"); printf("\tR\treset SAM3\n\r"); + printf("\tm\trun mcp23017 test\n\r"); + printf("\tR\ttoggle MSB of gpio on mcp23017\n\r"); break; case 'R': printf("Asking NVIC to reset us\n\r"); USBD_Disconnect(); NVIC_SystemReset(); break; + case 'm': + mcp23017_test(MCP23017_ADDRESS); + break; + case 't': + mcp23017_toggle(MCP23017_ADDRESS); + break; default: printf("Unknown command '%c'\n\r", ch); break; @@ -50,7 +58,8 @@ usb_buf_init(); i2c_pin_init(); - mcp23017_init(MCP23017_ADDRESS); + if (!mcp23017_init(MCP23017_ADDRESS)) + printf("mcp23017 not found!\n\r"); /* Initialize checking for card insert/remove events */ //card_present_init(); #endif diff --git a/firmware/libboard/octsimtest/source/i2c.c b/firmware/libboard/octsimtest/source/i2c.c index a708704..2cd8423 100644 --- a/firmware/libboard/octsimtest/source/i2c.c +++ b/firmware/libboard/octsimtest/source/i2c.c @@ -96,7 +96,7 @@ i2c_started = true; } -static void i2c_stop_cond(void) +void i2c_stop_cond(void) { clear_sda(); set_scl(); diff --git a/firmware/libboard/octsimtest/source/mcp23017.c b/firmware/libboard/octsimtest/source/mcp23017.c index 63390b4..167bf34 100644 --- a/firmware/libboard/octsimtest/source/mcp23017.c +++ b/firmware/libboard/octsimtest/source/mcp23017.c @@ -94,13 +94,47 @@ int mcp23017_init(uint8_t slave) { - printf("mcp23017_init\n"); + printf("mcp23017_init\n\r"); // all gpio input if (mcp23017_write_byte(slave, MCP23017_IODIRA, 0xff)) return false; - if (mcp23017_write_byte(slave, MCP23017_IODIRB, 0xff)) + // msb of portb output, rest input + if (mcp23017_write_byte(slave, MCP23017_IODIRB, 0x7f)) return false; - printf("mcp23017 found\n"); + if (mcp23017_write_byte(slave, MCP23017_IOCONA, 0x20)) //disable SEQOP (autoinc addressing) + return false; + printf("mcp23017 found\n\r"); return true; } +int mcp23017_test(uint8_t slave) +{ + printf("mcp23017_test\n\r"); + printf("GPIOA 0x%x\n\r", mcp23017_read_byte(slave,MCP23017_GPIOA)); + printf("GPIOB 0x%x\n\r", mcp23017_read_byte(slave,MCP23017_GPIOB)); + printf("IODIRA 0x%x\n\r", mcp23017_read_byte(slave,MCP23017_IODIRA)); + printf("IODIRB 0x%x\n\r", mcp23017_read_byte(slave,MCP23017_IODIRB)); + printf("IOCONA 0x%x\n\r", mcp23017_read_byte(slave,MCP23017_IOCONA)); + printf("IOCONB 0x%x\n\r", mcp23017_read_byte(slave,MCP23017_IOCONB)); + + return 0; +} + +int mcp23017_toggle(uint8_t slave) +{ + // example writing MSB of gpio + static bool foo=false; + if (foo) + { + printf("+\n\r"); + mcp23017_write_byte(slave, MCP23017_OLATB, 0x80); + foo=false; + } + else + { + printf("-\n\r"); + mcp23017_write_byte(slave, MCP23017_OLATB, 0x00); + foo=true; + } + return 0; +} -- To view, visit https://gerrit.osmocom.org/c/simtrace2/+/15875 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: simtrace2 Gerrit-Branch: master Gerrit-Change-Id: Ia2e5a1bf3f97272931014e54e587109297556c03 Gerrit-Change-Number: 15875 Gerrit-PatchSet: 1 Gerrit-Owner: roh <jstei...@sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: laforge <lafo...@osmocom.org> Gerrit-MessageType: merged