Part Number: AM263P4-Q1
Other Parts Discussed in Thread: SYSCONFIG
I have configured the I2C Enable Interrupt settings in SysConfig as follows:
I2C1: Enable (Blocking)
I2C2: Enable (Blocking)
I2C3: Disable (Polling)
With this configuration, when performing I2C control on the same core with the following task structure, an undefined instruction exception occurs:
Task A: Uses I2C1 and I2C2 (calls I2C_transfer())
Task B: Uses I2C3 (calls EEPROM_read/write(), which internally uses I2C_transfer())
When I set a breakpoint at address 0x0 in the debugger, the program stopped at PC=0x0 when the issue occurred (this appears to be a NULL access).
Troubleshooting Results
1. Removed I2C_transfer() call for I2C2
-> Undefined instruction exception does not occur
2. Unified all I2C1-I2C3 to Enable (Blocking)
-> Undefined instruction exception does not occur
3. Unified all I2C1-I2C3 to Disable (Polling)
-> Undefined instruction exception does not occur
Based on the above results, the exception appears to occur only when:
- Interrupt Enable settings are mixed (I2C1/2: Enable, I2C3: Disable)
- Multiple I2C instances are used concurrently from multiple tasks
Questions
1. In the I2C driver, is mixing Enable Interrupt settings across I2C instances within the system (e.g., I2C1/2 with interrupts enabled, I2C3 with interrupts disabled) unsupported or prohibited by specification?
2. In configurations with interrupts enabled, is it possible to mix "Blocking" and "Callback" transfer modes?
Note: I am using AM263Px MCU+ SDK 09.02.00



