TI中文支持网
TI专业的中文技术问题搜集分享网站

TM4C129X 配置频综CDCE913 问题

我的代码在下面,请教各位大侠,有两个问题

1、CDCE193在I2C配置haishi中当从机,请问从机地址应该写0xC8,还是写0x65

2、我配置I2C的顺序不知道有没有问题,还请大神指教

int main(void)
{

ui32SysClock = SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ |
SYSCTL_OSC_MAIN |
SYSCTL_USE_PLL |
SYSCTL_CFG_VCO_480), 120000000);

SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C4); // 使能I2C4
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOR); // 使能R口

GPIOPinConfigure(GPIO_PR6_I2C4SCL); // 初始化GPIO口作为I2C
GPIOPinConfigure(GPIO_PR7_I2C4SDA);
GPIOPinTypeI2CSCL(GPIO_PORTR_BASE, GPIO_PIN_6);
GPIOPinTypeI2C(GPIO_PORTR_BASE,GPIO_PIN_7);

I2CMasterInitExpClk(I2C4_BASE, ui32SysClock, false); // 100K传输
I2CMasterEnable(I2C4_BASE);

I2CMasterSlaveAddrSet(I2C4_BASE, CDCE913_ADDRESS_Write, false); //    913为从机

// 以下是写寄存器过程

for(ui32Index = 0; ui32Index < NUM_I2C_DATA; ui32Index++)
{
I2CMasterControl( I2C4_BASE, I2C_MASTER_CMD_BURST_SEND_START ); //start
I2CMasterControl(I2C4_BASE,I2C_MASTER_CMD_SINGLE_SEND); // 单字节传送配置
while( I2CMasterErr(I2C6_BASE) | I2CMasterBusy(I2C6_BASE) );
I2CMasterDataPut(I2C4_BASE, CDCE913inx_data[ui32Index*2]); //  寄存器地址
while( I2CMasterErr(I2C6_BASE) | I2CMasterBusy(I2C6_BASE) );
I2CMasterDataPut(I2C4_BASE, CDCE913inx_data[ui32Index*2+1]); // 寄存器写入值
while( I2CMasterErr(I2C6_BASE) | I2CMasterBusy(I2C6_BASE) );
//I2CMasterControl( I2C6_BASE, I2C_MASTER_CMD_BURST_SEND_FINISH ); //stop

// while(I2CMasterBusy(I2C4_BASE)); // 等待传完
}

return(0);

}

Maka Luo:

M4是作为主还是从,从程序来看你应该是主。

如果是,那从机地址就是看从设备地址是多少了?

Jacky Xu:

看你从设备数据手册规定的地址是多少?一般I2C协议的话因为最低位是作为读写位,所以有些按照描述方式不同会有需要左移一位的情况,具体还是要看手册。

Engineer:

回复 Jacky Xu:

是的,CDCE913是从机。

根据手册CDCE913芯片地址,应该为0xC8(其中最低位为0,代表写),想请同时懂I2C和CDCE913的大侠帮忙看下

在TI 给的I2C例程基础上修改如下配置CDCE913芯片,假如我现在向913芯片的0x02寄存器写入0x61,并读该寄存器,判读写入是否正确

问题:

1、CDCE913的写寄存器和读寄存器 的I2C写法是否正确,实在不知道哪里有问题,就是调不通;

2、读回来的时候,CDCE913_ADDRESS  地址应该写7位的还是8位的呢?   pui32DataRx[0] = I2CSlaveDataGet( CDCE913_ADDRESS );

// 以下是写寄存器过程

I2CMasterSlaveAddrSet(I2C4_BASE, CDCE913_ADDRESS_Write, false); // 913为从机 I2CMasterDataPut(I2C4_BASE,0x82 ); // command指令   (最高位已经置1,代表单字节读写) I2CMasterControl( I2C4_BASE, I2C_MASTER_CMD_SINGLE_SEND ); //start while( I2CMasterBusy(I2C4_BASE) ); // 等待回应

I2CMasterControl( I2C4_BASE, I2C_MASTER_CMD_SINGLE_SEND ); //start I2CMasterDataPut(I2C4_BASE,0x61 ); // 寄存器写入值 while( I2CMasterBusy(I2C4_BASE) ); // 等待回应

// 以下是读寄存器过程// 先写要读的寄存器地址 I2CMasterSlaveAddrSet(I2C4_BASE, CDCE913_ADDRESS_Write, false); // 913为从机 I2CMasterDataPut(I2C4_BASE, 0x82); // command指令  (最高位已经置1,代表单字节读写) I2CMasterControl( I2C4_BASE, I2C_MASTER_CMD_SINGLE_SEND ); //单字节传送 start while( I2CMasterBusy(I2C4_BASE) ); // 等待回应// 可以开始回读了 I2CMasterSlaveAddrSet( I2C4_BASE, CDCE913_ADDRESS_Read, true); //控制传输方向为主机读取 I2CMasterControl( I2C4_BASE, I2C_MASTER_CMD_SINGLE_RECEIVE ); // 开始接收 while(I2CMasterBusy(I2C4_BASE) ); pui32DataRx[0] = I2CSlaveDataGet( CDCE913_ADDRESS ); while(I2CMasterBusy(I2C4_BASE) );

赞(0)
未经允许不得转载:TI中文支持网 » TM4C129X 配置频综CDCE913 问题
分享到: 更多 (0)