I2C initiering Motorola MC9S12

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
CyberLeffe
Inlägg: 50
Blev medlem: 22 februari 2007, 01:15:26
Ort: Göteborg/Örebro

I2C initiering Motorola MC9S12

Inlägg av CyberLeffe »

Håller på med ett projekt där jag ska läsa av en RTC via I2C bussen till en MC9S12DT256B.
http://www.chl.chalmers.se/~svenk/mikro ... 2IICV2.pdf

RTC:n är en M41T00S http://www.st.com/stonline/products/lit ... 41t00s.pdf

Har skrivit lite kod och får den att skicka ut RTC:ns adress men sen skickas det inget accnowledgement och komunikationen avstannar. Har laggt in att den skriver ut på port a och k aå att jag ska veta var i programmet den stannar.

Om det är nån som har några idéer är jag tacksam för svar, är även intresserad av programsnuttar.



void iic(void) // funktion för att initiera I2C modulen i HC12

{
REG8(PORTK) = 0xFF;
REG8(PORTA) = 0xFE;
REG8(IBCR) = (REG8(IBCR)|IBEN); // I2C-Bus enable
REG8(IBCR) = (REG8(IBCR)|MS_SL); // Master
//REG8(IBCR) = (REG8(IBCR)|TXAK); // Transmit acknowledge disable

while(IBB==1);
REG8(PORTA) = 0xFC;
REG8(IBCR) = REG8(IBCR)|TX_RX; // Transmitt mode

// Steg 1
REG8(IBDR) = 0xD0; // Sending M41T00S address
while(IBIF==0);
REG8(PORTK) = 0xFE;
if(RXAK==0)REG8(PORTA) = 0xF8;

}else{
REG8(IBCR)=REG8(IBCR) & 0xDF; // Slave => send stop bit
REG8(PORTB) = 0xFE;
}
REG8(PORTK) = 0xFC;
REG8(IBCR) = REG8(IBCR)|IBIF; // Clear IBIF flag
REG8(PORTK) = 0xF8;
// Steg 2
//REG8(IBCR) = REG8(IBCR)|RSTA; // Repeat start
REG8(IBDR) = 0x00; // Sending second address
while(IBIF==0);
if(RXAK==0)REG8(PORTA) = 0xF0;
REG8(PORTK) = 0xF0;
}else{
REG8(IBCR)=REG8(IBCR) & 0xDF; // Slave => send stop bit
REG8(PORTA) = 0x38;
}

REG8(IBCR) = REG8(IBCR)|IBIF; // Clear IBIF flag

// Steg 3
REG8(IBDR) = 0xD0; // Sending M41T00S address
while(IBIF==0);
if(RXAK==0)REG8(PORTA) = 0xE0;

REG8(IBCR) = REG8(IBCR)|IBIF; // Clear IBIF flag



}