Haremos uso de la interface IICA0 con la que cuenta el MCU R5F104PJAFB de la tarjeta de evaluación YRDKRL78G14. Escribiremos una trama de 128 datos en la memoria EEPROM a 100 Khz y los volveremos a leer verificándolos en el debug en un array de datos.
- Inicializaremos el módulo IICA0
- Se crearán rutinas de lectura y escritura I2C
- Se creará interrupción I2C
- Se implementará la API EEPROM para manejo de funciones de lectura y escritura.
DESARROLLO:
- Del manual Renesas RL78G14 RDK User's Manual ubicamos la dirección de la EEPROM
- Del YRDKRL78G14 schematic ubicamos la EEPROM:
PASOS:
- Creación de un proyecto:
2.- New/ C Project
- Configurar proyecto:
2.- Seleccionar C/C++ Build / Settings / Linker / Device y establecer los siguientes parámetros:
OCD = 85
Option Byte = efffe8
Palomear: Use range of debug monitor area. Nota: No establecer ningún valor solo dejarlo en blanco.
Apply y después OK.
3.- Las rutinas de lectura y escritura de la EEPROM se encuentran en el archivo EEPROM.c
void EEPROM_Write(unsigned long addr, uint16_t lenth ,unsigned char *pdata)
{
uint8_t send[130];
I2C_Request r;
uint16_t len = 2;
unsigned char j;
send[0] = addr & 0xFF00;
send[1] = addr & 0x00FF;
for(j=0; j<lenth; j++)
{
send[len] = (uint8_t)*pdata;
len++;
pdata++;
}
r.iAddr = EEPROM_DEVICE_ADDRESS>>1;
r.iSpeed = 100; /* kHz */
r.iWriteData = send;
r.iWriteLength = len;
r.iReadData = 0;
r.iReadLength = 0;
I2C_Start();
I2C_Write(&r, 0);
delay_ms(10);
G_100usTimer=0;
G_msTimer = 0;
R_IT_Start();
while (I2C_IsBusy() && G_msTimer <
20)
{
__nop();
}
R_IT_Stop();
}
int16_t EEPROM_Read(uint16_t addr, uint8_t *pdata, uint16_t r_lenth)
{
uint8_t target_address[2];
I2C_Request r;
int16_t result = 0;
target_address[0] = addr & 0xFF00;
target_address[1] = addr & 0x00FF;
r.iAddr = EEPROM_DEVICE_ADDRESS >> 1;
r.iSpeed = 100;
r.iWriteData = target_address;
r.iWriteLength = 2;
r.iReadData = pdata;
r.iReadLength = r_lenth;
I2C_Write(&r, 0);
delay_ms(10);
G_100usTimer=0;
G_msTimer = 0;
R_IT_Start();
while (I2C_IsBusy() && G_msTimer <
20)
{
__nop();
}
R_IT_Stop();
I2C_Read(&r, 0);
delay_ms(10);
G_100usTimer=0;
G_msTimer = 0;
R_IT_Start();
while (I2C_IsBusy() && G_msTimer <
20)
{
__nop();
}
R_IT_Stop();
result = 1;
return result;
}
- void I2C_Start(void);
- void I2C_Stop(void);
- void I2C_Read(I2C_Request *iRequest, void(*callback)(void));
- void I2C_Write(I2C_Request *iRequest, void(*callback)(void));
- _Bool I2C_IsBusy(void);
- Agregar código, compilar y debug:
--> Practica #8
2.- Compilar con el icono del martillo, debug con el icono del insecto y correr software:
RESULTADO:
No hay comentarios.:
Publicar un comentario