Trung tâm đào tạo thiết kế vi mạch Semicon


  • ĐĂNG KÝ TÀI KHOẢN ĐỂ TRUY CẬP NHIỀU TÀI LIỆU HƠN!
  • Create an account
    *
    *
    *
    *
    *
    Fields marked with an asterisk (*) are required.
semicon_lab.jpg

Lập trình vào ra căn bản

E-mail Print PDF

1. Mục đích:

- Viết các ứng dụng với các giao tiếp vào ra cơ bản (GPIO) trên KIT, sử dụng các GPIO driver đã có sẵn, như: giao tiếp led, button, …

- Biên dịch, nạp và thực thi ứng dụng trên KIT

2. Chuẩn bị:

- PC Linux (Ubuntu) with arm-linux-gcc

- Bộ KIT thực hành FriendlyArm mini/macro2440

- Dữ liệu: Các ví dụ tham khảo

3. Lập trình vào ra căn bản:

3.1. Viết chương trình điều khiển tắt/bật led đơn

3.1.1. Mô tả:

- Dãy 4 led đơn trên KIT ghép nối qua cổng GPIO đã có sẵn driver trên Embedded Linux.

- Mô hình giao tiếp:


3.1.2. Mã nguồn tham khảo:

(File tham khảo: leds.c)

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <sys/ioctl.h>

 int main(int argc, char **argv)

{

            int on;

            int led_no;

            int fd; 

            //Kiểm tra các tham số truyền vào đã đúng quy định chưa

            if (argc != 3 || sscanf(argv[1], "%d", &led_no) != 1 || sscanf(argv[2],"%d", &on) != 1 || on < 0 || on > 1 || led_no <             0 || led_no > 3) {

                        fprintf(stderr, "Usage: leds led_no 0|1\n");

                        exit(1);

            } 

            //Mở file

            fd = open("/dev/leds", 0);

            //Kiểm tra xem quá trình mở file có thành công không           

            if (fd < 0) {

                        perror("open device leds");

                        exit(1);

            } 

            //Điều khiển led

            ioctl(fd, on, led_no);

            close(fd);

            return 0;

}

 

3.1.3. Yêu cầu: Dựa trên ví dụ trên, viết chương trình điều khiển tắt, bật dãy led đơn. Biên dịch, nạp chương trình lên KIT và thực thi, quan sát kết quả.

Chú ý: Mặc định trên KIT chạy ứng dụng led_player trên nền Qtopia, cần tắt ứng dụng này để quan sát kết quả ứng dụng mới. Thực hiện: ….

3.2. Viết chương trình đọc trạng thái nút bấm

3.2.1. Mô tả:

- Dãy nút bấm K1, K2, K3, K4, K5, K6 trên KIT được ghép nối qua GPIO, đã có sẵn driver trên hệ điều hành Linux nhúng.

- Có thể đọc trạng thái các nút bấm này (pressed/release or not ?) và có xử lý thích hợp.

- Mô hình lập trình với nút bấm:


3.2.2. Mã nguồn tham khảo

(File buttons.c)

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <sys/ioctl.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <sys/select.h>

#include <sys/time.h>

#include <errno.h> 

int main(int argc, char** argv)

{

                       int buttons_fd;

                       //Mảng lưu trạng thái của 6 nút bấm

                       char buttons[6] = {'0', '0', '0', '0', '0', '0'};

                       //Mở file

                       buttons_fd = open("/dev/buttons", 0);

                       //Kiểm tra quá trình mở file

                       if (buttons_fd < 0) {

                            perror("open device buttons");

                            exit(1);

                       }

                       //Hỏi vòng kiểm tra trạng thái các nút bấm

                       for (;;) {

                       char current_buttons[6];

                       int count_of_changed_key;

                       int i;

                       //Đọc trạng thái các nút bấm

                       if (read(buttons_fd, current_buttons, sizeof current_buttons) != sizeof current_buttons) {

                                    perror("read buttons:");

                                    exit(1);

                       }

                       //Kiểm tra trạng thái các nút bấm và in ra trạng thái phù hợp (Key up hay Key down)

                       for (i = 0, count_of_changed_key = 0; i < sizeof buttons / sizeof buttons[0]; i++) {

                                    if (buttons[i] != current_buttons[i]) {

                                             buttons[i] = current_buttons[i];

                                             printf("%skey %d is %s", count_of_changed_key? ", ": "", i+1, buttons[i] == '0' ? 

                                             "up" : "down");

                                             count_of_changed_key++;

                                    }

                        }

                        if (count_of_changed_key) {

                                    printf("\n");

                        }         

            }

            //Đóng file thiết bị

            close(buttons_fd);

            return 0;

}

 

Bạn có đam mê ngành thiết kế vi mạch và bạn muốn có mức lương 1000 usd cùng lúc bạn

đang muốn tìm một Trung tâm để học vậy hãy đến với ngành vi mạch tại SEMICON

  HotLine: 0972 800 931 Ms Duyên

 

 

Related Articles

Chat Zalo