Part Number:MSP430FR6043
硬件i2c中断写入EEPROM里数据,在不初始化MCLK时钟能正常写入数据,
在初始化完MCLK时钟后无法写入数据请问是什么问题
Cherry Zhou:
您好我们已收到您的问题并升级到英文论坛,如有答复将尽快回复您。谢谢!
,
Cherry Zhou:
您好,请您先查看I2C 配置以了解时钟基准和 I2C 速度配置。
以及您是怎样初始化MCLK的?两者的区别是什么?
,
yanan xu:
static void hal_system_ClockInit(void){ FRAMCtl_A_configureWaitStateControl(FRAMCTL_A_ACCESS_TIME_CYCLES_1); // Set DCO frequency to default 16MHz CS_setDCOFreq(CS_DCORSEL_1, CS_DCOFSEL_4); //Set external clock frequency to 32.768 KHz CS_setExternalClockSource(32768,0); //MCLK 16MHz CS_initClockSignal(CS_MCLK, CS_DCOCLK_SELECT, CS_CLOCK_DIVIDER_2); //SMCLK 8MHz CS_initClockSignal(CS_SMCLK, CS_DCOCLK_SELECT, CS_CLOCK_DIVIDER_2); //ACLK 32.768K CS_initClockSignal(CS_ACLK, CS_LFXTCLK_SELECT, CS_CLOCK_DIVIDER_1); // Intializes the XT1 crystal oscillator CS_turnOnLFXT(CS_LFXT_DRIVE_3);
}
void hal_I2cInit(void){
//配置B0时钟源SMLK ,速率, EUSCI_B_I2C_initMasterParam param = {0}; param.selectClockSource = EUSCI_B_I2C_CLOCKSOURCE_SMCLK; param.i2cClk = CS_getSMCLK(); param.dataRate = EUSCI_B_I2C_SET_DATA_RATE_400KBPS; //param.byteCounterThreshold = 10; param.byteCounterThreshold = 0; param.autoSTOPGeneration = EUSCI_B_I2C_NO_AUTO_STOP; //param.autoSTOPGeneration = EUSCI_B_I2C_SEND_STOP_AUTOMATICALLY_ON_BYTECOUNT_THRESHOLD; //设置主模式 EUSCI_B_I2C_initMaster(EeProm_BASE, ¶m); //设置从地址 EUSCI_B_I2C_setSlaveAddress(EeProm_BASE,EEPROM_ADDRESS); EUSCI_B_I2C_setMode(EeProm_BASE, EUSCI_B_I2C_TRANSMIT_MODE); //写入模式
//使能B0 EUSCI_B_I2C_enable(EeProm_BASE);
//清除发送中断,应答中断 EUSCI_B_I2C_clearInterrupt(EeProm_BASE, EUSCI_B_I2C_TRANSMIT_INTERRUPT0 + EUSCI_B_I2C_NAK_INTERRUPT );
EUSCI_B_I2C_enableInterrupt(EeProm_BASE, EUSCI_B_I2C_TRANSMIT_INTERRUPT0 + EUSCI_B_I2C_NAK_INTERRUPT );
}
这是我设置的时钟初始化和I2C初始化,请帮我看一下有什么问题,谢谢
,
Cherry Zhou:
好的收到您的反馈,已经跟进给工程师,有新的消息会尽快跟进给您。
,
Cherry Zhou:
yanan xu 说:param.dataRate = EUSCI_B_I2C_SET_DATA_RATE_400KBPS;
您好,请确保这个速率与新的 SMCLK 相匹配。
,
yanan xu:
速率是正确的,用示波器测过波形
,
Cherry Zhou:
您好,您看下总线上有NACK吗?EEPROM承认或者能否识别到master?与 EEPROM 通信时,波形有没有和其他波形不同的地方?