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.
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