在线时间21 小时
UID3113538
注册时间2021-8-25
NXP金币0
该用户从未签到
注册会员
- 积分
- 164
- 最后登录
- 2021-10-7
|
本帖最后由 功夫崽崽 于 2021-9-11 17:28 编辑
keazn64 硬件 i2c 驱动 24c08 问题 , PTB6-I2C0_SDA,PTB7-I2C0_SCL 用示波器观察IO上没有输出。 参照“KEA64RM” 参考手册 P124“Table 10-1. Pin availability by package pin-count” 在 ALT2 上。 KEAZN64 没看到有相关的配置啊。 不知道问题出现在哪里, 求指导一下。
void AT24C08_Init(void)
{
sGPIO_Init(GPIOA,PTB6 | PTB7,GPIO_Mode_OUT,GPIO_PuPd_NOPULL); //PTB6-I2C0_SDA,PTB7-I2C0_SCL 这句IO配置应该没用,keazn64没 有描述 OD怎么配置
SIM->PINSEL |= 0x00000020; //I2C0_SCL and I2C0_SDA are mapped on PTB7 and PTB6, respectively.
mI2C_Init(I2C0);
}
void mI2C_Init(I2C_Type *pI2Cx)
{
SIM->SCGC |= 0x00020000; //BIT 17
pI2Cx->C1 |= 0x80; //Enable I2C
pI2Cx->F = (uint8_t)0x1F; //I2C_SetBaudRate(pI2Cx,pI2CConfig->u16F);
}
//以下操作 参照 “https://www.nxpic.org.cn/module/forum/thread-554911-1-1.html” 此帖
uint8_t mI2C_MasterWriteBuffer_24C08(I2C_Type *pI2Cx,uint16_t u16SlaveAddress,uint8_t *pWrBuff,uint16_t u16Length)
{
uint16_t i;
mI2C_Start(pI2Cx);
i = u16SlaveAddress >> 8;
i <<= 1;
pI2Cx->D = (0xA0 | i);
mI2C_Wait(pI2Cx);
mI2C_WaitAck(pI2Cx);
pI2Cx->D = (u16SlaveAddress % 256);
mI2C_Wait(pI2Cx);
mI2C_WaitAck(pI2Cx);
while(u16Length--)
{
pI2Cx->D = (* pWrBuff);
mI2C_Wait(pI2Cx);
mI2C_WaitAck(pI2Cx);
pWrBuff++;
}
mI2C_Stop(pI2Cx);
I2C_Delay_nop(500);
return 0x00;
}
uint8_t mI2C_MasterReadBuffer_24C08(I2C_Type *pI2Cx,uint16_t u16SlaveAddress,uint8_t *pRdBuff,uint16_t u16Length)
{
uint8_t dummyRead;
uint16_t i;
mI2C_Start(pI2Cx);
i = u16SlaveAddress >> 8;
i <<= 1;
pI2Cx->D = (0xA0 | i);
mI2C_Wait(pI2Cx);
mI2C_WaitAck(pI2Cx);
pI2Cx->D = (u16SlaveAddress % 256);
mI2C_Wait(pI2Cx);
mI2C_WaitAck(pI2Cx);
I2C_Delay_nop(500);
mI2C_ReStart(pI2Cx);
pI2Cx->D = (0xA1 | i);
mI2C_Wait(pI2Cx);
mI2C_WaitAck(pI2Cx);
pI2Cx->C1 &= ~0x10; //接收
mI2C_SendNack(pI2Cx); //TXAK=1
dummyRead = pI2Cx->D; //空读,启动接收
mI2C_Wait(pI2Cx);
//mI2C_WaitAck(pI2Cx);
while(u16Length)
{
// *pRdBuff = pI2Cx->D;
//
// mI2C_Interrupt(pI2Cx);
if(u16Length == 1)
{
mI2C_Stop(pI2Cx); //读取最后一个字节先发stop
}else
{
mI2C_SendAck(pI2Cx);
}
*pRdBuff = pI2Cx->D;
mI2C_Wait(pI2Cx);
pRdBuff++;
u16Length--;
}
mI2C_SendNack(pI2Cx); //mI2C_Stop(pI2Cx);
I2C_Delay_nop(500);
return dummyRead;
}
最佳答案
同样程序如果默认用PTB6、PTB7外部上拉是否可以?
通过SIM_PINSEL|=SIM_PINSEL_I2C0PS_MASK;切换到PTA2和PTA3之后就没法正确输出了吗?
是否试过PTA2、3配置成IO口输出高低?(判断是否还是被更高优先级的EXTAL和XTA ...
|
|