工具/软件:
您好、
我遇到 I2C5 模块的问题、无法与来自该 IFC 的从器件建立通信;在示波器上、我看到两个引脚均设置为逻辑低电平
我已将 MDIO_MDC_SEL0 设置为高电平、并通过示波器进行了物理验证。
为相应的 SCL、SDA 引脚配置了引脚多路复用、
HW_WR_REG32 ((0x0011C150)、PIN_MODE (2)|((PIN_PULL_DISABLE | PIN_INPUT_ENABLE) 和 (~PIN_PULL_DIRECTION));
HW_WR_REG32 ((0x0011C154)、PIN_MODE (2)|((PIN_PULL_DISABLE | PIN_INPUT_ENABLE)&(~PIN_PULL_DIRECTION));
Padconfig、
CTRL_MMR0_CTRLMMR_PADCONFIG84
00050002
CTRL_MMR0_CTRLMMR_PADCONFIG85
00050002
static bool i2c5_basic_comm_test(void *test)
{
uint32_t busFrequency;
I2C_Params i2cParams;
I2C_Handle handle = NULL;
I2C_Transaction i2cTransaction;
int16_t status = 0;
char txBuf[2] = {0x00, 0x00};
char rxBuf[2] = {0x00, 0x00};
I2C_Tests *i2cTest = (I2C_Tests *)test;
I2C_initConfig(5, i2cTest);
I2C_Params_init(&i2cParams);
/* Set bitRate */
//i2cParams.bitRate = bitRate;
handle = I2C_open(5, &i2cParams);
if (handle == NULL)
{
goto Err;
}
busFrequency = I2C_100kHz;
I2C_control(handle, I2C_CMD_SET_BUS_FREQUENCY, &busFrequency);
i2cTransaction.masterMode = BTRUE;
/* Configure the I2C5 */
txBuf[0] = 0x00; // 0F
memset(rxBuf, 0, 2);
I2C_transactionInit(&i2cTransaction);
i2cTransaction.slaveAddress = 0xBE; //BF
i2cTransaction.writeBuf = (uint8_t *)&txBuf[0];
i2cTransaction.writeCount = 1;
i2cTransaction.readBuf = (uint8_t *)&rxBuf[0];
i2cTransaction.readCount = 1;
i2cTransaction.timeout = I2C_TRANSACTION_TIMEOUT;
status = I2C_transfer(handle, &i2cTransaction);
if (I2C_STS_SUCCESS != status)
{
I2C_log("\n I2C5 Test: ");
I2C_log(": Failed to read \n");
// testStatus and Err label are not defined in this scope
}
else
{
I2C_log("\nData from 0x00 is: %02x", rxBuf[0]);
}
Err:
if (handle)
{
I2C_close(handle);
}
return (status == I2C_STS_SUCCESS);
}
事务执行后的 I2C5 寄存器、
I2C5_CFG
I2C_REVNB_LO 0x0000080C 修订版号寄存器(低)【存储器已映射】
I2C_REVNB_HI 0x00005040 修订版本号寄存器(高)【已映射存储器】
I2C_SYSC 0x00000000 系统配置寄存器【存储器已映射】
I2C_EOI 0x00000000 中断编号规范结束 EOI 寄存器用于重新触发脉冲中断信号、以确保处理任何嵌套中断事件。 软件中断处理程序必须在当前中断处理例程结束时写入 EOI 寄存器、以便新事件可以再次重新触发脉冲中断信号。 对于电平中断信号、EOI 寄存器不起作用、不得使用。 【已映射内存】
I2C_IRQSTATUS_RAW 0x00000000 每事件原始中断状态矢量【存储器已映射】
I2C_IRQSTATUS 0x00000000 每事件启用的中断状态矢量【存储器已映射】
I2C_IRQENABLE_SET 0x00000000 每事件中断使能位矢量。 【已映射内存】
I2C_IRQENABLE_CLR 0x00000000 每事件中断清除位矢量。 【已映射内存】
I2C_WE 0x00000000 I2C 唤醒使能矢量(旧)。 【已映射内存】
I2C_DMARXENABLE_SET 0x00000000 每事件 DMA RX 启用设置。 【已映射内存】
I2C_DMATEXENABLE_SET 0x00000000 每事件 DMA TX 启用设置。 【已映射内存】
I2C_DMARXENABLE_CLR 0x00000000 每事件 DMA RX 启用清除。 【已映射内存】
I2C_DMATEXENABLE_CLR 0x00000000 每事件 DMA TX 启用清除。 【已映射内存】
I2C_DMARXWAKE_EN 0x00000000 每次事件 DMA RX 唤醒启用。 【已映射内存】
I2C_DMATXWAKE_EN 0x00000000 每事件 DMA TX 唤醒启用。 【已映射内存】
I2C_IE 0x00000000 I2C 中断启用矢量(旧)。 【已映射内存】
I2C_STAT 0x00000000 I2C 中断状态矢量(旧)。 【已映射内存】
I2C_SYSS 0x00000001 系统状态寄存器【存储器已映射】
I2C_BUF 0x00000000 缓冲器配置寄存器【存储器已映射】
I2C_CNT 0x00000001 数据计数器寄存器【存储器已映射】
I2C_DATA 0x00000000 数据访问寄存器【存储器已映射】
I2C_CON 0x00008600 I2C 配置寄存器。 【已映射内存】
I2C_OA 0x00000000 自己的地址寄存器【存储器已映射】
I2C_SA 0X000000BE 从器件地址寄存器【存储器映射】
I2C_PSC 0x00000017 I2C 时钟预分频器寄存器【存储器已映射】
I2C_SCLL 0x0000000D I2C SCL 低电平时间寄存器。 【已映射内存】
I2C_SCLH 0x0000000F I2C SCL 高电平时间寄存器。 【已映射内存】
I2C_SYSTEST 0x00004080 I2C 系统测试寄存器。 【已映射内存】
I2C_BUFSTAT 0x00008000 I2C 缓冲器状态寄存器。 【已映射内存】
I2C_OA1 0x00000000 I2C 自身的地址 1 寄存器【已映射存储器】
I2C_OA2 0x00000000 I2C 自身地址 2 寄存器【已映射存储器】
I2C_OA3 0x00000000 I2C 自身地址 3 寄存器【已映射存储器】
I2C_ACTOA 0x00000000 I2C 活动自身地址寄存器。 【已映射内存】
I2C_SBLOCK 0x00000000 I2C 时钟阻断使能寄存器。 【已映射内存】

PDK 11.00.00.21
J721E SOM
测试应用程序;
- Baremetal 和/ freeRTOS
- MCU2_0
- 没有 DMA
-无中断
-没有回叫
如果我在这里遗漏了一些内容、您能告诉我吗?
谢谢。
此致、
摩西