Chức năng nhập xuất tín hiệu số GPIO trên nRF52832 Bluetooth SoC

Khối nhập xuất tín hiệu số GPIO trên chip Bluetooth nRF52832 của hãng Nordic được tổ chức bởi 1 Port với 32 chân I/O có thể truy cập điều khiển độc lập. Hai hoạt động chính của khối này là đọc tín hiệu điện áp đặt vào bên ngoài một chân của chip (INPUT) và điều khiển cho chân của chip nối nguồn hoặc nối đất (OUTPUT). Bài viết này sẽ hướng dẫn các bạn tiếp cận những tính năng cơ bản trên dựa vào thư viện được xây dựng sẵn trong nRF52 SDK của  hãng Nordic và KeilC IDE. 

Đầu tiên, mình giới thiệu sơ qua một số đặc tính về điện áp của nRF52832 và các chân I/O mà các bạn cần nắm để giao tiếp với các thiết bị khác:

  • Điện áp nguồn cung cấp  VDD: 1.7 V–> 3.6 V
  • Điện áp đầu vào được hiểu là mức cao: 0.7VDD -> VDD
  • Điện áp đầu vào được hiểu là mức thấp: VSS -> 0.3VDD
  • Điện áp đầu ra mức cao: VDD-0.4 -> VDD
  • Điện áp đầu ra mức thấp: VSS -> VSS+0.4

Về dòng điện thì các bạn xem ở bảng sau:

Để sử lập trình tính năng input/output thì chúng ta cần khai thác file thư viện nrf_gpio.h, File này các bạn có thể tìm thấy trong nRF52 SDK (….SDK\modules\nrfx\hal\)

I/ Khai báo INPUT/OUPUT

Để khai báo sử dụng 1 chân chúng ta sử dụng hàm nrf_gpio_cfg, hàm này được định nghĩa như sau:

Trong đó: 

  • in_number: 0-> 31, tên chân
  • nrf_gpio_pin_dir_t dir
    • NRF_GPIO_PIN_DIR_INPUT, sử dụng chân đó với tính năng input.     
    • NRF_GPIO_PIN_DIR_OUTPUT, sử dụng chân đó với tính năng ouput.
  • nrf_gpio_pin_input_t input
    • NRF_GPIO_PIN_INPUT_CONNECT, sử dụng input buffer.
    • NRF_GPIO_PIN_INPUT_DISCONNECT, không sử dụng input buffer.
  • nrf_gpio_pin_pull_t pull
    • NRF_GPIO_PIN_NOPULL, không dùng trở kéo
    • NRF_GPIO_PIN_PULLDOWN, sử dụng trở kéo xuống
    • NRF_GPIO_PIN_PULLUP, sử dụng trở kéo lên
  • nrf_gpio_pin_drive_t drive
    • Các giá trị: NRF_GPIO_PIN_S0S1, NRF_GPIO_PIN_H0S1, NRF_GPIO_PIN_S0H1, NRF_GPIO_PIN_S0H1, NRF_GPIO_PIN_S0H1, NRF_GPIO_PIN_H0H1, NRF_GPIO_PIN_D0S1, NRF_GPIO_PIN_D0H1, NRF_GPIO_PIN_S0D1, NRF_GPIO_PIN_H0D1
    • Được sử dụng để cài đặt dòng ra cho 1 chân. 
  • nrf_gpio_pin_sense_t sense
    • NRF_GPIO_PIN_NOSENSE
    • NRF_GPIO_PIN_SENSE_LOW
    • NRF_GPIO_PIN_SENSE_HIGH
    • Lựa chọn phát hiện mức cao hay mực thấp trên đầu vào của 1 chân. 

Để đơn giản hơn, các bạn có thể sử dụng 2 hàm mặc định sau để khai báo input hoặc ouput, 2 hàm này đã được định nghĩa sẵn bên trong file nrf_gpio.h: 

II/ Chức năng INPUT

Sau khi đã cấu hình một chân với tính năng INPUT, để đọc mức điện áp đang đặt bên ngoài chân, chúng ta sử dụng hàm:

uint32_t nrf_gpio_pin_read(uint32_t pin_number)

Trong đó:

  • pin_number: là chân muốn đọc ( từ 0 – 31 )
  • Return        
    • 1 – tương ứng với mức logic 1
    • 0 – tương ứng với mức logic 0

III/ Chức năng OUTPUT

Sau khi đã cấu hình 1 chân với chức năng OUTPUT, để điều khiển mức logic cho chân OUPUT đấy, chúng ta sử dụng hàm sau: 

void nrf_gpio_pin_write(uint32_t pin_number, uint32_t value)

Trong đó: 

  • pin_number : là chân muốn ghi ( từ 0 – 31 )
  • Value:
    • 0  – xuất ra mức logic 0 (Chân được nối với GND)
    • 1 – xuất ra mức logic 1 (Chân được nối với VCC)

Các bạn cũng có thể sử dụng lệnh để đảo giá trị logic của 1 chân.: void nrf_gpio_pin_toggle(uint32_t pin_number) 

Lưu ý: Bạn cũng có thể đọc 1 chân OUTPUT để kiểm tra giá trị lần cuối các bạn ghi vào là bao nhiêu. 

Bài viết hướng dẫn tiếp theo sẽ có nội dung về External Interrupt, các bạn cũng có thể theo dõi các bài viết khác trong chuỗi hướng dẫn về Bluetooth Low Energy, Bluetooth Mesh tại đây. Chúc các bạn thành công! 

Nhóm TAPIT R&D