1、如图所示,I2C模块说明文档里说预分频模块时钟频率需介于6.7-13.3MHz之间,
而EVM板板级支持库里的初始化却将预分频因子设为13,如此预分频模块时钟为27M/13,不在要求范围内,是哪里的问题?
2、我将该初始化代码嵌入到自己的程序中来对I2C模块进行初始化,修改其中的ICPSC、ICCLKL、ICCLKH数值,使其时钟速度成倍变大或变小,测试
Int16 EVMDM6437_I2C_write( Uint16 i2c_addr, Uint8* data, Uint16 len )和Int16 EVMDM6437_I2C_read( Uint16 i2c_addr, Uint8* data, Uint16 len )
用CCS3.3的profile工具查看它们的执行时钟数目并不改变,说明对模块的初始化并没有生效,这又是为什么呢?如何才能有效果呢?
Shine:
1. 这里确实是SDI的例程有问题,你自己写的时候,要遵循这个要求。例如
Int16 EVM6424_I2C_init( )
{
I2C_ICMDR = 0; // Reset I2C
I2C_ICPSC = 2; // Config prescaler for 27MHz
I2C_ICCLKL = 40; // Config clk LOW for 100 kHz
I2C_ICCLKH = 40; // Config clk HIGH for 100 kHz
I2C_ICMDR |= ICMDR_IRS; // Release I2C from reset
return 0;
}2. Profile工具的时钟是cpu clock不是I2C clock。
Weiliang Cheng:
回复 Shine:
你好,谢谢回复
第二个问题,profile工具看的是一段代码运行消耗的CPU周期数,CPU时钟是固定的,所以看的是代码的运行时间。而在两次不同的I2C模块配置时,前边2个接收字节和发送字节的函数运行时间是一样的,能说明I2C配置没有生效吧?
Shine:
回复 Weiliang Cheng:
I2C配置有没有生效量一下看一下时序对不对,收发的数据对不对。
Weiliang Cheng:
回复 Shine:
你好
数据收发没有问题,都是正确的,可就是测量速度时,发现配置貌似没有生效。可能的问题在哪里呢?
Shine:
回复 Weiliang Cheng:
执行完配置代码后,看一下相应的寄存器里的值有没有配置成功。
Weiliang Cheng:
回复 Shine:
谢谢回复。
嗯呀,看寄存器是配置生效了。
但是读取FPGA那头一定字节的数据,通过CCS profile测得的时间并不改变。
FPGA传递数据应该很快,关键路径不在它那边,难道是这种测量方法行不通吗?