140 #define DEFAULT_I2C I2C0
142 #define DEFAULT_I2C I2C1
145 #define I2C_EEPROM_BUS DEFAULT_I2C
146 #define I2C_IOX_BUS DEFAULT_I2C
148 #define SPEED_100KHZ 100000
149 #define SPEED_400KHZ 400000
152 static const char menu[] =
153 "**************** I2C Demo Menu ****************\r\n"
155 "\t1: Select I2C peripheral [\033[1;32mI2C%d\033[0;37m]\r\n"
156 "\t2: Toggle mode POLLING/INTERRUPT [\033[1;32m%s\033[0;37m]\r\n"
157 "\t3: Probe for Slave devices\r\n"
158 "\t4: Read slave data\r\n"
159 "\t5: Write slave data\r\n"
160 "\t6: Write/Read slave data\r\n";
167 #define I2C_SLAVE_EEPROM_SIZE 64
168 #define I2C_SLAVE_EEPROM_ADDR 0x5A
169 #define I2C_SLAVE_IOX_ADDR 0x5B
206 for (i = 0; i < sz; i++) {
224 while (!input_valid) {
236 if (i >=
sizeof(ch) - 2) {
239 if (((x ==
'\r') || (x ==
'\n')) && i) {
254 i = strtol(ch, &ptr, 0);
257 DEBUGOUT(
"Invalid input. Retry!\r\n");
265 volatile uint8_t *pkey = &
iox_data[0];
266 static int sind = -1;
268 if (sind >=
sizeof(val)) {
276 if (*pkey && pressed) {
279 if (!*pkey && !pressed) {
284 val[3]++; val[3] &= 0x3;
312 for (i = 0; i < tmp; i++) {
327 NVIC_EnableIRQ(
id ==
I2C0 ? I2C0_IRQn : I2C1_IRQn);
331 NVIC_DisableIRQ(
id ==
I2C0 ? I2C0_IRQn : I2C1_IRQn);
355 DEBUGOUT(
"Probing available I2C devices...\r\n");
356 DEBUGOUT(
"\r\n 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F");
357 DEBUGOUT(
"\r\n====================================================");
358 for (i = 0; i <= 0x7F; i++) {
362 if ((i <= 7) || (i > 0x78)) {
387 xfer->
rxSz = xfer->
txSz = sz - buff[0] + 1;
393 static int is_addr = 1;
412 if (seep_xfer.
rxSz == 1) {
420 if (seep_xfer.
txSz == 1) {
472 if (iox_xfer.
txSz == 1) {
549 DEBUGOUT(
"End of I2C Demo! Bye!\r\n");
570 DEBUGOUT(
"Invalid I2C Device [Must be 0 or 1]\r\n");
591 if (xfer.
txSz == 0) {
601 if (!tmp && !xfer.
txSz) {
605 DEBUGOUT(
"Master transfer : %s\r\n",
612 DEBUGOUT(
"Input Invalid! Try Again.\r\n");