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
}
I2C initiering Motorola MC9S12
-
- Inlägg: 50
- Blev medlem: 22 februari 2007, 01:15:26
- Ort: Göteborg/Örebro