2009-07-13 14 views

Respuesta

8

Además de habilitar o deshabilitar el IRQ/FIQ mientras está en modo supervisor, no hay una configuración especial que deba tener en el ARM para usarlo, a menos que el sistema (que el chip ARM está ejecutando) tenga lo inhabilitó en el hardware (basado en su comentario, este no es el caso, ya que está viendo que el pin de entrada FIQ se maneja correctamente).

Para aquellos que desconocen de los acrónimos, FIQ es simplemente el último vector de interrupción en la lista lo que significa que no se limita a una instrucción de salto como las otras interrupciones son. Eso significa que puede ejecutarse más rápido que los otros manejadores de IRQ.

Las IRQ normales están limitadas a una instrucción de bifurcación, ya que deben asegurarse de que su código encaje en una sola palabra. FIQ, porque no sobrescribirá ningún otro vector IRQ, solo puede ejecutar el código directamente sin una instrucción de bifurcación (de ahí el "rápido").

La línea de entrada FIQ es solo una manera para que los elementos externos activen el chip ARM en el modo FIQ y comiencen a ejecutar la excepción correcta. No hay nada en el ARM que impida que eso suceda, excepto el CPSR.

Para activar la FIQ en el modo de supervisor:

MRS r1, cpsr   ; get the cpsr. 
BIC r1, r1, #0x40 ; enable FIQ (ORR to disable). 
MSR cpsr_c, r1  ; copy it back, control field bit update. 

Algo similar se puede hacer para IRQ normales, pero utilizando # 0x80 en lugar de # 0x40.

+0

Soy ingeniero de hardware. Ejecuto la simulación y vi que ARM FIQ está activado al inicio de ARM, pero ARM no responde. Supongo que tal vez el bit CPSR F está de alguna manera deshabilitado? –

+0

@stone, haga la instrucción MRS en la respuesta y vea qué b6 (0x40) está configurado. Probablemente esté deshabilitado. – paxdiablo

+1

si necesita una pila mientras está en la interrupción rápida, necesitará/necesitará configurar la pila de fiq (hay 6 pilas separadas en el brazo). –

1

El fabricante del chip puede cerrar el FIQ con las extensiones de trustzone.

Trustzone crea un mundo seguro y un mundo normal. El mundo seguro tiene su propio supervisor, usuario y espacio de memoria. La idea es que las operaciones seguras se enruten para que nunca salgan del chip y no puedan rastrearse incluso si escanea las patillas del bus. Creo que en OMAP se usa para algunas operaciones de criptografía.

Encendido Restablecer el núcleo se inicia en modo seguro. Configura el monitor seguro (puerta de enlace entre mundo seguro y no seguro) y en este momento FIQ puede configurarse para enrutarse al monitor. Creo que es el bit SCR.FIQ el que puede establecerse y luego todos los FIQ ignoran el valor de CPSR.F y pasan al modo de monitor. Verifique ARM ARM pero si recuerdo correctamente si esto está sucediendo, no hay forma de que usted sepa de un código OS no seguro. Luego, el monitor reiniciará los registros mundiales normales y realizará un retorno de excepción con PC configurado en el vector de excepción de reinicio.

El núcleo interrumpe el modo de monitor, hace lo suyo y regresa.

Lo siento, no puedo responder en los comentarios, no tengo la reputación suficiente, siempre se puede arreglar eso;), pero espero que vea esta Cuidado

Cuestiones relacionadas