Gast
#512552
Hi!
Ich habe hier einen HCS12 und versuche per I2C Bus ein EEPROM zu
schreiben/lesen. Das Schreiben scheint zu funktionieren. Beim Lesen hab
ich das Problem, dass ich nur an der aktuellen Position Lesen kann.
Immer wenn ich zu erst die Adresse schreibe und danach per repeated
start lesen will, klappt es nicht. Ich vermute, mein Problem liegt an
dem START und STOP signal. Ich weiß zwar, wie ich dies per SDA und SLC
lösen kann, nur meinen durch meinen µC hab ich auf die Leitungen direkt
ja keinen Zugrif.. :(
Aktuell sieht es so aus, was aber nicht stimmen kann. Denn würde ich
nach dem 1. start und dem Sender der slave adresse nochmal start
aufrufen, wäre ja IBCR_MS_SL und auch IBCR_TX_RX bereits gesetzt -
sprich meine Routine würde effektiv garnichts machen??
// internal - generates a START condition
void iic_send_start(UINT8 address)
{
// wait for bus to be free
if (iic_status.no_stop == false)
{
while (IBSR_IBB == 1);
}
IBCR_IBIE = 0; // disable interrupts
// generate START condition
IBCR_TX_RX = 1; // set transmit mode
IBCR_MS_SL = 1; // select master mode (send start bit)
IBDR = address; // send selected slave address
// wait for bus to be busy (by us)
while (IBSR_IBB == 0);
IBCR_IBIE = 1; // enable interrupts
}
// internal - generates a STOP condition
void iic_send_stop(void)
{
IBCR_MS_SL = 0;
}
Ich freue mich über jegliche Hilfe. Vielleicht hat ja sogar schon jemand
einen fertigen I2C "Treiber" fürn HCS12 in C fertig? :)
Peter