Other Parts Discussed in Thread: LP-MSPM0C1104
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: MSPM0C1104
您好:
我正在努力 在 LP-MSPM0C1104 修订版 B 上实现 I2C
我已经测试引脚是否连接到了跳线连接的引脚。 跳线 J8 和 J6 接通、选择 PA0 和 PA11 的上拉电阻为 3.3V。
其他连接的跳线:所有 J10x、J7、J9。
我的代码基于一个示例应用。
在跳线上测量时得到第一幅图像、在输出引脚上测量时得到第二幅图像。
任何解决方案或想法为何会发生这种情况?


#define I2C_TX_MAX_PACKET_SIZE (8) /* Maximum size of TX packet */
#define I2C_TX_PACKET_SIZE (8) /* Number of bytes to send to target device */
#define I2C_RX_MAX_PACKET_SIZE (8) /* Maximum size of RX packet */
#define I2C_RX_PACKET_SIZE (8) /* Number of bytes to received from target */
#define I2C_TARGET_ADDRESS (0x4C) /* I2C Target address */
uint8_t gTxPacket[I2C_TX_MAX_PACKET_SIZE] = {0x00, 0x01, 0x02, 0x03, 0x04,
0x05, 0x06, 0x07/* , 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F */};
uint32_t gTxLen, gTxCount;
uint8_t gRxPacket[I2C_RX_MAX_PACKET_SIZE];
uint32_t gRxLen, gRxCount;
int main (void)
{
SYSCFG_DL_init();
NVIC_EnableIRQ(I2C_0_INST_INT_IRQN);
DL_SYSCTL_disableSleepOnExit();
gI2cControllerStatus = I2C_STATUS_IDLE;
gTxLen = I2C_TX_PACKET_SIZE;
/*
* Fill the FIFO
* The FIFO is 8-bytes deep, and this function will return number
* of bytes written to FIFO */
gTxCount = DL_I2C_fillControllerTXFIFO(I2C_0_INST, &gTxPacket[0], gTxLen);
/* Enable TXFIFO trigger interrupt if there are more bytes to send */
if (gTxCount < gTxLen) {
DL_I2C_enableInterrupt(
I2C_0_INST, DL_I2C_INTERRUPT_CONTROLLER_TXFIFO_TRIGGER);
} else {
DL_I2C_disableInterrupt(
I2C_0_INST, DL_I2C_INTERRUPT_CONTROLLER_TXFIFO_TRIGGER);
}
/*
* Send the packet to the controller.
* This function will send Start + Stop automatically.
*/
gI2cControllerStatus = I2C_STATUS_TX_STARTED;
while (!(
DL_I2C_getControllerStatus(I2C_0_INST) & DL_I2C_CONTROLLER_STATUS_IDLE))
;
DL_I2C_startControllerTransfer(
I2C_0_INST, I2C_TARGET_ADDRESS, DL_I2C_CONTROLLER_DIRECTION_TX, gTxLen);
/* Wait until the Controller sends all bytes */
while ((gI2cControllerStatus != I2C_STATUS_TX_COMPLETE) &&
(gI2cControllerStatus != I2C_STATUS_ERROR)) {
__WFE();
}
while (DL_I2C_getControllerStatus(I2C_0_INST) &
DL_I2C_CONTROLLER_STATUS_BUSY_BUS)
;
/* Trap if there was an error */
if (DL_I2C_getControllerStatus(I2C_0_INST) &
DL_I2C_CONTROLLER_STATUS_ERROR) {
/* LED will remain high if there is an error */
__BKPT(0);
}
while (!(
DL_I2C_getControllerStatus(I2C_0_INST) & DL_I2C_CONTROLLER_STATUS_IDLE))
;
/* Add delay between transfers */
delay_cycles(1000);
/* Send a read request to Target */
gRxLen = I2C_RX_PACKET_SIZE;
gRxCount = 0;
gI2cControllerStatus = I2C_STATUS_RX_STARTED;
DL_I2C_startControllerTransfer(
I2C_0_INST, I2C_TARGET_ADDRESS, DL_I2C_CONTROLLER_DIRECTION_RX, gRxLen);
/* Wait for all bytes to be received in interrupt */
while (gI2cControllerStatus != I2C_STATUS_RX_COMPLETE) {
__WFE();
}
while (DL_I2C_getControllerStatus(I2C_0_INST) &
DL_I2C_CONTROLLER_STATUS_BUSY_BUS)
;
/* If write and read were successful, toggle LED */
while (1) {
delay_cycles(16000000);
}
}
此致、
右侧