工具与软件:
您好!
该代码有其他 I2C 子例程可以运行、但出于某种原因、未发生 I2C 中断、并且 IRQ 处理程序未从此子例程进入。
有什么建议吗?
谢谢!
Dave
PS。 生成中断。
void readADC_VZ ()
{
int adc_add = 0x14、adc_config = 0x80、adc_ch = 0xB0;//对于 ADC 通道0、Vz。
unsigned char 值[2]="";
NVIC_EnableIRQ (I2C_BRIDGE_INST_INT_IRQN); //启用 I2C 控制器中断处理程序
delay_cycles (1000);
值[0]= ADC_ch;
Values[1]= ADC_CONFIG;
gI2C_Length = 2;
gI2C_Count = DL_I2C_fillControllerTXFIFO (I2C_BRIDGE_INST、&VALUE[0]、gI2C_Length); // FIFO 为8字节深。
gI2cControllerStatus = I2C_STATUS_TX_START;
while (! (DL_I2C_getControllerStatus (I2C_BRIDGE_INST)和 DL_I2C_CONTROLLER_STATUS_IDLE);
DL_I2C_startControllerTransfer (I2C_BRIDGE_INST、ADC_ADD、DL_I2C_CONTROLLER_DIRECTION_TX、gI2C_Length);
/*等待直到控制器发送所有字节而没有 NACK */
while ((gI2cControllerStatus!= I2C_STATUS_TX_COMPLETE)&&(gI2cControllerStatus!= I2C_STATUS_ERROR)){_WFE ();}
while (DL_I2C_getControllerStatus (I2C_BRIDGE_INST)和 DL_I2C_CONTROLLER_STATUS_BUS_BUS);
while (!(DL_I2C_getControllerStatus (I2C_BRIDGE_INST)和 DL_I2C_CONTROLLER_STATUS_IDLE));
如果(gI2cControllerStatus!= I2C_STATUS_ERROR)、gOPUStatus = gOPUStatus & 0xFB;
否则 gOPUStatus = gOPUStatus | 0x04;
NVIC_DisableIRQ (I2C_BRIDGE_INST_INT_IRQN); //禁用 I2C 控制器中断处理程序
}