Hola Suky...
debo agradecerte muchísimo la ayuda...
estuve haciendo puebas hasta ahora y finalmente lo conseguí. Lamentablemente, no era por un tema de software, sino por un error humano. la alimentación VA+ estaba cortada.
Ahora recibo datos, aunque no son estables, veré si funciona correctamente leyendo los otros registros...
adjunto el código optimizado, que inicializa el chip de Cirrus y lee temperatura, IRMS y VRMS por si le sirve a alguien
#include <18f252.h>
#fuses HS,NOWDT
#use delay(clock=20MHz)
#use spi(FORCE_HW, MODE=0, MASTER, stream=MYSPI, BITS=32)
#use rs232(baud=19200, uart1, ERRORS, stream=SERIE)
//constantes
#define LED PIN_B4
#define RESET PIN_B5
#define INT PIN_B1
//variables globales
//definicion de funciones
void CS5463_init()
{
// Software reset
spi_xfer(MYSPI, 0x80, 8);
delay_ms(200);
//Registro de configuración: Int activo bajo; HPF=1, K=1
spi_xfer(MYSPI, 0x40000061);
//N=4000 cristal de 4,096MHz
spi_xfer(MYSPI, 0x4A000FA0);
// Borrar todos los bits de STATUS
spi_xfer(MYSPI, 0x5E000000);
// Mask=0x800000 -> INT=DRDY Ciclo de computado terminado
spi_xfer(MYSPI, 0x74800000);
//Conversión contínua
spi_xfer(MYSPI, 0xE8, 8);
}
void main()
{
int32 recibido;
output_high(LED);
delay_ms(1000);
output_low(LED);
fprintf(SERIE, "Iniciando dispositivo...");
output_low(RESET);
delay_ms(200);
output_high(RESET);
delay_ms(100);
CS5463_init();
fprintf(SERIE, "OK\r\n\r\n");
for(;;)
{
// Lee Temperatura
recibido=spi_xfer(MYSPI, 0x26FFFFFF);
fprintf(SERIE, "Temperatura: \t%LX\r\n", recibido);
// Lee IRMS
recibido=spi_xfer(MYSPI, 0x16FFFFFF);
fprintf(SERIE, "Corriente: \t%LX\r\n", recibido);
// Lee VRMS
recibido=spi_xfer(MYSPI, 0x18FFFFFF);
fprintf(SERIE, "Voltaje: \t%LX\r\n", recibido);
// Borra todos los bits de STATUS
spi_xfer(MYSPI, 0x5E800000);
delay_ms(1000);
}
Debo comenrtar que las entradas Vin+- y Iin+- estan cortocircuitadas, para que la entrada del comparador sea cero, aunque, todavía no calibro el chip.
dejaré el tema abirto hasta que verifique que funciona bien...
Saludos a todos y muchas gracias