问答

汇集网友智慧,解决技术难题

南京棣拓

TA的家园币:12  

  • 关于PIC18F25K42的I2C通讯问题

    MCU型号:PIC18F25K42实现功能:做I2C从机,只接收主机发送的数据即可,不需要发送数据给主机,每次数据包长度为2个字节,发送间隔大约44ms左右。问题描述:在设备初始化后,从机可以接收到主机发送来的数据,但是一般在接收到几个数据包后,从机的I2C就会出现问题。1、通过逻辑分析仪看出,出问题那个数据包,最后一个字节的第8个时钟拉低后就一直处于低状态,导致I2C无法正常工作。2、通过debug发现,出问题那个数据包,程序是没有进入I2C中断的。3、出问题后I2C的时钟线一直处于被拉低状态,直到对从机复位,才可以恢复正常。后期经过调试发现,只要在I2C的中断里面加上几十个NOP();这个问题就可以解决。想请教下有没有大牛可以帮忙解答下困惑,谢谢!程序代码都是通过MCC生成的。I2C的初始化配置voidI2C1_Initialize(void){//ADR34;I2C1ADR0=0x22;//ADR127;I2C1ADR1=0xFE;//ADR0;I2C1ADR2=0x00;//ADR0;I2C1ADR3=0x00;//TXU0;CSDClockStretchingenabled;ACKT0;RXO0;ACKDTAcknowledge;ACKSTATACKreceived;ACKCNTNotAcknowledge;I2C1CON1=0x80;//ABDenabled;GCENdisabled;ACNTdisabled;SDAHT300nsholdtime;BFRET8I2CClockpulses;FMEdisabled;I2C1CON2=0x00;//CLKFosc/4;I2C1CLK=0x00;//CNT255;I2C1CNT=0xFF;//CSTREnableclocking;SClearedbyhardwareafterStart;MODEfour7-bitaddress;ENenabled;RSENdisabled;I2C1CON0=0x80;PIR2bits.I2C1RXIF=0;PIR3bits.I2C1TXIF=0;PIR3bits.I2C1EIF=0;I2C1ERRbits.NACKIF=0;PIR3bits.I2C1IF=0;I2C1PIRbits.PCIF=0;I2C1PIRbits.ADRIF=0;PIE2bits.I2C1RXIE=1;//enableI2CRXinterruptPIE3bits.I2C1TXIE=1;//enableI2CTXinterruptPIE3bits.I2C1EIE=1;//enableI2CerrorinterruptI2C1ERRbits.NACKIE=1;//enableI2CerrorinterruptforNACKPIE3bits.I2C1IE=1;//enableI2CinterruptI2C1PIEbits.PCIE=1;//enableI2CinterruptforstopconditionI2C1PIEbits.ADRIE

    PIC18 I2c PIC18F 通讯 TE

    2022-09-06 4