This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
大家好! 我正在尝试通过 I2C 连接并使用 EEPROM 24LC1025运行以下程序、但它正在锁定且不会按照所述退出循环:
//将数据复制到 I2CBufferArray unsigned char temp; for (i;i < bufferPtr;i++) { 温度=数据[i]; //必需,否则 IAR 抛出 //警告[Pa082] I2CBufferArray[counterI2cBuffer]= temp; counterI2c 缓冲器--; }
#define I2C_PORT_SEL P3SEL #define I2C_PORT_OUT P3OUT #define I2C_PORT_REN P3REN #define I2C_PORT_DIR P3DIR #define SDA_PIN BIT0 // UCB0SDA 引脚 P3.0 #define SCL_PIN BIT1 // UCB.S 引脚 P3.1 #define SCL_CLOCK _DIV 0x0A // SCL 时钟偏差 void InitI2C (unsigned char EEPROM_i2c_address); void EEPROM_ByteWrite (unsigned int Address、unsigned char PageWrite (unsigned int StartAddress、unsigned char * Data、unsigned int Size); unsigned char EEPROM_RandomRead (unsigned char EEPROM CurrentAddress);unsigned char EEPROM_CurrentRefad (unsigned int Data)、void int Resize、void int Data; void EEPROM_AckPolling (void);
#include #include "I2Croutines.h" #define MAXPAGEWRITE 64 int PtrTransmit; unsigned char I2CBufferArray[66]; unsigned char I2CBuffer; /*--------------- */ //说明: // I2C 模块的初始化 /*--------------- */ void InitI2C (unsigned char EEPROM_i2c_address) { I2C_PORT_DIR |= SDA_PIN + SCL_PIN; I2C_PORT_SEL |= SDA_PIN + SCL_PIN; //将 I2C 引脚分配给 USCI_B0 I2C_PORT_OUT |= SDA_PIN + SCL_PIN; //将 I2C 引脚分配给 USCI_B0 //用户指南中显示的 I2C 模块的建议初始化步骤: UCB0CTL1 |= UCSWRST; //启用 SW 复位 UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC; // I2C 主设备,同步模式 UCB0CTL1 = UCSSEL_2 + UCTR + UCSWRST; //使用 SMCLK、TX 模式、保持软件复位 UCB0BR0 = SCL_CLOCK_DIV; // fSCL = SMCLK/11 = 95.3kHz UCB0BR1 = 0; UCB0I2CSA = EEPROM_i2c_address; //定义从机地址 //在本例中为从地址 //定义控制字节 //发送到 EEPROM。 //UCB0I2COA = 0x01A5; //自己的地址。 UCB0IE |= UCTXIE + UCRXIE + UCNACKIE; UCB0CTL1 &=~UCSWRST; //清除 SW 复位、 如果(UCB0STAT 和 UCBBUSY)则恢复运行 //测试总线是否空 闲{ //否则手动时钟打开 //生成 I2C_PORT_SEL &=~SCL_PIN; //为 SCL 选择端口功能 I2C_PORT_OUT &=~SCL_PIN; // I2C_PORT_DIR |= SCL_PIN; //将 SCL 驱动为低电平 I2C_PORT_SEL |= SDA_PIN + SCL_PIN; //选择的模块功能 //使用的 I2C 引脚 }; __ENABLE_INTERRUPT();}/*--><!--kadov_tag{</spaces>}}--> // 说明: //初始化 I2C 模块以执行写操作。 /*------------------ */ void I2CWriteInit (void) { UCB0CTL1 |= UCTR; // UCTR=1 =>发送模式(R/W 位= 0) UCB0IFG &&~UCTXIFG; UCB0IE &&=~UCRXIE; //禁用接收就绪中断 UCB0IE |= UCTXIE; //启用发送就绪中断}/--><!--kadov_tag{{</spaces>}/--><!--kadov_tag{</spaces>}}--> */ /说明: // I2C 模块初始化以执行读取操作。 /*------------------ */ void I2CReadInit (void) { UCB0CTL1 &=~UCTR; // UCTL=0 =>接收模式(R/W 位= 1) UCB0IFG &&~UCRXIFG; UCB0IE &&~UCTXIE; //禁用发送就绪中断 UCB0IE |= UCRXIE; //启用接收就绪中断}/--><!--kadov_tag{{</spaces>}/--><!--kadov_tag{</spaces>}}--> */ //说明: //字节写入操作。 通过 I2C 总线与 EEPROM //(2465)进行通信。 一个数据字节被写入一个用户定义的地址。 /*------------------ // void EEPROM_ByteWrite (unsigned int Address、unsigned char Data) { unsigned char ADR_hi; unsigned char ADR_lo; while (UCB0STAT 和 UCBUSY); //等待 I2C 模块具有 //完成所有操作。 ADR_HI =地址>> 8; //计算高字节 ADR_LO =地址和0xFF; //和地址 I2CBufferArray[2]的低字节= ADR_HI; //低字节地址。 I2CBufferArray[1]= ADR_lo; //高字节地址。 I2CBufferArray[0]=数据; PtrTransmit = 2; //设置 I2CBufferArray 指针 I2CWriteInit(); UCB0CTL1 |= UCTXSTT; //开始条件生成 //=> I2C 通信开始 __bis_SR_register (LPM3_bits + GIE); //通过中断 UCB0CTL1输入 LPM0 |= UCTXSTP; // I2C 停止条件 while (UCB0CTL1 & UCTXSTP); //确保已发送停止条件}/*--><!--kadov_tag{{</spaces>}--><!--kadov_tag{</spaces>}--><!--kadov_tag{</spaces>}--><!--kadov_tag{</spaces>}--><!--kadov_tag{</spaces>}}--> */ //说明: //页写操作。 通过 I2C 总线与 EEPROM //(24xx65)进行通信。 一个数据字节被写入一个用户定义的地址。 /*------------------ // void EEPROM_PageWrite (unsigned int StartAddress、unsigned char * Data、unsigned int size) { volatile unsigned int i = 0; volatile unsigned char counterI2cBuffer; unsigned char ADR_hi; unsigned char currentAddress = StartAddress; unsigned int currentSize = size;unsigned int bufferPtr = 0; unsigned char moreToDataRead = 1;unsign while (UCB0STAT 和 UCBUSY); //等待 I2C 模块具有 //完成所有操作。 //执行直到数据缓冲区中没有更多数据 while (moreDataToRead) { ADR_HI =电流地址>> 8; //计算高字节 ADR_lo =电流地址和0xFF; //和低字节地址 //一次发送低至64字节数据包的斩波数据 //保持当前起始地址的指针 if (currentSize > MAXPAGEWRITE) { bufferPtr = bufferPtr + MAXPAGEWRITE; counterI2cBuffer = MAXPAGEWRITE - 1; PtrTransmit = MAXPAGEWRITE + 1; //设置 I2CBufferArray 指针 currentSize = currentSize - MAXPAGEWRITE; currentAddress = currentAddress + MAXPAGEWRITE; //获取起始地址 I2CBufferArray[MAXPAGEWRITE + 1]= ADR_HI;//高字节地址。 I2CBufferArray[MAXPAGEWRITE]= ADR_LO;//低字节地址 。} 其他 { bufferPtr = bufferPtr + currentSize; counterI2cBuffer =当前大小-1; PtrTransmit = currentSize + 1; //设置 I2CBufferArray 指针。 MoreDataToRead = 0; currentAddress = currentAddress + currentSize; //获取起始地址 I2CBufferArray[currentSize + 1]= ADR_HI;//高字节地址。 I2CBufferArray[电流大小]= ADR_lo;//低字节地址 。} //将数据复制到 I2CBufferArray unsigned char temp; for (i;i < bufferPtr;i++) { 温度=数据[i]; //必需,否则 IAR 抛出 //警告[Pa082] I2CBufferArray[counterI2cBuffer]= temp; counterI2c 缓冲器--; } I2CWriteInit(); UCB0CTL1 |= UCTXSTT; //开始条件生成 //=> I2C 通信开始 _bis_SR_register (LPM3_bits + GIE); //输入带中断的 LPM0 UCB0CTL1 |= UCTXSTP; // I2C 停止条件 while (UCB0CTL1 & UCTXSTP); //确保发送了停止条件 EEPROM_AckPolling(); //确保数据被写入 EEPROM } }-->----------------- // //说明: //当前地址读取操作。 从 EEPROM 读取数据。 使用来自 EEPROM 的当前//地址。 /*------------------ // unsigned char EEPROM_CurrentAddressRead (void) { while (UCB0STAT 和 UCBUSY); //等待 I2C 模块具有 //完成所有操作 I2CReadInit(); UCB0CTL1 |= UCTXSTT; // I2C 启动条件 while (UCB0CTL1 & UCTXSTT); //起始条件是否已发送? UCB0CTL1 |= UCTXSTP; // I2C 停止条件 _ bis_SR_register (LPM3_bits + GIE); //通过中断 while (UCB0CTL1 & UCTXSTP)输入 LPM0; //确保停止条件已发送 返回 I2CBuffer; }-->--------------- */ //说明: //随机读取操作。 从 EEPROM 读取数据。 EEPROM //地址由参数 Address 定义。 /*------------------ // unsigned char EEPROM_RandomRead (unsigned int Address) { unsigned char ADR_hi; unsigned char ADR_lo; while (UCB0STAT & UCBUSY); //等待 I2C 模块具有 //完成所有操作 ADR_HI =地址>> 8; //计算高字节 ADR_LO =地址和0xFF; //和地址 I2CBufferArray[1]的低字节= ADR_HI; //存储必须 包含 I2CBufferArray[0]= ADR_lo 的单字节; //在 I2CBuffer 中发送。 PtrTransmit = 1; //设置 I2CBufferArray 指针 //写入地址优先 I2CWriteInit(); UCB0CTL1 |= UCTXSTT; //开始条件生成 //=> I2C 通信开始 __bis_SR_register (LPM3_bits + GIE); //输入带中断的 LPM0 //读取数据字节 I2CReadInit(); UCB0CTL1 |= UCTXSTT; // I2C 启动条件 while (UCB0CTL1 & UCTXSTT); //起始条件是否已发送? UCB0CTL1 |= UCTXSTP; // I2C 停止条件 _ bis_SR_register (LPM3_bits + GIE); //通过中断 while (UCB0CTL1 & UCTXSTP)输入 LPM0; //确保停止条件已发送 返回 I2CBuffer; }-->--------------- */ //说明: //顺序读取操作。 数据从 EEPROM 以顺序 //形式从作为起点的参数地址读取。 指定 要读取的//大小并填充到数据缓冲区。 /*------------------ // void EEPROM_SequentialRead (unsigned int Address、unsigned char * Data、unsigned int size) { unsigned char ADR_hi; unsigned char ADR_lo; unsigned int counterSize; while (UCB0STAT 和 UCBUSY); //等待 I2C 模块具有 //完成所有操作 ADR_HI =地址>> 8; //计算高字节 ADR_LO =地址和0xFF; //和地址 I2CBufferArray[1]的低字节= ADR_HI; //存储必须 包含 I2CBufferArray[0]= ADR_lo 的单字节; //在 I2CBuffer 中发送。 PtrTransmit = 1; //设置 I2CBufferArray 指针 //写入地址优先 I2CWriteInit(); UCB0CTL1 |= UCTXSTT; //开始条件生成 //=> I2C 通信开始 __bis_SR_register (LPM3_bits + GIE); //输入带中断的 LPM0 //读取数据字节 I2CReadInit(); UCB0CTL1 |= UCTXSTT; // I2C 启动条件 while (UCB0CTL1 & UCTXSTT); //起始条件是否已发送? for (counterSize = 0;counterSize < size;counterSize++) { _bis_SR_register (LPM3_bits + GIE); //输入带中断的 LPM0 DATA[counterSize]= I2CBuffer; } UCB0CTL1 |= UCTXSTP; // I2C 停止条件 _ bis_SR_register (LPM3_bits + GIE); //通过中断 while (UCB0CTL1 & UCTXSTP)输入 LPM0; //确保已发送停止条件}/*--><!--kadov_tag{{</spaces>}--><!--kadov_tag{</spaces>}--><!--kadov_tag{</spaces>}--><!--kadov_tag{</spaces>}--><!--kadov_tag{</spaces>}}--> // //说明: //确认轮询。 如果写入周期为 //正在进行、EEPROM 将不会应答。 它可用于确定写入周期何时完成。 /*------------------ * / void EEPROM_AckPolling (void) { while (UCB0STAT 和 UCBUSY); //等待 I2C 模块具有 //完成所有操作 都执行 { UCB0STAT = 0x00; //清除 I2C 中断标志 UCB0CTL1 |= UCTR; // I2CTRX=1 =>发送模式(R/W 位= 0) UCB0CTL1 &=~UCTXSTT; UCB0CTL1 |= UCTXSTT; //起始条件已生成 while (UCB0CTL1和 UCTXSTT) //等待 I2CSTT 位被清零 { if (!(UCNACKIFG & UCB0STAT)) //如果收到 ACK 则分接 中断; } UCB0CTL1 |= UCTXSTP; //停止条件在之后生成 //发送从器件地址=> I2C 通信开始 while (UCB0CTL1 & UCTXSTP); //等待停止位被复位 _delay_cycles (500); //软件延迟 }while (UCNACKIFG & UCB0STAT); }/--><!------------------- */ *中断服务例程 */ * 请注意、编译器版本在以下代码和*/ /*中进行检查 根据编译器版本、正确的中断服务 */ * 例程定义。 // #if defined (__TI_Compiler_version__)|| defined (__IAR_systems_icc_) #pragma vector=USCI_B0_vector __interrupt void USCI_B0_ISR (void) #Elif defined (__GSCI__) void __attribute__((interrupt (USCI_B0_ISR vector)#vector 0 (void ) UICS_编译器#UIC_不支持! #endif { if (UCTXIFG & UCB0IFG) { UCB0TXBUF = I2CBufferArray[PtrTransmit];//加载 TX 缓冲区 PtrTransmit ----; //测量 TX 字节计数器 if (PtrTransmit < 0) { while (!(UCB0IFG & UCTXIFG)); // USCI_B0 TX 缓冲器就绪? UCB0IE &=~UCTXIE; //禁用中断。 UCB0IFG &=~UCTXIFG; //清除 USCI_B0 TX int 标志 __BIC_SR_REGISTER_ON_EXIT (LPM3_BITS);//退出 LPM0 } } 否则、if (UCRXIFG & UCB0IFG) { I2CBuffer = UCB0RXBUF; //将接收到的数据存储在缓冲区中 __BIC_SR_REGISTER_ON_EXIT (LPM3_BITS);//退出 LPM0 }
#include #include "I2Croutines.h" #include #include #include #include #include #include #include // // // Endereço (s) da (s) Memória (s)执行数据记录器 //// ************* // #define BANCO1 0x50 // Endereço 0x50 DO Banco 0 da EEPROM 24LC1025 #define BANCO2 0x54 // Endereço 0x51 DO Banco 1 da EEPROM 24LC1025 #define BANCO3 0x51 // Endereço 0x54 DO Banco 0 da EEPROM 24LC1025 #define BANCO4 0x55 // Endereço 0x55 DO Banco 1 da EEPROM 24LC1025 unsigned char VerNome[33]="Teste com Constania EEPROM 24LC1025"; unsigned char Unidade_Coletado[5]="m3/h"; unsigned int MS_Byte、LS_Byte; unsigned int Memoria = 65535; char * Gerateriro = 3.345 ;unsigned int ponteia_length;unsigned int void main (void) { WDTCTL = WDTPW + WDTHOLD; //去稳定性 o WDT //设置 XT1 P5SEL |= BIT4+BIT5; //选择 XT1 UCSCTL6 &=~(XT1OFF); // UCSCTL6上的 XT1 |= XCAP_3; //内部负载电容 UCSCTL3 = 0; // FLL 参考时钟= XT1 //SFRIE1 = OFIE; //启用 osc 故障中断 //禁用 VUSB LDO 和 SLDO USBKEYPID = 0x9628; //将 USB KEYandPID 设置为0x9628 //启用对 USB 配置寄存器的访问 USBPWRCTL &=~(SLDOEN + VUSBEN); //禁用 VUSB LDO 和 SLDO USBKEYPID = 0x9600; //禁用对 USB 配置寄存器的访问 //禁用 SVS PMMCTL0_H = PMMPW_H; // PMM Password SVSMHCTL &=~(SVMHE+SVSHE); //禁用高侧 SVS SVSMLCTL &=~(SVMLE+SVSLE); //禁用低侧 SVS // P1.2/TA0.1 P1DIR |= BIT0; // P1.0输出 RTCCTL01 = RTCTEV_3; RTCPS0CTL = RT0PSDIV_7; //将 RTPS0设定为/256 RTCPS1CTL = RT1IP_6 + RT1PSIE + RT1SSEL_3;//将 RT1IP 设定为/4、启用 // RT1PS 中断并选择 // RTOPS 输出作为时钟 // Rotina para Recuperação de Dados do Nome Aido 支流数据记录器 anteriormente // Rotinas para Recuperação de Dados do Fator da Vazão Unidade Coletado e Intervalo Coletado Adimido ao 数据记录器 anteriormente InitI2C(Banco1); //初始化 o Bankco1 da Memória EEPROM EEPROM_PageWrite (0、VerNome、32); // Salva na Memória EEPROM o Nome dado ao 数据记录器 for (length=0;length<=32;length++) { VerNome[length]='; } EEPROM_SequentialRead (0,VerNome,33); // Resgata o último Nome Dado ao 数据记录器 EEPROM_PageWrite (34、Unidade_Coletado、5); for (length=0;length<=4;length++) { Unidade_Coletado[length]= 0; } EEPROM_SequentialRead (34,Unidade_Coletado,5); MS_Byte =内存; // Carrega o Valor Mais significativo MSD LS_Byte = Memorya>>8; // Carrega o Valor menos significativo LSD Memoria = 0; EEPROM_ByteWrite (40、MS_Byte); // Escreve na EEPROM o Byte MSB com o valor do Endereço da última Memória EEPROM_AckPolling(); // Verifica se completou o ciclo de escrica na EEPROM EEPROM_ByteWrite (41、LS_Byte); // Escreve na EEPROM o Byte LSB com o valor do Endereço da última Memória EEPROM_AckPolling(); // Verifica se completou o ciclo de escrica na EEPROM Memoria = EEPROM_RandomRead (40); // Efetua a Leitura na EEPROM do Byte com o valor do último Endereço de Memória Salvo Memoria |=(unsigned int) EEPROM_RandomRead (41)<<8); Ponteiro_Geral =(无符号字符*)&Constante_Batteria; // Armazena o Valor da Constante da Bateria no Ponteiro 32位 EEPROM_ByteWrite (42,* Ponteiro_Geral++); // Escreve na EEPROM o Byte com o valor da Constantte da Bateria EEPROM_AckPolling(); // Verifica se completou o ciclo de escrica na EEPROM EEPROM_ByteWrite (43、* Ponteiro_Geral++); // Escreve na EEPROM o Byte com o valor da Constantte da Bateria EEPROM_AckPolling(); // Verifica se completou o ciclo de escrica na EEPROM EEPROM_ByteWrite (44、* Ponteiro_Geral++); // Escreve na EEPROM o Byte com o valor da Constantte da Bateria EEPROM_AckPolling(); // Verifica se completou o ciclo de escrica na EEPROM EEPROM_ByteWrite (45、* Ponteiro_Geral++); // Escreve na EEPROM o Byte com o valor da Constantte da Bateria EEPROM_AckPolling(); // Verifica se completou o ciclo de escrica na EEPROM EEPROM_ByteWrite (46、* Ponteiro_Geral); // Escreve na EEPROM o Byte com o valor da Constantte da Bateria EEPROM_AckPolling(); // Verifica se completou o ciclo de escrica na EEPROM * Ponteiro_Geral = 0; // Reseta a Variável de Ponteiro para Novo Cilco constante_Batteria = 0.0; Ponteiro_Geral =(无符号字符*)&Constante_Batteria; // Efetua a Leitura dos Dados do Fator de Vazão Coletado anteriormente na EEPROM por Ponteiro * Ponteiro_Geral++= EEPROM_RandomRead (42); *Ponteiro_Geral++= EEPROM_RandomRead (43); *Ponteiro_Geral++= EEPROM_RandomRead (44); *Ponteiro_Geral++= EEPROM_RandomRead (45); *Ponteiro_Geral = EEPROM_RandomRead (46); // Rotinas para Recuperação de Dados do Fator da Vazão Unidade Coletado e Intervalo Coletado Atidido 数据记录器 anteriormente InitI2C (Banco2); //初始化 o Bankco1 da Memória EEPROM EEPROM_PageWrite (0、VerNome、33); // Salva na Memória EEPROM o Nome dado ao 数据记录器 for (length=0;length<=32;length++) { VerNome[length]= 0; } EEPROM_SequentialRead (0,VerNome,33); // Resgata o último Nome Dado ao 数据记录器 EEPROM_PageWrite (34、Unidade_Coletado、5); for (length=0;length<=4;length++) { Unidade_Coletado[length]= 0; } EEPROM_SequentialRead (34,Unidade_Coletado,5); MS_Byte =内存; // Carrega o Valor Mais significativo MSD LS_Byte = Memorya>>8; // Carrega o Valor menos significativo LSD Memoria = 0; EEPROM_ByteWrite (40、MS_Byte); // Escreve na EEPROM o Byte MSB com o valor do Endereço da última Memória EEPROM_AckPolling(); // Verifica se completou o ciclo de escrica na EEPROM EEPROM_ByteWrite (41、LS_Byte); // Escreve na EEPROM o Byte LSB com o valor do Endereço da última Memória EEPROM_AckPolling(); // Verifica se completou o ciclo de escrica na EEPROM Memoria = EEPROM_RandomRead (40); // Efetua a Leitura na EEPROM do Byte com o valor do último Endereço de Memória Salvo Memoria |=(unsigned int) EEPROM_RandomRead (41)<<8); Ponteiro_Geral =(无符号字符*)&Constante_Batteria; // Armazena o Valor da Constante da Bateria no Ponteiro 32位 EEPROM_ByteWrite (42,* Ponteiro_Geral++); // Escreve na EEPROM o Byte com o valor da Constantte da Bateria EEPROM_AckPolling(); // Verifica se completou o ciclo de escrica na EEPROM EEPROM_ByteWrite (43、* Ponteiro_Geral++); // Escreve na EEPROM o Byte com o valor da Constantte da Bateria EEPROM_AckPolling(); // Verifica se completou o ciclo de escrica na EEPROM EEPROM_ByteWrite (44、* Ponteiro_Geral++); // Escreve na EEPROM o Byte com o valor da Constantte da Bateria EEPROM_AckPolling(); // Verifica se completou o ciclo de escrica na EEPROM EEPROM_ByteWrite (45、* Ponteiro_Geral++); // Escreve na EEPROM o Byte com o valor da Constantte da Bateria EEPROM_AckPolling(); // Verifica se completou o ciclo de escrica na EEPROM EEPROM_ByteWrite (46、* Ponteiro_Geral); // Escreve na EEPROM o Byte com o valor da Constantte da Bateria EEPROM_AckPolling(); // Verifica se completou o ciclo de escrica na EEPROM * Ponteiro_Geral = 0; // Reseta a Variável de Ponteiro para Novo Cilco constante_Batteria = 0.0; Ponteiro_Geral =(无符号字符*)&Constante_Batteria; // Efetua a Leitura dos Dados do Fator de Vazão Coletado anteriormente na EEPROM por Ponteiro * Ponteiro_Geral++= EEPROM_RandomRead (42); *Ponteiro_Geral++= EEPROM_RandomRead (43); *Ponteiro_Geral++= EEPROM_RandomRead (44); *Ponteiro_Geral++= EEPROM_RandomRead (45); *Ponteiro_Geral = EEPROM_RandomRead (46); 执行{ _bis_SR_register (LPM3_bits + GIE); __no_operation(); } while (1); __bis_SR_register (LPM3_bits + GIE); } // RTC 中断服务例程 #if defined (__TI_Compiler_version__)|| defined (__IAR_systems_ICC__) #pragma vector=RTC_vector __interrupt void RTC_ISR (void) #Elif defined (__IAR_systems_systems_ic_)(void )#pragma COMPLECTION_ICC_(void)(#pragma COMPLEC_(void)(void)(#pragma COMPLEC_)(void)(#_ #endif { P1OUT ^= 0x01; //切换 P1.0 RTCCTL01 &=~RTCTEVIFG; RTCPS1CTL &=~RT1PSIFG; }
您好 Anderson、
请看下面的示例代码。 您是否能够成功运行此代码?
您好 Eddie!
感谢您的反馈!
我通过 IAR 和 MSP430F5529LP 套件调试此示例、它在以下位置挂起:
void EEPROM_AckPolling (void)
{
。
。
while (UCB0CTL1 & UCTXSTP);
_delay_cycles (500);
while (UCNACKIFG 和 UCB0STAT);
}
RTC 中断正常运行。
我们已经在 MSP430FG4618的产品中使用了这个库、它运行得很好。
我们现在需要开始将 MSP430F5529与此库一起使用。
我在其他主题中看到人们也会遇到同样的问题。
您能否仿真和调试此示例以验证 USCB0的行为?