SAKC GPIOs/es

From Qi-Hardware
Jump to: navigation, search

NOTE, SAKC has been renamed SIE. So, some places SAKC is referred to as SAKC.


El procesador RISC de 32 bits Jz4740 que incluye el SIE contiene 124 pines de propósito general (GPIO) que permiten, entre otras cosas, conectar los periféricos básicos para el funcionamiento del SIE. Cada uno de esos pines está asociado con varios registros internos que permiten modelar su comportamiento, al modificar el valor de los bits de cada uno de los registros.

Para utilizar GPIOs como puertos para conexión de un periférico como una SDRAM, alteramos los siguientes registros:

  1. #define __gpio_as_sdram_32bit()          \
  2. do {                                     \     
  3.      REG_GPIO_PXFUNS(0) = 0xffffffff;    \
  4.      REG_GPIO_PXSELC(0) = 0xffffffff;    \
  5.      REG_GPIO_PXPES(0) = 0xffffffff;     \
  6.      REG_GPIO_PXFUNS(1) = 0x81f9ffff;    \
  7.      REG_GPIO_PXSELC(1) = 0x81f9ffff;    \
  8.      REG_GPIO_PXPES(1) = 0x81f9ffff;     \
  9.      REG_GPIO_PXFUNS(2) = 0x07000000;    \
  10.      REG_GPIO_PXSELC(2) = 0x07000000;    \
  11.      REG_GPIO_PXPES(2) = 0x07000000;     \
  12. } while (0)

Para definir un puerto del Jz4740 como de entrada o salida, la diferencia es que hay que pasarle dos parámetros al llamar la función. Para definir una salida se usa:

  1. #define __gpio_port_as_output(p, o)          \
  2. do {                                         \
  3.      REG_GPIO_PXFUNC(p) = (1 << (o));        \
  4.      REG_GPIO_PXSELC(p) = (1 << (o));        \
  5.      REG_GPIO_PXDIRS(p) = (1 << (o));        \
  6. } while (0)

Para definir una entrada se usa:

  1. #define __gpio_port_as_input(p, o)           \
  2. do {                                         \
  3.      REG_GPIO_PXFUNC(p) = (1 << (o));        \
  4.      REG_GPIO_PXSELC(p) = (1 << (o));        \
  5.      REG_GPIO_PXDIRC(p) = (1 << (o));        \
  6. } while (0)

Los pines de GPIO también se pueden configurar o bien como resistencias de pull-up usando la siguiente función:

  1. #define __gpio_enable_pull(n)             \
  2. do {                                      \
  3.      unsigned int p, o;                   \
  4.      p = (n) / 32;                        \
  5.      o = (n) % 32;                        \
  6.      REG_GPIO_PXPEC(p) = (1 << o);        \
  7. } while (0)

Para desactivar la resistencia de pull-up se llama la función:

  1. #define __gpio_disable_pull(n)            \
  2. do {                                      \
  3.      unsigned int p, o;                   \
  4.      p = (n) / 32;                        \
  5.      o = (n) % 32;                        \
  6.      REG_GPIO_PXPES(p) = (1 << o);        \
  7. } while (0)

A continuación podemos observar una lista de las diferentes formas en las cuales podemos utilizar los GPIO del Jz4740 definidas por el fabricante:

  1. __gpio_as_func0(n)
  2. __gpio_as_func1(n)
  3. __gpio_as_sdram_32bit()
  4. __gpio_as_sdram_16bit()
  5. __gpio_as_nand()
  6. __gpio_as_nor_8bit()
  7. __gpio_as_nor_16bit()
  8. __gpio_as_uart0()
  9. __gpio_as_uart1()
  10. __gpio_as_lcd_16bit()
  11. __gpio_as_lcd_18bit()
  12. __gpio_as_slcd_8bit()
  13. __gpio_as_slcd_9bit()
  14. __gpio_as_slcd_16bit()
  15. __gpio_as_slcd_18bit()
  16. __gpio_as_cim()
  17. __gpio_as_aic()
  18. __gpio_as_msc()
  19. __gpio_as_ssi()
  20. __gpio_as_i2c()
  21. __gpio_as_pwm()
  22. __gpio_port_as_output(p, o)
  23. __gpio_port_as_input(p, o)
  24. __gpio_as_output(n)
  25. __gpio_as_input(n)
  26. __gpio_set_pin(n)
  27. __gpio_clear_pin(n)
  28. __gpio_get_pin(n)
  29. __gpio_as_irq_high_level(n)
  30. __gpio_as_irq_low_level(n)
  31. __gpio_as_irq_rise_edge(n)
  32. __gpio_as_irq_fall_edge(n)
  33. __gpio_mask_irq(n)
  34. __gpio_unmask_irq(n)
  35. __gpio_ack_irq(n)
  36. __gpio_get_irq()
  37. __gpio_group_irq()
  38. __gpio_enable_pull(n)
  39. __gpio_disable_pull(n)
Personal tools
Namespaces
Variants
Actions
Navigation
interactive
Toolbox
Print/export