大家好!
时间处于28383、以尝试使 I2C 总线正常运行。 我从这个示例开始、这个示例只输出在每个中断中递增的字节。 环回示例。
我对其进行了修改、以尝试为总线上的几个 I2C 芯片发送初始化数据。
在我的代码中、我已经将 I2CA 外设设置为主发送器并启用 FIFO。 我将0x3B 的从地址载入到从器件地址、将3个消息字节载入到 FIFO。 然后、尝试通过设置"CMDR"寄存器中的"开始条件"位来启动方。 奖励的只是一个测量值为 IF 0x70的单个字节(显示在示波器跟踪中)。
考虑到从器件地址为0x3b 并且3个数据字节都为零、我暂时想知道 heck 0x70的来源以及我做的任何事情可能发生什么?!?!?
如照片所示、该单字节之后不会出现任何其他内容。 我在这里包含了图片和代码片段。
如往常一样,我们将非常感谢任何出色的建议。
大卫

void IO_Expander (void)
{
Uint16 W_R;
long int W_T = 0;
UINT16索引= 0;
PNT_IO_EXPANDER_1 =&IO_EXPANDER_1;//初始化 IO 扩展器消息块的指针
PNT_IO_Expander 2 =&IO_Expander 2;
PNT_IO_Expander 1->SlaveAddress = 0x38;
PNT_IO_Expander 2->SlaveAddress = 0x3B;
对于(索引= 0;索引<= 55;索引++)
{
PNT_IO_Expander 1->MemoryLowAddr = IO_Register[Index];
PNT_IO_Expander 1->NumOfBytes = 2;
PNT_IO_Expander 1->MsgBuffer[0]= U1_Init[Index]>>8;//加载数据的高字节
PNT_IO_Expander 1->MsgBuffer[1]= U1_Init[Index]& 0x00ff;//加载数据的低字节
对于(W_T = 0;W_T < 10000;W_T ++)//等待传输循环
{
W_R = I2CA_WriteData (pnt_IO_Expander);
如果(W_R =0)
{
W_R = W_T;
break;//如果消息响应"良好",则离开循环
}
}
}
对于(索引= 0;索引<= 55;索引++)
{
PNT_IO_Expander 2->MemoryLowAddr = IO_Register[Index];
PNT_IO_Expander 2->NumOfBytes = 2;
PNT_IO_Expander 2->MsgBuffer[0]= U2_Init[Index]>>8;//加载数据的高字节
PNT_IO_Expander 2->MsgBuffer[1]= U2_Init[Index]& 0x00ff;//加载数据的低字节
对于(W_T = 0;W_T < 10000;W_T ++)//等待传输循环
{
W_R = I2CA_WriteData (pnt_IO_Expander 2);
如果(W_R =0)
{
W_R = W_T;
break;//如果消息响应"良好",则离开循环
}
}
}
}
//
// I2CA_WriteData -发送 I2CA 消息
//
UINT16 I2CA_WriteData (结构 I2C_IO_MSG * msg)
{
UINT16 I;
//
//等待 STP 位从之前的任何主器件通信中清除。
//模块对该位的清零延迟到 SCD 位结束后
//设置。 如果在启动一条新消息前这个位未被选中、那么
// I2C 可能会变得混淆。
//
if (I2caRegs.I2CMDR.bit.stp == 1)
{
返回 I2C_STP_NOT_READY_ERROR;
}
//
//设置从机地址
//
I2caRegs.I2CSAR.all = msg->SlaveAddress;
//
//检查总线是否繁忙
//
if (I2caRegs.I2CSTR.bit.BB == 1)
{
返回 I2C_BUS_BUS_ERROR;
}
//
//设置要发送的字节数
// MsgBuffer +地址
//
I2caRegs.I2CCNT = msg->NumOfBytes+1;
//
//设置要发送的数据
//
// I2caRegs.I2CDXR.all = msg->MemoryHighAddr;
I2caRegs.I2CDXR.all = msg->MemoryLowAddr;
对于(I=0;I < msg->NumOfBytes;I++)
{
I2caRegs.I2CDXR.all =*(msg->MsgBuffer+I);
}
//
//作为主发送器发送启动
//
I2caRegs.I2CMDR.all = 0x6620;
返回 I2C_SUCCESS;
}
//
// I2CA_ReadData -读取 I2CA 消息