Red de conocimiento informático - Conocimiento informático - El controlador integrado Samsungs3c2410linux tiene una función para determinar si se presiona un botón. El código es el siguiente, por favor comprenda.

El controlador integrado Samsungs3c2410linux tiene una función para determinar si se presiona un botón. El código es el siguiente, por favor comprenda.

El puerto S3C2410_GPFDAT está conectado a 8 botones y el S3C2410_GPGDAT está conectado a 8 botones.

Un bit representa un botón y un bit tiene 16 botones.

Cuando se presiona la tecla, la información de la tecla se conoce mediante sondeo o interrupción, y luego se pasa un parámetro de número irq, es decir, 44+(0~15)=44~59. puede basarse en el número de interrupción conectado o alguna otra regla de diseño de hardware (dependiendo de las conexiones y la configuración del hardware de su dispositivo), que representa qué tecla se presionó.

estático

estático int iskey_down(unsigned long irq)

{

int reg, gpio_no;

irq_no = (int irq); // Obtener el número de interrupción (el identificador de clave)

irq_no = irq_no - 44; //EINT4~29; //EINT4~29, 20; ~23 // Resta el desplazamiento 44 para obtener el código de clave 0~15, que representa una de las 16 claves

if(irq_no<8) // Si es 0~7, está en el Puerto GPFDAT 8 botones presionados

{

reg = _raw_read( S3C2410_GPFDAT); // Lee el estado de los botones en el puerto GPFDATA, cada bit representa un botón

gpio_no = irq_no; // La posición (0~7) del valor clave específico en GPFDATA corresponde al número de clave (0~7) (0:7~0:7), y se puede utilizar directamente para recuperar el bit específico más tarde

}

else

{

reg = raw_readl(S3C2410_GPGDAT); // Lee la clave en GPGDATA; Estado del puerto, cada bit representa una clave

gpio_no = irq_no - 8; // El valor de una clave específica en GPGDATA en la posición (0 ~ 7) está sesgado desde el número de clave (8 ~ 15) Shift relación de mapeo, por lo tanto, reste directamente 8 para que los bits correspondan a (0: 7 ~ 0: 7), para facilitar la extracción de bits específicos más adelante

}

if ( reg& (1 & lt; gpio_no)) // si la clave correspondiente no tiene bit