comunicación I2C ADV7511

0

Actualmente estoy intentando comunicarme a través de I2C al transmisor HDMI ADV7511 de Zynq 7000 Soc, usé este ejemplo como referencia para el inicio, pero sin éxito, el programa se atasca en la función XIicPs_MasterSendPolled() en esta línea de código

    /*
     * Check for completion of transfer.
     */
    while ((IntrStatusReg & XIICPS_IXR_COMP_MASK) != XIICPS_IXR_COMP_MASK){

        IntrStatusReg = XIicPs_ReadReg(BaseAddr, XIICPS_ISR_OFFSET);
        /*
         * If there is an error, tell the caller.
         */
        if ((IntrStatusReg & Intrs) != 0U) {
            return (s32)XST_FAILURE;
        }
    }

Nunca sale de este bucle while , ¿cuáles son las posibles razones o consejos sobre qué verificar?

¡Gracias!

    
pregunta Lazar

1 respuesta

0

Hay muchas cosas que podrían salir mal. Si esto ocurre en el momento del arranque, es posible que el ADV7511 aún no esté listo, puede necesitar más tiempo de arranque.

O, su reloj bombea demasiado rápido. Nada como sondas reales para mirar las señales. A falta de eso, entonces Cadence IP, puede mostrar un modelo de la comunicación.

O tan simple como sus pull ups y pull downs predeterminados en el ADV7511 no se han configurado correctamente, por su método de comunicación.

O simplemente para sonreír, ralentizar el reloj de comunicación al ADV. Mi vistazo rápido a su código me dice que está usando el reloj predeterminado del sistema. Eso es probablemente en el rango de 20MHz a 100MHz más ... Cuando un puerto de comunicaciones configurado en un chip como un ADV está esperando una comunicación mucho más lenta. I2C está en rangos de reloj como 100KHz.

    
respondido por el Scott McGowan

Lea otras preguntas en las etiquetas