Bài giảng Lập trình nhúng ARM-Linux - Chương 2: Lập trình vào ra cơ bản

pdf 23 trang phuongnguyen 3790
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình nhúng ARM-Linux - Chương 2: Lập trình vào ra cơ bản", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_lap_trinh_nhung_arm_linux_chuong_2_lap_trinh_vao_r.pdf

Nội dung text: Bài giảng Lập trình nhúng ARM-Linux - Chương 2: Lập trình vào ra cơ bản

  1. Chương 2 Lập trình vào ra cơ bản Lập trình nhúng ARM-Linux 57
  2. Mục tiêu chương 2 . Sau khi kết thúc chương n{y, sinh viên có thể • Nắm được nguyên tắc lập trình giao tiếp v{o ra cơ bản trên hệ điều h{nh Linux nhúng • Lập trình giao tiếp thiết bị (ghép nối GPIO) với driver đ~ có (led, button) • Biết c|ch lập trình giao tiếp GPIO mở rộng dựa trên giao diện sysfs (gpiolib) Lập trình nhúng ARM-Linux 58
  3. Nội dung bài học 2.1. Cơ chế lập trình giao tiếp thiết bị 2.2. Lập trình điều khiển led đơn 2.3. Lập trình giao tiếp nút bấm 2.4. Lập trình giao tiếp GPIO mở rộng Lập trình nhúng ARM-Linux 59
  4. 2.1. Cơ chế lập trình giao tiếp thiết bị . Device files, Device number . Kiểm tra danh s|ch device driver, thiết bị . Cơ chế giao tiếp Lập trình nhúng ARM-Linux 60
  5. Mô hình giao tiếp ứng dụng – thiết bị Phần mềm ứng dụng User Space Các hàm giao tiếp chuẩn: •open Device files •close •read •write •ioctl Device Drivers • Kernel Space (Toàn quyền truy xuất trực tiếp tài Phần cứng nguyên phần cứng của hệ thống) Lập trình nhúng ARM-Linux 61
  6. Device files, Device number . Device files: ls –l /dev • Device file không phải l{ file thông thường, không phải l{ một vùng dữ liệu trên hệ thống file • Qu| trình đọc ghi device file Giao tiếp với device driver Đọc, ghi phần cứng của thiết bị . Ph}n loại device files • Character device: thiết bị phần cứng đọc, ghi một chuỗi c|c byte dữ liệu • Block device: thiết bị phần cứng đọc, ghi một khối dữ liệu Lập trình nhúng ARM-Linux 62
  7. Device files, Device number . Device number: mỗi thiết bị được x|c định bởi hai gi| trị • Major device number: x|c định thiết bị n{y sử dụng drvier nào • Minor device number: ph}n biệt giữa c|c thiết bị kh|c nhau cùng sử dụng chung một device driver Lập trình nhúng ARM-Linux 63
  8. Kiểm tra danh sách thiết bị . Kiểm tra danh s|ch c|c thiết bị • Gõ lệnh ls –al /dev . Giải thích thông tin Loại thiết bị: char device hay block device Tài khoản người dùng Tên thiết bị Major và minor number Mount ponint Lập trình nhúng ARM-Linux 64
  9. Kiểm tra danh sách thiết bị . Kiểm tra danh s|ch c|c nhóm thiết bị • Gõ lệnh cat /proc/devices Lập trình nhúng ARM-Linux 65
  10. Cơ chế lập trình giao tiếp thiết bị . Cơ chế lập trình • Sử dụng c|c h{m v{o ra file open close read write • Sử dụng h{m điều khiển v{o ra: ioctl Lập trình nhúng ARM-Linux 66
  11. 2.2. Lập trình điều khiển led đơn . Sử dụng led driver đ~ có . 4 led đơn, ghép nối qua GPB5,6,7,8 . Điều khiển led on/off, tạo hiệu ứng: nhấp nh|y, chạy đuổi, . Cần sử dụng h{m trễ (delay): sleep, usleep (thư viện sys/time.h) Lập trình nhúng ARM-Linux 67
  12. Mô hình giao tiếp điều khiển led Phần mềm ứng dụng leds.c Hàm giao tiếp: •open •close •ioctl Device files /dev/leds Device Drivers Mini2440_leds.c Phần cứng GPIO Port Lập trình nhúng ARM-Linux 68
  13. Lập trình điều khiển led đơn . fd=open(“/dev/leds”,0) • fd: file id • /dev/leds: device file • 0: WRITE_ONLY . ioctl(fd, on, led_no) • Ioctl: IO control • Điều khiển bật/tắt led đơn có số hiệu led_no . Driver cho led đơn: linux-2.6.32.2/drivers/char/mini2440_leds.c Lập trình nhúng ARM-Linux 69
  14. Mã nguồn minh họa điều khiển led đơn Lập trình nhúng ARM-Linux 70
  15. 2.3. Lập trình giao tiếp nút bấm . Giao tiếp qua driver đ~ có Lập trình nhúng ARM-Linux 71
  16. Mô hình giao tiếp điều khiển nút bấm Phần mềm ứng dụng Buttons.c Hàm giao tiếp: •open •close •read Device files /dev/buttons Device Drivers Mini2440_buttons.c Phần cứng GPIO Port Lập trình nhúng ARM-Linux 72
  17. Lập trình ghép nối nút bấm . buttons_fd=open(“/dev/buttons”,0) • buttons_fd: file id • /dev/buttons: device file . read(buttons_fd,current_buttons,sizeof(curren t_buttons) • Đọc trạng th|i c|c nút bấm . close(buttons_fd): đóng file . M~ nguồn driver cho nút bấm linux- 2.6.32.2/drivers/char/mini2440_buttons.c Lập trình nhúng ARM-Linux 73
  18. Mã nguồn chương trình đọc nút bấm Lập trình nhúng ARM-Linux 74
  19. 2.4. Lập trình giao tiếp GPIO mở rộng . 2 c|ch sử dụng giao tiếp gpio (từ Linux user space) • Cách 1: Viết gpio driver (trên không gian nh}n hệ điều h{nh, kernel space), giao tiếp qua driver n{y. (Ví dụ với led, button đ~ l{m) • Cách 2: giao tiếp c|c ch}n gpio trực tiếp từ không gian người dùng (user space) dựa trên API thư viện gpiolib cung cấp. Linux cung cấp giao diện GPIO sysfs cho phép thao t|c với bất kỳ ch}n GPIO từ userspace. Lập trình nhúng ARM-Linux 75
  20. Lập trình giao tiếp GPIO mở rộng . Tất cả c|c giao diện điều khiển GPIO thông qua sysfs nằm trong thư mục /sys/class/gpio . Kiểm tra bằng lệnh: ls /sys/class/gpio Lập trình nhúng ARM-Linux 76
  21. Lập trình giao tiếp GPIO mở rộng . Giao diện n{y cung cấp c|c files điều khiển sau đ}y: Lập trình nhúng ARM-Linux 77
  22. Lập trình giao tiếp GPIO mở rộng . Ví dụ minh họa Cấu hình chân GPF5 (micro2440) output, và xuất giá trị 0 ra chân này echo 165 > /sys/class/gpio/export echo “out” > /sys/class/gpio/gpio165/direction echo 0 > /sys/class/gpio/gpio165/value Chi tiết xem b{i viết: se/giao-tiep-gpio-tu-userspace-1 Lập trình nhúng ARM-Linux 78
  23. Thảo luận Lập trình nhúng ARM-Linux 79