Bài giảng Lập trình hệ nhúng - Chương 2 Lập trình vào ra cơ bản
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.
Bạn đang xem trước 20 trang tài liệu Bài giảng Lập trình hệ nhúng - Chương 2 Lập trình vào ra cơ bản, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Lập trình nhúng ARM-Linux
Chương 2
Lập trình vào ra cơ bản
57
Lập trình nhúng ARM-Linux
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)
58
Lập trình nhúng ARM-Linux
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
59
Lập trình nhúng ARM-Linux
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
60
Lập trình nhúng ARM-Linux
Mô hình giao tiếp ứng dụng – thiết bị
Phần mềm ứng dụng
Device files
Device Drivers
Phần cứng
User Space
Kernel Space
(Toàn quyền truy xuất trực tiếp tài
nguyên phần cứng của hệ thống)
Các hàm giao tiếp chuẩn:
•open
•close
•read
•write
•ioctl
•
61
Lập trình nhúng ARM-Linux
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
62
Lập trình nhúng ARM-Linux
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
63
Lập trình nhúng ARM-Linux
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
64
Lập trình nhúng ARM-Linux
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
65
Lập trình nhúng ARM-Linux
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
66
Lập trình nhúng ARM-Linux
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)
67
Lập trình nhúng ARM-Linux
Mô hình giao tiếp điều khiển led
Phần mềm ứng dụng
Device files
Device Drivers
Phần cứng
leds.c
/dev/leds
Mini2440_leds.c
GPIO Port
Hàm giao tiếp:
•open
•close
•ioctl
68
Lập trình nhúng ARM-Linux
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
69
Lập trình nhúng ARM-Linux
Mã nguồn minh họa điều khiển led đơn
70
Lập trình nhúng ARM-Linux
2.3. Lập trình giao tiếp nút bấm
Giao tiếp qua driver đ~ có
71
Lập trình nhúng ARM-Linux
Mô hình giao tiếp điều khiển nút bấm
Phần mềm ứng dụng
Device files
Device Drivers
Phần cứng
Buttons.c
/dev/buttons
Mini2440_buttons.c
GPIO Port
Hàm giao tiếp:
•open
•close
•read
72
Lập trình nhúng ARM-Linux
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
73
Lập trình nhúng ARM-Linux
Mã nguồn chương trình đọc nút bấm
74
Lập trình nhúng ARM-Linux
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.
75
Lập trình nhúng ARM-Linux
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
76
Lập trình nhúng ARM-Linux
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:
77
Lập trình nhúng ARM-Linux
Lập trình giao tiếp GPIO mở rộng
Ví dụ minh họa
Chi tiết xem b{i viết:
https://sites.google.com/site/embedded247/ddcour
se/giao-tiep-gpio-tu-userspace-1
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
78
Lập trình nhúng ARM-Linux
Thảo luận
79
Các file đính kèm theo tài liệu này:
- lap_trinh_he_nhung_esprogramming_c2_1636.pdf