1. Trang chủ
  2. » Công Nghệ Thông Tin

Lập trình hệ nhúng chương 3 lập trình vào ra nâng cao

44 269 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 44
Dung lượng 883,09 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

... qua cổng USB • Lập trình giao tiếp ADC Lập trình nhúng ARM-Linux 81 Nội dung học 3. 1 Giới thiệu chuẩn RS 232 3. 2 Lập trình giao tiếp chuẩn RS 232 3. 3 Giới thiệu chuẩn USB 3. 4 Lập trình giao tiếp... dùng nhấn c|c nút Lập trình nhúng ARM-Linux 118 QT Joystick Demo Lập trình nhúng ARM-Linux 119 3. 5 Lập trình giao tiếp ADC  Giới thiệu ADC  Minh họa lập trình ADC Lập trình nhúng ARM-Linux 120... điện áp) 88 Lập trình nhúng ARM-Linux Chuẩn RS 232  Kịch truyền Ghép nối không bắt tay hai thiết bị (Khác mức điện áp) 89 Lập trình nhúng ARM-Linux 3. 2 Lập trình giao tiếp chuẩn RS 232    

Trang 1

Chương 3

Lập trình vào ra nâng cao

Trang 2

• Nắm được chuẩn giao tiếp USB

• Lập trình ghép nối USB Joystick qua cổng USB

• Lập trình giao tiếp ADC

81

Trang 3

Nội dung bài học

3.1 Giới thiệu chuẩn RS232

3.2 Lập trình giao tiếp chuẩn RS232

3.3 Giới thiệu chuẩn USB

3.4 Lập trình giao tiếp USB Joystick

3.5 Lập trình giao tiếp ADC

Trang 4

Lập trình nhúng ARM-Linux

3.1 Giới thiệu chuẩn RS232

 Mức điện |p đường truyền

 Chuẩn đầu nối trên m|y tính PC

 Khuôn dạng khung truyền

 Tốc độ truyền

 Kịch bản truyền

83

Trang 5

Chuẩn RS232

 Mức điện |p đường truyền (Chuẩn RS-232C)

Trang 7

Chuẩn RS232

 Chuẩn đầu nối trên PC

• Chân 1 (DCD-Data Carrier Detect):

ph|t hiện tín hiệu mang dữ liệu

• Chân 2 (RxD-Receive Data): nhận dữ

liệu

• Chân 3 (TxD-Transmit Data): truyền

dữ liệu

• Chân 4 (DTR-Data Terminal Ready):

đầu cuối dữ liệu sẵn s{ng

• Ch}n 5 (Signal Ground): đất của tín

Trang 8

Lập trình nhúng ARM-Linux

Chuẩn RS232

 Khuôn dạng khung truyền

• PC truyền nhận dữ liệu qua cổng nối tiếp RS-232 thực

hiện theo kiểu không đồng bộ (Asynchronous)

• Khung truyền gồm 4 th{nh phần

1 Start bit (Mức logic 0): bắt đầu một gói tin, đồng bộ xung nhịp clock giữa DTE v{ DCE

Data (5,6,7,8 bit): dữ liệu cần truyền

1 parity bit (chẵn (even), lẻ (odd), mark, space): bit cho phép kiểm tra lỗi

Stop bit (1 hoặc 2 bit): kết thúc một gói tin

87

Trang 9

Chuẩn RS232

 Kịch bản truyền

• Không có bắt tay (none-handshaking): m|y thu có khả

năng đọc c|c ký tự thu trước khi m|y ph|t truyền ký tự

tiếp theo

Trang 11

3.2 Lập trình giao tiếp chuẩn RS232

 Khởi tạo: Khai b|o thư viện

 Bước 1: Mở cổng

 Bước 2: Thiết lập tham số

 Bước 3: Đọc, ghi cổng

 Bước 4: Đóng cổng

Trang 12

 #include <unistd.h> // UNIX standard function

 #include <fcntl.h> // File control definitions

 #include <errno.h> // Error number definitions

 #include <termios.h> // POSIX terminal control

 #include <time.h> // time calls

91

Trang 13

Bước 1: Mở cổng

 Sử dụng lệnh mở file

int fd = open ("/dev/ttySAC0", O_RDWR);

 Fd >0 nếu mở file th{nh công

 Fd<0 nếu mở file thất bại

Trang 14

port_settings.c_cflag &= ~PARENB;

port_settings.c_cflag &= ~CSTOPB;

port_settings.c_cflag &= ~CSIZE;

port_settings.c_cflag |= CS8;

tcsetattr(fd, TCSANOW, &port_settings);

93

Trang 15

Bước 3: Đọc, ghi cổng

 Đọc cổng: sử dụng lệnh đọc file

n=read(fd,&result,sizeof(result));

N: số ký tự đọc được

Result: chứa kết quả

 Ghi cổng: sử dụng lệnh ghi file

n=write(fd,“Hello World\r",12);

N:số ký tự đ~ ghi

Fd: file id (có được từ thao t|c mở file th{nh công)

Trang 17

Demo

Trang 18

Lập trình nhúng ARM-Linux

3.3 Giới thiệu chuẩn USB

 Năm 1995: USB 1.0

• Tốc độ Low-Speed: 1.5 Mbps

• Tốc độ tối đa (Full-Speed): 12 Mbps

 Năm 1998: USB 1.1 (Sửa lỗi của USB 1.0)

• Tốc độ tối đa (Full-Speed): 12 Mbps

Trang 19

Tín hiệu chuẩn USB

 Tín hiệu

• Truyền kiểu nối tiếp

• Tín hiệu trên hai đường D+ và D- là tín hiệu vi sai

Trang 20

Lập trình nhúng ARM-Linux

Mô hình bus USB

99

Trang 21

Vai trò của các thành phần

 Vai trò của USB host:

• Trao đổi dữ liệu với c|c thiết bị ngoại vi

• Điều khiển USB bus:

Quản lý được c|c thiết bị kết nối v{o đường bus v{

khả năng của mỗi thiết bị đó: sử dụng cơ chế điểm danh (Enumeration)

Ph}n xử, quản lý luồng dữ liệu trên bus, đảm bảo c|c thiết bị đều có cơ hội trao đổi dữ liệu

• Kiểm tra lỗi: thêm c|c m~ kiểm tra lỗi v{o gói tin

cho phép ph|t hiện lỗi v{ yêu cầu truyền lại gói tin

Trang 22

Lập trình nhúng ARM-Linux

Vai trò của các thành phần

 Vai trò của thiết bị ngoại vi

• Trao đổi dữ liệu với host

• Ph|t hiện c|c gói tin hay yêu cầu (request) được gửi tới thiết bị để xử lý phù hợp

• Kiểm tra lỗi: tương tự như Host, c|c thiết bị ngoại vi cũng phải chèn thêm c|c bit kiểm tra lỗi v{o gói tin gửi đi

• Quản lý nguồn điện: c|c thiết bị có thể sử dụng

nguồn điện ngo{i hay nguồn từ bus Nếu sử dụng

nguồn từ bus, phải chuyển sang chế độ tiết kiệm

điện năng

101

Trang 23

Endpoint & pipes

 Mỗi qu| trình truyền nhận dữ liệu bao gồm một

hay nhiều giao dịch (transactions), mỗi giao dịch

gồm một hay nhiều packets

-> Để hiểu được c|c giao dịch, c|c packet v{ nội dung của chúng -> cần tìm hiểu hai kh|i niệm Endpoint

và Pipes

Trang 24

Lập trình nhúng ARM-Linux

Endpoint

 Endpoint của thiết bị:

• Chỉ có thiết bị mới có Endpoint, Host không có

Endpoint

• Endpoint l{ bộ đệm (gửi, nhận)

• C|c Endpoint được đ|nh địa chỉ v{ x|c định hướng

In Endpoint: bộ đệm gửi

Out Endpoint: bộ đệm nhận

• Tất cả c|c thiết bị đều phải có Endpoint 0, đ}y l{

endpoint mặc định để gửi c|c thông tin điều khiển

103

Trang 25

Pipes

 Pipes: kết nối Endpoint của thiết bị tới Host

• Phải thiết lập pipe trước khi muốn trao đổi dữ liệu

• Host thiết lập pipe trong qu| trình điểm danh

Trang 26

Lập trình nhúng ARM-Linux

Device Classes

 C|c thiết bị ngoại vi cùng chức năng (chuột, m|y in, ổ nhớ flash…) có đặc tính truyền nhận dữ liệu chung -> Hệ điều

h{nh có thể cung cấp driver chung cho c|c nhóm, c|c nh{

sản xuất thiết bị không cần viết driver riêng

 C|c nhóm thiết bị đ~ được định nghĩa

Trang 27

Quá trình trao đổi dữ liệu

 C|c thiết bị USB có thể trao đổi dữ liệu với Host

theo 4 kiểu ho{n to{n kh|c nhau, cụ thể:

• Truyền điều khiển (control transfer)

• Truyền ngắt (interrupt transfer)

• Truyền theo khối (bulk transfer)

• Truyền đẳng thời (isochronous transfer)

Trang 28

Lập trình nhúng ARM-Linux

Các kiểu truyền

 Truyền điều khiển: để điều khiển phần cứng, c|c

yêu cầu điều khiển được truyền Chúng l{m việc

với mức ưu tiên cao v{ với khả năng kiểm so|t lỗi

tự động Tốc độ truyền lớn vì có đến 64 byte trong một yêu cầu (request) có thể được truyền

 Truyền ngắt: c|c thiết bị, cung cấp một lượng dữ

liệu nhỏ, tuần ho{n chẳng hạn như chuột, b{n phím đều sử dụng kiểu truyền n{y Hệ thống sẽ hỏi theo chu kỳ, chẳng hạn 10ms một lần xem có c|c dữ liệu mới gửi đến

107

Trang 29

Các kiểu truyền

 Truyền theo khối: khi có lượng dữ liệu lớn cần

truyền v{ cần kiểm so|t lỗi truyền nhưng lại không

có yêu cầu thúc ép về thời gian truyền thì dữ liệu

thường được truyền theo khối VD: m|y in, m|y

quét

 Truyền đẳng thời: khi có khối lượng dữ liệu lớn

với tốc độ dữ liệu đ~ được quy định, ví dụ như card }m thanh Theo c|ch truyền n{y một gi| trị tốc độ

Trang 30

Lập trình nhúng ARM-Linux

3.4 Lập trình giao tiếp USB Joystick

109

Trang 31

Cấu trúc JOYINFO trên Windows

 Windows định nghĩa cấu trúc JOYINFO để lưu c|c

thông tin về tình trạng c|c nút bấm trên Joystick

Nút trái, phải Nút lên, xuống

Các nút chức năng: 1, 2, 3, 4, L1, L2, R1, R2,

Trang 32

Lập trình nhúng ARM-Linux

Cấu trúc JOYINFO

 wXpos

• wXpos=0 -> nút sang tr|i được bấm

• wXpos=65535 -> nút sang phải được bấm

 wYpos

• wYpos=0 -> nút lên được bấm

• wYpos=65535 -> nút xuống được bấm

 wButtons: mỗi bit biểu diễn trạng th|i của một nút chức năng

• VD: Button 1 -> bit 0, Button 2 -> bit 1…

111

Trang 33

Cấu trúc js_event trên Linux

 Linux định nghĩa cấu trúc js_event để lưu c|c thông tin khi có ph|t sinh sự kiện (khởi tạo thiết bị,

người dùng bấm nút chức năng, nút chỉnh hướng)

 Định nghĩa trong include/linux/joystick.h

Trang 34

Lập trình nhúng ARM-Linux

Cấu trúc js_event

 Nội dung c|c trường dữ liệu

• Time: nh~n thời gian ph|t sinh sự kiện

• Value: gi| trị, phụ thuộc v{o nút chức năng hay nút

chỉnh hướng

Nút chức năng: 0/1

Nút chỉnh hướng: -32768 -> 32767

• Type: loại sự kiện

Khởi tạo thiết bị: 0x80

Nút chỉnh hướng: 0x02

Nút chức năng: 0x01

• Number: x|c định nút được nhấn

113

Trang 36

Lập trình nhúng ARM-Linux

Lập trình kết nối joystick

 Đọc dữ liệu từ thiết bị (khi có phát sinh sự

kiện)

bytes = read(joystick_fd, jse, sizeof(*jse));

 joystick_fd: con trỏ file có được khi mở file

 jse: biến cấu trúc js_event

 bytes: Tổng số file đọc được, nếu số n{y bằng kích thước của cấu trúc js_event thì qu| trình đọc th{nh công

115

Trang 37

Demo

Trang 38

Lập trình nhúng ARM-Linux

Kết quả demo

 C|c sự kiện khi khởi tạo thiết bị

117

Trang 39

Kết quả demo

 C|c sự kiện khi người dùng nhấn c|c nút

Trang 40

Lập trình nhúng ARM-Linux

QT Joystick Demo

119

Trang 41

3.5 Lập trình giao tiếp ADC

 Giới thiệu ADC

 Minh họa lập trình ADC

Trang 42

Lập trình nhúng ARM-Linux

Giới thiệu ADC

 ADC: Analog to Digital Converter

• Thông số quan trọng của ADC

• Dải điện |p chuyển đổi

• ADC 8 bit, 10 bit, 12 bit…

• Bao nhiêu kênh?

• Độ ph}n ly

121

Trang 43

Minh họa lập trình ADC

 Khai b|o thư viện

Ngày đăng: 28/09/2015, 10:52

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w