在线时间2 小时
UID27420
注册时间2007-12-30
NXP金币0
该用户从未签到
新手上路

- 积分
- 29
- 最后登录
- 1970-1-1
|
在拉普兰德,超核,野火,蘇卅大學,
的固件庫都沒有I2C 多BYTE的寫入程式, 現將其改寫, 己可write多byte
但read 1 byte是ok, 多byte read 時前3byte可以, 以後即為0xff,0xff…
, 甚至於stop後SDA pin 為low電位, 掛住了,
是否有高手給個程序, 謝謝!
改了試不行,不行又改己很亂了
void I2C2A8DRD(unsigned char I2C_DEVICE,unsigned char I2C_REGH,unsigned char I2C_REGL)
{
I2C_GenerateSTART(I2C0);
I2C_Send7bitAddress(I2C0,I2C_DEVICE,I2C_MASTER_WRITE);
I2C_WaitAck(I2C0);
I2C_SendData(I2C0,I2C_REGH);
I2C_WaitAck(I2C0);
I2C_SendData(I2C0, I2C_REGL);
I2C_WaitAck(I2C0);
I2C_GenerateRESTART(I2C0);
I2C_Send7bitAddress(I2C0,I2C_DEVICE,I2C_MASTER_READ);
I2C_WaitAck(I2C0);
I2C_SetMasterMode(I2C0,I2C_MASTER_READ);
I2C_GenerateAck(I2C0);//I2C0->C1 &= ~I2C_C1_TXAK_MASK; //I2C_GenerateAck(I2C0);
I2CRBUF[0] = I2C0->D; // DUMMY READ
I2C_WaitAck(I2C0);
I2CRBUF[0] = I2C0->D;
I2C_WaitAck(I2C0);
//I2C0->C1 |= I2C_C1_TXAK_MASK; /* Turn off ACK since this is second to last read*/
I2CRBUF[1]= I2C0->D;
I2C_WaitAck(I2C0);
I2CRBUF[2] = I2C0->D;
I2C_WaitAck(I2C0);
I2CRBUF[3] = I2C0->D;
I2C_WaitAck(I2C0);
I2CRBUF[4] = I2C0->D;
I2C_WaitAck(I2C0);
I2CRBUF[5] = I2C0->D;
I2C_WaitAck(I2C0);
I2CRBUF[6] = I2C0->D;
I2C_WaitAck(I2C0);
I2C_GenerateSTOP(I2C0);
I2CRBUF[7] = I2C0->D;
DelayMs(5);
}
|
-
|