Other Parts Discussed in Thread: EK-LM4F120XL, TM4C123, EK-TM4C123GXL
I have made a function in order to configure I2C communication from an LM4F120H5QR microcontroller with an external sensor (HMC5883L).
I have used register definitions from lm4f120h5qr.h.
Does it look okay?
file:///C:/Users/Peter/Documents/Afgangsprojekt/EK-LM4F120XL_Launchpad/lm4f120h5qr.h
void I2C_Config(void) { SYSCTL_RCGCI2C_R |= SYSCTL_RCGCI2C_R0; // Set bit 0/R0 in the Inter-Integrated Circuit Run Mode Clock Gating Control (RCGCI2C) register, //in order to enable and provide a clock to I2C module 0 in Run mode. SYSCTL_RCGCGPIO_R |= SYSCTL_RCGCGPIO_R1; // Set bit 1/R1 to enable and provide a clock to GPIO Port B in Run mode, //in the General-Purpose Input/Output Run Mode Clock Gating Control (RCGCGPIO) register. GPIO_PORTB_AHB_AFSEL_R |= 0xC; // Set PB2 & PB3 to enable the appropriate pins for their alternate function, //in the GPIO Alternate Function Select (GPIOAFSEL) register. GPIO_PORTB_AHB_ODR_R |= 0x8; // Set PB3 (I2C0SDA) for open-drain operation, //in the GPIO Open Drain Select (GPIOODR) register. GPIO_PORTB_AHB_PCTL_R |= 0x00003300; // Set the bit field PMC0 to 0011 in the GPIO Port Control (GPIOPCTL) register, in order to enable the //appropriate pins for their alternate function. I2C0_MASTER_MCR_R = 0x00000010; // Initialize the I2C Master by writing the I2C Master Configuration (I2CMCR) register with a value of 0x0000.0010. I2C0_MASTER_MTPR_R = 0x00000027; // Set the desired SCL clock speed by writing the I2C Master Timer Period (I2CMTPR) register with the equation: //TPR = (System Clock/(2*(SCL_LP + SCL_HP)*SCL_CLK))-1 //SCL_LP & SCL_HP are fixed at 6 & 4 respectively, SCL_CLK is the desired clock speed of the I2C clock(100 Kbps, 400 Kbps & 1 Mbps) //and TPR is the Timer Period register value (range of 1 to 127). }