主题中讨论的其他器件:OMAP-L137
工具/软件:
你(们)好
我无法使用 I2C0外设写入 EEPROM。
症状是当 DSP 是主器件时、没有输出到 SCL 和 SDA。
PSC 不会取消暂停 I2C0外设。
已经确认、当 I2C_INIT ()和 I2C_WRITE ()按步骤执行时、每个寄存器都正常变化。
已确认 ICPFUNC0.PFUNC0为0 (禁用)。
UART0外设是与 I2C0的 SCL 和 SDA 相冲突的引脚、处于睡眠模式。
SCL 和 SDA 端子通过10kΩ 上拉。
下面部分提取并列出了必要的代码。
这些代码基于 OMAP-L137_C6747_BSL 中包含的代码。
/******************************************************************** /
char pBuff[16];
/******************************************************************** /
U16 I2C_INIT (void)
{
ICMDR0 = 0; //复位 I2C
ICMDR0 |= ICMDR_MST; //释放 I2C 主器件
// I2C 输入时钟= 16.384MHz
ICPSC0 = 0x00000001; // IPSC = 1 I2C 预分频器= 2
//预分频模块时钟= 16.384MHz /2 = 8.192MHz
ICCLKL0 = 5; // ICCL = 5 (ICCL + 6)+(ICCH + 6)
ICCLKH0 = 5; // ICCH = 5 (ICCL + 6)+(ICCH + 6)
// SCL =(16.384MHz / 2)/((ICCL + 6)+(ICCH + 6))
// =(16.384MHz / 2)/ 22
// = 372.363kHz
ICSTR0 = ICSTR0;
ICMDR0 |= ICMDR_IRS; //从复位中释放 I2C
ICSTR0 |=(ICSTR_ARDY | ICSTR_BB);
返回0;
}
/******************************************************************** /
S16 I2C_CLOSE (void)
{
ICMDR0 = 0; //复位 I2C
返回0;
}
/******************************************************************** /
S16 I2C_RESET (void)
{
I2C_CLOSE ();
i2c_init ();
返回0;
}
/******************************************************************** /
S16 I2C_WRITE (U16 i2c_addr、u08*数据、U16 len)
{
S32超时、I;
ICCNT0 = len; //设置长度
icsar0 = i2c_addr; //设置 I2C 从器件地址
ICMDR0 = ICMDR_STT //设置为主器件写入
| ICMDR_TRX
| ICMDR_MST
| ICMDR_IRS
| ICMDR_FREE;
I2C_WAIT( 1000 ); //短延迟
for (i = 0;i < len;i++)
{
ICDXR0 = DATA[i]; //写入
timeout = i2c_timeout;
应该做
{
if (timeout--< 0 )
{
I2C_RESET ();
返回-1;
}
} while (( ICSTR0 & ICSTR_ICXRDY )== 0 ); //等待 Tx 就绪
}
ICMDR0 |= ICMDR_STP; //生成停止
返回0;
}
/******************************************************************** /
void main()
{
S16 ANS;
// PLL、PINMUX 设置
AUXCLK 为16.384MHz
SYSCNF0.PINMUX8_19_16 = 2 // I2C_SCL
SYSCNF0.PINMUX8_15_12 = 2 // I2C_SDA
...
//
i2c_init ();
while (1){
strcpy (pBuff[]、"test - 0");
ANS = I2C_WRITE (pBuff、0x0FF0、8); // 0x0FF0是 EEPROM 中的写入地址
如果(ANS = 0)中断;
}
}
/******************************************************************** /
谢谢。