Phân công nhiệm vụ:

Một phần của tài liệu document (Trang 84 - 88)

I. Phác thảo dự án:

b.Phân công nhiệm vụ:

Driver: có tên 1_1_single_led_dev.c

Sử dụng kỹ thuật giao diện ioctlđể nhận lệnh và tham số từ user application thực thi điều khiển chân gpiotheo yêu cầu. ioctlcó 5 tham số lệnh tương ứng với 5 khả năng mà

drivercó thể phục vụ cho application:

 GPIO_DIR_IN: Cài đặt chân gpiolà ngõ vào;

 GPIO_DIR_OUT: Cài đặt chân gpiolà ngõ ra;

 GPIO_GET: Lấy dữ liệu mức logic từ chân gpio ngõ vào trả về một biến của user

application;

 GPIO_SET: Xuất dữ liệu cho chân gpiongõ ra theo thông tin lấy từ một biến trong

user applicationtương ứng sẽ là mức thấp hay mức cao;  Application: có tên 1_1_single_led_app.c

Sử dụng kỹ thuật lập trình hàm main có nhiều tham số lựa chọn cho người dùng khả năng điều khiển trên màn hình shelltrong quá trình thực thi chương trình ứng dụng. Theo đó, chương trình ứng dụng 1_1_single_led_appcó những thao tác lệnh sau:

 Đầu tiên người dùng nhập tên chương trình cùng với các tham số mong muốn tương ứng với từng lệnh muốn thực thi.

 Nếu là lệnh dirin, người dùng phải cung cấp cho driver tham số tiếp theo là số chân gpiomuốn cài đặt chế độ ngõ vào;

 Nếu là lệnh dirout, người dùng phải cung cấp cho driver tham số tiếp theo là số chân gpiomuốn cài đặt chế độ ngõ ra;

 Nếu là lệnh set, thông tin tiếp theo phải cung cấp là 1 hoặc 0 và chân gpiomuốn xuất dữ liệu;

 Nếu là lệnh get, thông tin tiếp theo người dùng phải cung cấp là số chân gpio

muốn lấy dữ liệu. Sau khi lấy dữ liệu, xuất ra màn hình hiển thị thơng báo cho người dùng biết.

II. Thực hiện:

e. Kết nối phần cứng:

Thực hiện kết nối phần cứng theo sơ đồ sau:

Hình 4-1- Sơ đồ kết nối LED đơn và công tắc điều khiển

f. Chương trình driver:Có tên 1_1_single_led_dev.c

(Mã nguồn và giải thích chương trình driver được chứa trong CD đính kèm)

g. Chương trình application:Có tên 1_1_single_led_app.c

(Mã nguồn và giải thích chương trình application chứa trong CD đính kèm)

h. Biên dịch và thực thi dự án:

Biên dịch driver:

Trong thư mục chứa tập tin mã nguồn drive, tạo tập tin Makefilecó nội dung sau:

export ARCH=arm export CROSS_COMPILE=arm-none-linux-gnueabi- obj-m += 1_1_single_led_dev.o all: 0 R1 330 R1 330 VCC D1 LED D7 LED D3 LED D4 LED 0 R1 330 SW1 D6 LED D2 LED D5 LED R1 330 PA23 0 R2 4k7 D8 LED U1 74HC245 191 2 3 4 5 6 7 8 9 18 17 16 15 14 13 12 11 G DIR A1 A2 A3 A4 A5 A6 A7 A8 B1 B2 B3 B4 B5 B6 B7 B8 PB10 VCC R1 330 R1 330 PC0 R1 330 R2 4k7 R1 330

/*Lưu ý phải đúng đường dẫn đến cấu trúc mã nguồn kernel*/

make -C /home/arm/project/kernel/linux-2.6.30 M=$(PWD) modules clean:

/*Lưu ý phải đúng đường dẫn đến cấu trúc mã nguồn kernel*/ (adsbygoogle = window.adsbygoogle || []).push({});

make -C /home/arm/project/kernel/linux-2.6.30 M=$(PWD) clean

Biên dịch driverbằng lệnh shellnhư sau:

make clean all

**lúc này tập tin chương trình driver được tạo thành với tên

1_1_single_led_dev.ko

 Biên dich application: Bằng lệnh shellsau:

./arm-none-linux-gnueabi-gcc 1_1_single_led_app.c –o 1_1_single_led_app

**Chương trình được biên dịch có tên là 1_1_single_led_app

 Thực thi chương trình:

 Chép drivervà applicationvào kit;

 Cài đặt driverbằng lệnh: insmod 1_1_single_led_dev.ko

 Thay đổi quyền thực thi cho chương trình applicationbằng lệnh:

chmod 777 1_1_single_led_app  Chạy chương trình và quan sát kết quả:

 Khai báo chân PC0 là ngõ ra:

./1_1_single_led_app dirout 96 Using gpio pin 96

(Lúc này led kết nối với PC0 tắt)

 Xuất dữ liệu mức cao cho PC0:

./1_1_single_led_app set 96 1 Using gpio pin 96

(Lúc này ta thấy led nối với chân PC0 sáng lên)

 Xuất dữ liệu mức thấp cho PC0:

./1_1_single_led_app set 96 0 Using gpio pin 96

(Lúc này ta thấy led nối với chân PC0 tắt xuống)

 Khai báo chân PA23 là ngõ vào:

./1_1_single_led_app dirin 55 Using gpio pin 55

**Khi công tắc nối với PA23 ở vị trí ON, chân PA23 nối xuống mass;

 Lấy dữ liệu vào từ chân PA23

./1_1_single_led_app get 55 Using gpio pin 55

Pin 55 is LOW

** Khi công tắc nối với PA23 ở vị trí OFF, chân PA23 nối lên VCC;

 Lấy dữ liệu vào từ chân PA23 (adsbygoogle = window.adsbygoogle || []).push({});

./1_1_single_led_app get 55 Using gpio pin 55

Pin 55 is HIGH

Bài 2:

Một phần của tài liệu document (Trang 84 - 88)