Instrucciones de funcionamiento para Hisilicon GPIO

Recientemente, cuando estaba investigando el chip HiSilicon y obtuve el GPIO, al principio estaba confundido. Después de buscar y mirar la documentación, parecía entender cómo usarlo. Presenta este artículo para ayudarte a entender.
De acuerdo con el manual 3520dv400 (los otros son iguales), usar gpio solo requiere 3 pasos


1 Establecer multiplexación de puerto gpio


La llamada multiplexación se refiere a que un puerto puede hacer muchas cosas al mismo tiempo, pero debe configurar lo que se le pide que haga. Esta es la función del registro de multiplexación de pines.
Por ejemplo, si queremos configurar GPIO6_7, primero debemos encontrar la dirección de registro multiplex de pin correspondiente. Consulte el manual, las instrucciones correspondientes se muestran en la figura. Esto significa que si desea utilizar este pin como un puerto IO, debe escribir 00 en el registro muxctrl_reg55. Entonces, ¿dónde está el registro muxctrl_reg55? La dirección de desplazamiento 0x0DC se ha proporcionado anteriormente. Según el manual, la dirección base es 0x200F_0000. Entonces la dirección de este registro es 0x200F_00DC.
Entonces, cómo escribir el valor en él, HiSilicon SDK le ha dado la herramienta himm. Simplemente
ingrese el siguiente comando:
himm 0x200F00DC 0
para que la función del pin correspondiente de GPIO6_7 se configure en el puerto IO

 

2 Establezca la dirección del puerto GPIO


La llamada dirección es si usa io como entrada o salida. Por ejemplo, si su placa está conectada a un módulo de batería, desea que el módulo de batería emita una señal a su placa cuando no hay energía, diciéndole que no hay energía, entonces debe usar el puerto io como entrada. Por el contrario, si necesita decirle al dispositivo externo lo que está sucediendo, debe generar el puerto io.

Establecer la dirección del puerto GPIO en realidad está escribiendo el registro GPIO_DIR. Del mismo modo, primero necesita encontrar la dirección.
Mire las siguientes dos tablas:


Al buscar la tabla, la dirección de registro GPIO_DIR de GPIO6_7 es 0x201A_0400. Luego hay 8 bits en el registro GPIO_DIR, cada bit corresponde a una dirección GPIO, a saber:

Si desea establecer la dirección de GPIO6_7 como salida, ingrese el comando: himm 0x201A0400 0b10000000.
Pero en la operación real, hacer esto directamente puede afectar otras direcciones GPIO, por lo que es mejor leer el valor en el registro primero, solo cambie el bit El valor de 7 permanece sin cambios.

 

3 Leer o escribir el valor GPIO


Este bloque es en realidad el registro GPIO_DATA, como se puede ver por el nombre, este registro es el valor instalado, es muy fácil de entender. Pero lo que es difícil de entender es un párrafo en el manual:

Entiendo que GPIO_DATA [7: 0] en realidad corresponde a 8 puertos IO desde GPIO6_7 a GPIO6_0. Cada bit es 1 o 0, que corresponde al valor de cada puerto IO.

Entonces, ¿qué significan las direcciones 0x3FC y 0x200 en ese párrafo? Entiendo que en realidad le permiten realizar operaciones por lotes en los valores GPIO.
Por ejemplo, si solo desea operar GPIO6_7, su dirección de compensación debe ser 0b10_0000_0000 (es decir, 0x200), pero si desea operar GPIO6_7 y GPIO6_6 al mismo tiempo, entonces la dirección de compensación que debe dar debe ser 0b11_0000_0000 (es decir, 0x300 )
Entonces, para continuar con el ejemplo anterior, solo configuramos la salida 1 para GPIO6_7, luego debemos ingresar: himm 0x201A0200 0xFF

Aunque el valor que le damos es 0xFF, pero por las razones anteriores, de hecho, simplemente asignamos un valor a GPIO_DATA [7], y nada más funciona.

Finalmente, agregué que la diferencia entre los números gpio y haisi gpio en linux: cuando
estudio los datos, primero miro el diagrama esquemático y, en cuanto lo veo, veo que los números gpio son todos gpiox_x (gpio6_6 y similares). . Debido a que solo he hecho una entrada y salida GPIO simple en Linux antes, solo tengo en mente a gpiox, como gpio1 y gpio2. Después de leer el manual de la CPU, aprendí que el gpio original está agrupado. Por ejemplo, el 3516cv200 tiene 9 grupos y cada grupo tiene 8 puertos io, por lo que gpio6_6 significa el séptimo puerto io del sexto grupo.
 

115 artículos originales publicados · Me gusta 29 · Visitantes 50,000+

Supongo que te gusta

Origin blog.csdn.net/huabiaochen/article/details/102383381
Recomendado
Clasificación