Quantcast
Channel: MSP 低功耗微控制器论坛 - 最近的话题
Viewing all articles
Browse latest Browse all 3634

msp430fr2433 I2C通讯异常

$
0
0

MSP430FR2433平台调试I2C接口时发现通讯异常,表现为进行发送并转换为接收,在接收完预期字节数后,别外产生了多个时钟信号,并且调试程序时发现其死在如下代码(库函数):

多余的时钟(如红框所示):

在库函数基础上编写的I2C读写代码,未使用中断

void I2C_init(void)
{
EUSCI_B_I2C_initMasterParam param = {0};

// Configure Pins for I2C
GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_UCB0SCL,GPIO_PIN_UCB0SCL,GPIO_FUNCTION_UCB0SCL);
GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_UCB0SDA,GPIO_PIN_UCB0SDA,GPIO_FUNCTION_UCB0SDA);

param.selectClockSource = EUSCI_B_I2C_CLOCKSOURCE_SMCLK;
param.i2cClk = CS_getSMCLK();
param.dataRate = EUSCI_B_I2C_SET_DATA_RATE_100KBPS;
param.byteCounterThreshold = 0;
param.autoSTOPGeneration = EUSCI_B_I2C_NO_AUTO_STOP;
EUSCI_B_I2C_initMaster(EUSCI_B0_BASE, &param);

}

void I2C_send_to_receive(uint8_t id, uint8_t *sbuf, uint8_t slen, uint8_t *rbuf, uint8_t rlen)
{
uint16_t i;

while(EUSCI_B_I2C_SENDING_STOP == EUSCI_B_I2C_masterIsStopSent(EUSCI_B0_BASE));

EUSCI_B_I2C_disable(EUSCI_B0_BASE);
EUSCI_B_I2C_setSlaveAddress(EUSCI_B0_BASE, id);
EUSCI_B_I2C_setMode(EUSCI_B0_BASE, EUSCI_B_I2C_TRANSMIT_MODE);
EUSCI_B_I2C_enable(EUSCI_B0_BASE);
//EUSCI_B_I2C_disableInterrupt(EUSCI_B0_BASE, 0xff);

EUSCI_B_I2C_masterSendMultiByteStart(EUSCI_B0_BASE, sbuf[0]);
for(i = 1; i < slen; i++)
{
EUSCI_B_I2C_masterSendMultiByteNext(EUSCI_B0_BASE, sbuf[i]);
}

if(rlen)
{
EUSCI_B_I2C_masterReceiveStart(EUSCI_B0_BASE);
for(i = 0; i < rlen - 1; i++)
{
rbuf[i] = EUSCI_B_I2C_masterReceiveSingle(EUSCI_B0_BASE);
}
rbuf[i] = EUSCI_B_I2C_masterReceiveMultiByteFinish(EUSCI_B0_BASE);
}
else
{
EUSCI_B_I2C_masterSendMultiByteStop(EUSCI_B0_BASE);
}
}

不知程序是否有误?

环境:

MCU:msp430fr2433

供电:3.3VDC

I2C连接器件:HT16L23


Viewing all articles
Browse latest Browse all 3634

Trending Articles