PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Coocox und die Benutzung der I2C-Bibliothek



Tomatello
15.12.2013, 18:50
Hallo liebes Forum,

ich möchte einen DS1621s mit einem LPC1769 ansteuern.
Nun fängt es bei mir schon so an, dass ich gar nicht richtig mit der Software resp. der I2C-Bibliothek klar komme..
Ich verwende u.a. die mitgelieferte Header/Source "17xx_i2c.h/c".
Da möchte ich z.B. die I2C1-Peripherie verwenden (I2C0 halte ich für übertrieben von der Taktrate her) und die Pins dementsprechend konfigurieren (P0.0 für SDA1 und P0.1 für SCL1).
Ich weiß aber nicht, wie ich die ganzen Funktionen, die in der Bibliothek sind einstelle..
Z.B. folgende Initiallisierung:


void I2C_Init(LPC_I2C_TypeDef *I2Cx, uint32_t clockrate)
{
CHECK_PARAM(PARAM_I2Cx(I2Cx));

if (I2Cx==LPC_I2C0)
{
/* Set up clock and power for I2C0 module */
CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCI2C0, ENABLE);
/* As default, peripheral clock for I2C0 module
* is set to FCCLK / 2 */
CLKPWR_SetPCLKDiv(CLKPWR_PCLKSEL_I2C0, CLKPWR_PCLKSEL_CCLK_DIV_2);
}
else if (I2Cx==LPC_I2C1)
{
/* Set up clock and power for I2C1 module */
CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCI2C1, ENABLE);
/* As default, peripheral clock for I2C1 module
* is set to FCCLK / 2 */
CLKPWR_SetPCLKDiv(CLKPWR_PCLKSEL_I2C1, CLKPWR_PCLKSEL_CCLK_DIV_2);
}
else if (I2Cx==LPC_I2C2)
{
/* Set up clock and power for I2C2 module */
CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCI2C2, ENABLE);
/* As default, peripheral clock for I2C2 module
* is set to FCCLK / 2 */
CLKPWR_SetPCLKDiv(CLKPWR_PCLKSEL_I2C2, CLKPWR_PCLKSEL_CCLK_DIV_2);
}
else {
// Up-Support this device
return;
}

/* Set clock rate */
I2C_SetClock(I2Cx, clockrate);
/* Set I2C operation to default */
I2Cx->I2CONCLR = (I2C_I2CONCLR_AAC | I2C_I2CONCLR_STAC | I2C_I2CONCLR_I2ENC);

Wobei man sich da zwischen I2C0,1 und 2 entscheiden muss..
Meine Frage lautet, wie ich das nun einstelle? Soll ich ganz oben einfach definieren? --> #define I2Cx I2C1
Oder sollte ich in der main.c die Initiallisierung aufrufen bzw schreiben und die restlichen Code-Schnipsel, die nicht das I2C1 beinhalten rauslöschen?
Quasi nur so:


void I2C_Init(LPC_I2C_TypeDef *I2Cx, uint32_t clockrate)
{
CHECK_PARAM(PARAM_I2Cx(I2Cx));


(I2Cx==LPC_I2C1)
{
/* Set up clock and power for I2C1 module */
CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCI2C1, ENABLE);
/* As default, peripheral clock for I2C1 module
* is set to FCCLK / 2 */
CLKPWR_SetPCLKDiv(CLKPWR_PCLKSEL_I2C1, CLKPWR_PCLKSEL_CCLK_DIV_2);
}

// Up-Support this device
return;
}

/* Set clock rate */
I2C_SetClock(I2Cx, clockrate);
/* Set I2C operation to default */
I2Cx->I2CONCLR = (I2C_I2CONCLR_AAC | I2C_I2CONCLR_STAC | I2C_I2CONCLR_I2ENC);


Vielen Dank euch schonmal!


Nachtrag: Hab die Lösung gefunden. Anscheinend muss man sie nur ersetzen.