He estado trabajando con el protocolo I2C para crear un código para el RA8875 (vea para I2C en página 67) usando una placa Tiva ( TM4C123 , capítulo I2C de la página 997), y Puedo pintar en la pantalla o escribir texto, pero tengo problemas cuando quiero leer un valor de un registro.
Por lo que pude leer sobre I2C, entiendo que el proceso debe ser como sigue:
- Envíe un comando de escritura, especificando la dirección del registro
- Envíe un comando de lectura, para que la pizarra lea los datos del registro
El código que utilizo para la lectura I2C es el siguiente:
unsigned char lcd_read(unsigned char data,short I2C)
{
unsigned char response;
switch(I2C)
{
case I2C0:
{
while(I2C0_MCS_R&I2C_MCS_BUSBSY);
I2C0_MSA_R |=0x0E; //Specify the slave address of the touch screen and that the next operation is a write command
I2C0_MDR_R=data; // Register address
I2C0_MCS_R=0x03; // (START, RUN)
if(I2C0_MCS_R&I2C_MCS_ERROR) //Check the ERROR bit in the I2CMCS register to confirm the transmit was acknowledged.
{
}
I2C0_MSA_R |=0x0F; //Specify the slave address of the touch screen and that the next operation is a read
I2C0_MCS_R=0x07; // (STOP, START, RUN)
while(I2C0_MCS_R&I2C_MCS_BUSBSY); //Wait until the transmiI2Con completes by polling the I2CMCS register's BUSBstart_Y bit until it has been cleared.
response = I2C0_MDR_R&0xFF;
if(I2C0_MCS_R&I2C_MCS_ERROR) //Check the ERROR bit in the I2CMCS register to confirm the transmit was acknowledged.
{
}
break;
}
}
return response;
}
Otra cosa que me sucedió es que lo que puedo ver en los registros (yo uso Code Composer Studio para la codificación y depuración) no se corresponde con los datos obtenidos mediante un analizador de protocolos (es decir, el contenido del registro I2C_MDR). Probablemente esta podría ser una pregunta aparte pero, ¿cuál puede ser la razón de ello?
Editar : las siguientes imágenes muestran cómo se transmiten los datos. Los datos de lectura deben ser 0x81 en lugar de 0x00:
I2C escribe para registrarse:
I2Cleedelregistroutilizandoelcódigoanterior:
Gracias por tu ayuda.