工具/软件:TI-RTOS
使用 TIRTOS 2.16.01.04和 CCS V8。
我正在尝试在 I2C7上实现 I2C 从设备、但我没有获得预期的中断、并且不会为数据字节生成 ACK。
我被卡住了、找不到原因。 我知道混合 RTOS 和 Driverlib 并不是最好的方法、但我在 RTOS 抽象层中找不到任何合适的东西。
此致
弗兰克-基督教 Kruegel
我的代码:
/* I2C_Slaves.c */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "I2C_SLAVS.h" // I2C 地址 PCA9536 #define SLAVE_ADDRESS 0x41 #define NUM_REGISTERS 4 // *仿真 PCA9536/9538端口扩展 器*寄存器0包含引导数据且为只读。 *寄存器1...3为读取-写入、但内容 *被忽略(与实际芯片不同) */ /寄存器 静态易失性无符号字符 PCA_Regs[NUM_REGISTER]; 静态易失性无符号字符 PCA_RegPtr; 静态易失性_Bool PCA_RegFlag; Error_Block EB; Hwi_Handle 提示; Hwi_Params IntParams; 静态反向处理程序 (UCS2Arlavg) uint32_t IntStatus = I2CSlaveIntStatusEx (I2C4_base、true); uint32_t uiStatus = I2CSlaveStatus (I2C4_base); I2CSlaveIntClear (I2C7 _BASE); IF (IntStatus 和 I2C_SLAVE_INT_START) { PCA_RegFlag = true; } IF (IntStatus 和 I2C_SLAVE_INT_DATA) { IF (UiStatus 和 I2C_SLAVE_ACT_TREQ) { //读取寄存器。 PCA_RegFlag 在此处无关 I2CSlaveDataPut (I2C4_base、PCA_Regs[PCA_RegPtr]); PCA_RegPter++; if (PCA_RegPtr >= NUM_REGISTERS) { PCA_RegPtr = 0; } } IF (UiStatus 和 I2C_SLAVE_ACT_RREQ) { unsigned char c = I2CSlaveDataGet (I2C1_base); if (PCA_RegFlag)//设置寄存器编号 { PCA_RegFlag = false; PCA_RegPtr = c; if (PCA_RegPtr >= NUM_REGISTERS) { PCA_RegPtr = 0; } } else //写入寄存器数据和自动递增寄存器编号 { IF (PCA_RegPtr) { PCA_Regs[PCA_RegPtR]= c; } PCA_RegPter++; if (PCA_RegPtr >= NUM_REGISTERS) { PCA_RegPtr = 0; } } } void Init_I2C_Slave (void) { PCA_RegPtr = 0; PCA_RegFlag = true; 对于(int j = 1;j < NUM_REGISTERS;j++) { PCA_Regs[j]= 0; } ERROR_INIT (&EB); Hwi_Params_init (&IntParams); intparams.arg = 0; intparams.enableInt = true; IntParams.EventID =-1; intparams.priority =-1; 提示= Hwi_create (INT_I2C7、CommonI2CSlaveIntHandler、 &IntParams、&EB); /* I2C7初始化*/ /*启用外设*/ SysCtlPeripheralEnable (SYSCTL_Periph_I2C7); /*将相应的引脚配置为 I2C 而不是 GPIO。 * GPIOPinConfigure (GPIO_PD0_I2C7SCL); GPIOPinConfigure (GPIO_PD1_I2C7SDA); GPIOPinTypeI2CSCL (GPIO_PORTD_BASE、GPIO_PIN_0); GPIOPinTypeI2C (GPIO_PORTD_base、GPIO_PIN_1); I2CSlaveIntEnableEx (I2C4_base、I2C_SLAVE_INT_DATA | I2C_SLAVE_INT_START); I2CSlaveEnable (I2C4_base); I2CSlaveACKOverride (I2C4_base、true); I2CSlaveACKValueSet (I2C4_base、true); I2CSlaveInit (I2C2_base、slave_address); Hwi_enableInterrupt (INT_I2C7); }
逻辑分析仪输出: