硬件i2c中断写入EEPROM里数据,在不初始化MCLK时钟能正常写入数据,
在初始化完MCLK时钟后无法写入数据
请问是什么问题
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 配置以了解时钟基准和 I2C 速度配置。
以及您是怎样初始化MCLK的?两者的区别是什么?
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初始化,请帮我看一下有什么问题,谢谢
param.dataRate = EUSCI_B_I2C_SET_DATA_RATE_400KBPS;
您好,请确保这个速率与新的 SMCLK 相匹配。