toilet

kimtinh - Bài 3: Chức năng GPIO cho KIT NuTiny-SDK-Nano130

Thảo luận trong 'Bài viết dự thi'

Đang xem chủ đề này ( Thành viên: 0, Khách: 0)

  1. Đăng 11/6/14 #1

    kimtinh Sinh viên cao đẳng

    Số bài viết: 20
    Đã được thích: 34
    BÀI DỰ THI TÌM HIỂU KIT PHÁT TRIỂN CỦA NUVOTON
    - Họ và tên: Nguyễn Kim Tình
    - Nick diễn đàn: kimtinh
    - Bài 3: Chức năng GPIO cho KIT NuTiny-SDK-Nano130 của Nuvoton.

    Tổng quan:

    Lên đến 86 chan I/O có thể được chia sẻ với các chân chức năng khác; nó phụ thuộc vào cấu hình chip. 86 chân I/O được bố trí trong 6 cổng được đặt tên với GPIOA, GPIOB, GPIOC, GPIOD, GPIOE và GPIOF.Mỗi cổng A ~ E có tối đa là 16 chân trong khi cổng F có 6 chân. Mỗi một chân trong 86 chân là độc lập và có các bit đăng ký tương ứng để điều khiển chức năng chế độ pin và dữ liệu. Loại I/O của mỗi chân phần mềm được cấu hình như đầu vào, đầu ra, và chế độ mở cống được độc lập. Mỗi pin I/O có một trở kéo lên khoảng 110 K? ~ 300 K? cho VDD từ 1,8 V đến 3,6 V.

    Tính năng:

    Có 3 chức năng I/o chính:
    • Push-Pull output (đầu ra Push-Pull )
    • Open-Drain output (đầu ra mở cửa-Drain )
    • Supports Input ( đầu vào )
    Ngoài ra:
    • All inputs with Schmitt trigger
    • I/O pin configured as interrupt source with edge/level setting
    • Supports High Driver and High Sink I/O mode
    • Supports input 5V tolerance (except ADC and DAC shared pins

    Trong bài này ta chỉ quan tâm đến input và output, lên chỉ can tim hiểu 3 thanh ghi cơ bản sau con lại cac tinh năng va thanh ghi có thể tìm hiêu kỹ hơn trong file NuMicro™ Family Nano100 Series Technical Reference Manual.PDF.phần I/O.

    I/O Mode Control Register:

    Là thanh ghi điêu khiển các chế độ I/O từng pin của từng cổng. Mỗi cổng có một thanh ghi control 32 bit và mỗi cổng có tối đa la 16 pin, mỗi chế độ mỗi pin quy dinh bởi 2 bit.
    Các thanh và sơ đồ thanh ghi:
    upload_2014-6-11_1-31-19. upload_2014-6-11_1-31-51.
    Cổng GPIO[x] Pin[n]: Chế độ điều khiển xác định loại I/O của cổng. PDM[n] =:
    • 00 = cổng GPIO [x] pin [n] là trong chế độ VÀO.
    • 01 = GPIO cổng [x] pin [n] là trong chế độ OUTPUT.
    • 10 = cổng GPIO [x] pin [n] ở chế độ mở Drain.
    • 11 = không sử dụng.
    Lưu ý: Đối với GPIOF_PMD, PMD6 ~ PMD15 đều được bảo vệ

    Data Output Value Register:

    upload_2014-6-11_1-31-19. upload_2014-6-11_1-31-51.
    Thanh ghi GPIOx_DOUT co 32 bit, từ bít 16 -31 khong sư dụng, tư bít 0-15 tương ưng với 16 pin của cổng.
    Cổng GPIO [x] Pin [n]



      • 0 = cổng GPIO [x] Pin [n] thiết lập pin [n] =0.
      • 1 = cổng GPIO [x] Pin [n] thiết lập pin [n] =1.
    Lưu ý: Đối với GPIOF_DOUT, bit [15:06] không sư dụng.

    Pin Value Register GPIOx_PIN:

    upload_2014-6-11_1-34-45.
    Giá trị đọc từ mỗi bit sẽ tương ứng với giá trị trên pin tương ứng GPIO Port [x] Pin [n]
    Lưu ý: Đối với GPIOF_PIN, bit [15:06]ko sư dụng.

    Trên là các thanh ghi cơ bản cho việc nhập xuất và sẽ đươc tác động tới các thanh ghi này để thưc hiên chức năng của các pin tương ừng với các bit trong thanh ghi.
    Lập trình I/O:

    Từ thư viên tải về nano1xx_gpio.h chứa các hàm phục vụ cho chức năng GPIO. Trong bài này chúng ta chỉ quan tâm các hàm thực hiện chức năng I/O các chức năng khác các bạn tham khảo trong thư viện.

    Hàm GPIO_Open. Thiết lập ché độ I/O.

    GPIO_Open(GPIO_TypeDef *port, uint32_t mode, uint32_t mask)
      • port: specific GPIO port, GPIOA ~ GPIOF.
      • mode: specific operation mode
        • GPIO_PMD_PMDx_INPUT Pin x input mode
        • GPIO_PMD_PMDx_OUTPUT Pin x output mode
        • GPIO_PMD_PMDx_OPEN_DRAIN Pin x open drain mode
      • mask: operation mode mask. GPIO_PMD_PMDx_MASK
    Hàm GPIO Close. Tắt GPIO

    GPIO_Close(GPIO_TypeDef *port, uint32_t bit)
      • port: specific GPIO port, GPIOA ~ GPIOF.
      • bit : specific bit of GPIO port, 0 ~ 15.
    Hàm GPIO_SetBit. Thiết lập giá trị 1 cho pin. (output)

    GPIO_SetBit(GPIO_TypeDef *port, uint32_t bit)
      • port: specific GPIO port, GPIOA ~ GPIOF.
      • bit : specific bit of GPIO port, 0 ~ 15.
    Hàm GPIO_ClrBit. Thiết lập mức 0 cho pin.

    GPIO_ClrBit(GPIO_TypeDef *port, uint32_t bit)
      • port: specific GPIO port, GPIOA ~ GPIOF.
      • bit : specific bit of GPIO port, 0 ~ 15.
    Hàm GPIO_GetBit. Hàm trả về giá trị trên pin. (input)

    GPIO_GetBit(GPIO_TypeDef *port, uint32_t bit)
      • port: specific GPIO port, GPIOA ~ GPIOF.
      • bit : specific bit of GPIO port, 0 ~ 15.
    các hàm khác các bạn tim trong thư viện.

    Ví dụ: dùng một phím nối với PA.0 và một Led nối với PA.. khi bấm phím thì Led sáng phím không bấm thi led tắt.

    upload_2014-6-11_1-40-37.


    Mã:
    #include <stdio.h>
    #include "nano1xx.h"
    #include "nano1xx_gpio.h"
    #include "system_nano1xx.h"
    
    void delay(uint32_t ucnt)                     // hàm trễ
    {
        volatile uint32_t i = ucnt;
        while (i--);
    }
    
    int main (void)                                   // chương trình chính
    {
    SystemInit();                                 // hàm khởi tạo System Clock
    GPIO_Open(GPIOA, GPIO_PMD_PMD0_OUTPUT, GPIO_PMD_PMD0_MASK); // khởi tạo port A pin 1 ( bit 0) chức năng out
    GPIO_Open(GPIOA, GPIO_PMD_PMD1_INPUT, GPIO_PMD_PMD1_MASK); // khởi tạo port A pin 2 ( bit 1) chức năng input
    GPIO_ClrBit(GPIOA, 0);                        // tăt led
    while(1);
        {
              if (GPIO_GetBit(GPIOA, 1) == 0)             // kiem tra phim
                {
                  while(GPIO_GetBit(GPIOA, 1)==0){;};
                  Delay(30000);                    //Chong rung phim
                  GPIO_SetBit(GPIOA, 0);                 // bật led
                  Delay(5000000);
                 }
             else
                   {
                    GPIO_ClrBit(GPIOA, 0);
                   }
          }
    }
    

    Các file đính kèm:

    daotruongprocamxuc831 thích bài này.
    #1
  2. Đăng 3/8/14 #2

    kimtinh Sinh viên cao đẳng

    Số bài viết: 20
    Đã được thích: 34
    code:
    Mã:
    #include <stdio.h>
    #include "nano1xx.h"
    #include "nano1xx_gpio.h"
    #include "system_nano1xx.h"
    
    void delay(uint32_t ucnt)    // hàm trễ
    {
        volatile uint32_t i = ucnt;
        while (i--);
          }
    int main (void)                                  
    {
        int32_t i32Err;
        SysInit_Clock(); // hàm khởi tạo System Clock
        GPIO_Open(GPIOE, GPIO_PMD_PMD6_OUTPUT, GPIO_PMD_PMD6_MASK);
        GPIO_Open(GPIOE, GPIO_PMD_PMD12_OUTPUT, GPIO_PMD_PMD12_MASK);
    while(1)
         {
         GPIO_ClrBit(GPIOE, 6);
         delay (300000);
         GPIO_SetBit(GPIOE, 6);
         GPIO_ClrBit(GPIOE, 12);
         delay (300000);
         GPIO_SetBit(GPIOE, 12);
            }
    }
    
    video:
    BuiBachTuanAnh thích bài này.
    #2
  3. Đăng 3/8/14 #3

    huunho Thạc sỹ

    Số bài viết: 3,042
    Đã được thích: 1,370
    Khả năng bạn nên dịch hẳn sang tiếng việt cho mọi người dễ hiểu và để bài dự thi đạt điểm cao:
    • Push-Pull output (đầu ra có điện trở kéo)
    • Open-Drain output (đầu ra có cực máng hở - Không có điện trở kéo )
    • Supports Input ( đầu vào )
    Ngoài ra:
    • I/O pin configured as interrupt source with edge/level setting ( các chân I/O được cấu hình làm nguồn ngắt kích phát sườn hoặc kích phát mức )
    kimtinhBuiBachTuanAnh thích bài này.
    #3
  4. Đăng 11/8/14 #4

    kimtinh Sinh viên cao đẳng

    Số bài viết: 20
    Đã được thích: 34
Tags: daotruongpro

Chia sẻ trang này