Hallo LotadaC,
das Bit ist mir auch schon aufgefallen. Habe es auch schon versucht auszuwerten. Leider klappt das nicht (mache bestimmt was falsch!)
Muss ich, damit ich dieses Bit auswerten kann auch den Interrupt dafür aktivieren? Auf Seite 662 sieht man das Register mit dem entsprechenden Bit?!
CodeBox C
uint8_t I2C_ReReg(I2C_TypeDef *I2Cx, uint8_t Addr, uint8_t Reg)
{
uint32_t tme_out = 0;
uint8_t retByte = 0;
while(I2C_GetFlagStatus(I2Cx, I2C_FLAG_BUSY) == SET)
{
if(tme_out++ > 800000)
{
tme_out = 0;
return 1;
}
}
/* Configure slave address, nbytes, reload, end mode and start or stop generation */
I2C_TransferHandling(I2Cx, Addr, 1, I2C_SoftEnd_Mode, I2C_Generate_Start_Write);
if(I2Cx->ISR & 0b00000000000000000000000000010000)
{
GPIO_WriteBit(GPIOC,(1<<9),Bit_SET);
}
while(I2C_GetFlagStatus(I2Cx, I2C_ISR_TXIS) == RESET)
{
if(tme_out++ > 800000)
{
tme_out = 0;
return 1;
}
}
/* Send Register address */
I2C_SendData(I2Cx, (uint8_t)Reg);
if(I2Cx->ISR & 0b00000000000000000000000000010000)
{
GPIO_WriteBit(GPIOC,(1<<9),Bit_SET);
}
while(I2C_GetFlagStatus(I2Cx, I2C_ISR_TC) == RESET)
{
if(tme_out++ > 800000)
{
tme_out = 0;
return 2;
}
}
/* Configure slave address, nbytes, reload, end mode and start or stop generation */
I2C_TransferHandling(I2Cx, Addr, 1, I2C_AutoEnd_Mode, I2C_Generate_Start_Read);
while(I2C_GetFlagStatus(I2Cx, I2C_ISR_RXNE) == RESET)
{
if(tme_out++ > 800000)
{
tme_out = 0;
return 3;
}
}
/* Read data from RXDR */
retByte = I2C_ReceiveData(I2Cx);
/* Wait until STOPF flag is set */
while(I2C_GetFlagStatus(I2Cx, I2C_ISR_STOPF) == RESET)
{
if(tme_out++ > 800000)
{
tme_out = 0;
return 4;
}
}
/* Clear STOPF flag */
I2C_ClearFlag(I2Cx, I2C_ICR_STOPCF);
// return a Reg value
return (uint8_t)retByte;
}
Eigentlich sollte nach dem ersten Byte was übertragen wurde ein NACKF vom Slave kommen...