引用: mangoal 发表于 2015-5-22 22:27
I2C通讯速率和A/D采样率没有关系。如果要人为改变通讯速率,我以前试过把通讯设置到50k来提高可靠性,用I2CMasterInitExpClk(I2C1_Base,40000000,false)配置100k速率,如果要50k那么把其中的时钟频率x2揪成50k了
恩,有收获。不过如果我写80000000,这在M4的这个函数会认为是系统时钟就是80000000,依照这个进行配置,传输速度也是100kbps.好几个系统时钟都可以得到100k的。
你既然用过,帮忙看下程序有啥大漏洞,发不过去啊!!!
主机向外接I2C芯片DAC发送多个数据,突发方式:
SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C1); //I2C1模块使能
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG);
GPIOPinConfigure(GPIO_PG0_I2C1SCL);//时钟线和数据线配置
GPIOPinConfigure(GPIO_PG1_I2C1SDA);
GPIOPinTypeI2C(GPIO_PORTG_BASE, GPIO_PIN_1);
GPIOPinTypeI2CSCL(GPIO_PORTG_BASE, GPIO_PIN_0);
I2CMasterEnable(I2C1_BASE);//使能I2C主机模块
IntEnable(I2C_INT_MASTER);//历程好像都么有用中断,我只要通信就行,那种方式都可以,就先凑上了
I2CMasterIntEnable(I2C1_BASE);
IntMasterEnable();
I2CMasterInitExpClk(I2C1_BASE, 40000000,false); //传输速度100kbps
I2CMasterSlaveAddrSet(I2C1_BASE,SLAVE_ADDRESS,false); //从机地址设置
I2CMasterDataPut(I2C1_BASE, WRITE_ADDRESS); //我向数模转换器件DAC里写数据,用指定写入地址吗?
I2CMasterControl(I2C1_BASE,I2C_MASTER_CMD_BURST_SEND_START);//发送一系列数据给DAC。
while(I2CMasterBusy(I2C1_BASE));
for(i = 0;i < DataNum;i++ )
{
I2CMasterDataPut(I2C1_BASE,DataTx);
i== DataNum - 1 ?
I2CMasterControl(I2C1_BASE,I2C_MASTER_CMD_BURST_SEND_FINISH):
I2CMasterControl(I2C1_BASE,I2C_MASTER_CMD_BURST_SEND_CONT);
while(I2CMasterBusy(I2C1_BASE));//到这主机一直忙,没法继续了。。。。。为什么啊
}