Hablando de la depuración del reloj en el desarrollo del controlador

  

Creo que los amigos que han depurado el controlador han estado más o menos expuestos al reloj. Porque el reloj es indispensable para el dispositivo, al igual que el corazón suministra sangre al cuerpo humano. Algunos dispositivos tienen sus propios relojes, otros reciben relojes externos del sistema y la fuente del reloj es la piedra angular de la operación del dispositivo.

Por lo tanto, detectar si el reloj está funcionando es una de las claves para depurar el dispositivo. En este artículo, le daré un método efectivo de depuración del reloj: no es necesario usar el comprobador, pero use el método del software.

Hablaré sobre el problema del reloj que encontré y luego veré cómo depurar el reloj.

El problema ocurrió al desarrollar el controlador mcc (controlador multicanal) — — cuando probamos el controlador, encontramos que no importa cómo se configuraron los parámetros de mcc y los dispositivos de activación, el dispositivo estaba en silencio, como si estuviera muerto. Por lo tanto se recibe el reloj estimado. Después de la investigación, la fuente de reloj mt9045 utilizada por mcc no está configurada. Esta fuente de reloj ingresará los relojes de transmisión y recepción de entrada de mcc, así como el reloj síncrono.

Como no teníamos suficientes datos para configurar el reloj en ese momento, y el reloj era realmente complicado, estuvimos ocupados por un tiempo y no lo logramos. Por lo tanto, necesitamos urgentemente verificar la corrección de la entrada del reloj. Si usa un probador de onda, no sabe cómo recoger los pines del hardware (el dispositivo está bien empaquetado). Finalmente, usamos un programa de software para detectar la frecuencia del reloj del puerto.


static

int frequency_count (addr largo sin signo volátil, máscara int sin signo)

{

int t, nt, et;

int v, lv, cnt;


t = Gettick ();

while (1)

{< Br>

nt = Gettick ();

if (nt! = T)

break;

}

et = nt + GetsysClkRate ();

cnt = 0;

lv = v = (* (int *) addr) &mask;

while (1)

{

nt = Gettick ();

if (nt > = et)

break;

v = (* (int *) Addr) &mask;

if (v! = Lv)

{

lv = v;

cnt ++;

}

}

return cnt /2;

}


Los valores calculados del programa anterior son aproximados, cuando el sistema Cuando la frecuencia de la CPU es rápida, la precisión se trata: el mecanismo queda para que todos lo entiendan.

El uso de la función es muy simple. Al detectar una determinada salida de reloj, es decir, si un pin en una línea de dirección particular (un ángulo de software es un bit) genera una frecuencia, solo se requieren la dirección de la dirección y la máscara de pin de salida de frequency_count, como la dirección 0xfdf90d50. El bit 0 se pasa a 0xfdf90d50, 0x00000001. La función da salida al valor de frecuencia de tiempo.

Tenga en cuenta que hay dos funciones auxiliares. Uno es Gettick, que se utiliza para obtener el valor de tictac actual del sistema, y ​​el otro es GetsysClkRate para obtener la frecuencia de tics del sistema.

Las funciones anteriores se pueden implementar de la siguiente manera en un sistema Linux.


static int Gettick ()

{

return (int) jiffies;

}

< Br>

static int GetsysClkRate ()

{

return (int) HZ;

}

Las funciones anteriores para el sistema vxWorks se pueden implementar de la siguiente manera

static int Gettick ()

{

return tickGet ();

}


static int GetsysClkRate ()

{

return sysClkRateGet ();

}



Copyright © Conocimiento de Windows All Rights Reserved