1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

ỨNG DỤNG HÀM NGẮT TRONG LẬP TRÌNH CHO HỆ XỬ LÝ NHÚNG pot

7 678 5

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 7
Dung lượng 356,89 KB

Nội dung

Trong bài báo này xây dựng và phân tích cấu trúc của một chương trình cho hệ nhúng trên cơ sở ứng dụng hàm ngắt.. Với hệ thống điều khiển số các đầu vào là các tín hiệu mang dữ liệu số

Trang 1

ỨNG DỤNG HÀM NGẮT TRONG LẬP TRÌNH

CHO HỆ XỬ LÝ NHÚNG

TS NGUYỄN THANH HẢI

Bộ môn Kỹ thuật điện tử viễn thông Khoa Điện – Điện tử

Trường Đại học Giao thông Vận tải

Tóm tắt: Hệ xử lý nhúng được sử dụng trong hầu hết các thiết bị điện – điện tử, việc lập

trình cho hệ này có những đặc trưng khác với lập trình cho PC thông thường Trong bài báo

này xây dựng và phân tích cấu trúc của một chương trình cho hệ nhúng trên cơ sở ứng dụng

hàm ngắt

Summary: Every year, millions of microprocessors and microcontroller chips are sold

as CPUs for electronic devices (embedded systems), programming for this system differs for

common PCs The paper analizes some structured of programs for embedded system using

interrupt function

I YÊU CẦU CƠ BẢN ĐỐI VỚI HỆ XỬ LÝ NHÚNG

Một hệ thống thông thường thể hiện mối quan hệ giữa các đầu vào biết trước và đầu ra

cần đáp ứng Với hệ thống điều khiển số các đầu vào là các tín hiệu mang dữ liệu số hoặc dữ

liệu từ đầu đo, còn đầu ra là dữ liệu hiển thị hoặc các tín hiệu điều khiển như hình dưới đây: ĐT

Hiển thị

Dữ liệu vào

HỆ XỬ LÝ NHÚNG

Sensor1

Sensor2

Điều khiển 2 Điều khiển 1

Xét về yếu tố đáp ứng yếu tố thời gian thực, hệ xử lý nhúng được xây dựng trên cơ sở xử lý

các sự kiện Mỗi một sự kiện là một bài toán mà hệ thống này cần phải giải quyết, thời gian tính

từ thời điểm có một tác động của sự kiện đầu vào đến thời điểm đưa ra đầu ra là thời gian đáp

ứng của hệ thống Hệ thống thời gian thực là hệ thống luôn đảm bảo thời gian đáp ứng đúng

theo yêu cầu của bài toán, tức là các giá trị điều khiển và hiển thị được đưa ra kịp thời đúng theo

chu trình Tính chất thời gian thực là đặc điểm khác cơ bản giữa hệ thống điều khiển số và hệ

Trang 2

thống xử lý thông thường

Khi thiết kế và chế tạo một thiết bị sử dụng hệ xử lý nhúng cần phải xét đến các yếu tố sau:

- Số cổng vào ra cần thiết, số cổng này bao gồm cổng vào ra số (Digital) và cổng vào ra tương tự (Analog)

- Các module ghép nối với thiết bị ngoại vi, được chia thành các loại sau:

+ Module phục vụ chuyển đổi tín hiệu gồm bộ biến đổi ADC, DAC, khối điều chế độ rộng xung PWM

+ Module truyền thông theo chuẩn UART, SPI, I2C…

- Dung lượng RAM đỏi hỏi, phụ thuộc vào từng bài toán cụ thể mà ta có thể lựa chọn RAM cho phù hợp Bộ nhớ bên trong có thể từ 256 byte đến vài KB, bộ nhớ ngoài từ vài chục KB đến vài MB

- Dung lượng FLASH hoặc ROM: Đây là nơi lưu giữ mã chương trình

- Số lượng đòi hỏi ngắt làm việc theo sự kiện

- Tốc độ vi xử lý, đảm bảo thời gian xử lý ngắt và thực hiện hàm theo vòng lặp chính

- Thời gian đáp ứng cần thiết, đáp ứng khả năng thực hiện theo hệ thống thời gian thực

- Các yêu cầu về nguồn cấp và năng lượng tiêu thụ

- Hệ phát triển phục vụ lập trình và gỡ rối

ĐT

- Chi phí chế tạo bao gồm chi phí phần cứng, chi phí cho hệ phát triển, chi phí lập trình và hoàn thiện hệ thống

II CẤU TRÚC CHUNG MỘT CHƯƠNG TRÌNH

1 Vòng lặp chính

Chương trình của một hệ thống nhúng, trong trường hợp không sử dụng hệ điều hành, có cấu trúc như sau:

void Event_1() {

Command_1(); Delay5s(); // Hàm đợi 5s

} int main (void) {

Init_Parameter(); // Hàm khởi tạo biến

while (1) {

Read_Input(); // Hàm đọc các giá trị cổng vào

Trang 3

Event_1(); // Hàm xử lý sự kiện 1

Event_2(); // Hàm xử lý sự kiện 2

……

Event_n(); // Hàm xử lý sự kiện n

Write_Output(); // Hàm điều khiển các cổng ra

}

}

Trong đó hàm khởi tạo có nhiệm vụ nạp các giá trị ban đầu cho biến, khởi tạo các khối

phần cứng như Timer, Counter, ADC, UART … làm việc theo yêu cầu của từng bài toán

Hàm Read_Input cho phép xác định trạng thái hoặc giá trị của các cổng đầu vào vi xử lý,

giá trị này có thể là mức logic (cổng vào Digital) hoặc một con số tương ứng với mức điện áp

vào (cổng vào Analog)

Hàm Write_Output điều khiển các cổng ra, cũng có thể là mức logic hoặc giá trị điện áp ra

(quan bộ biến đổi DAC, PWM)

Các hàm Event_1() đến Event_n() xử lý theo các sự kiện, đây là các hàm thực hiện thuật

toán của chương trình

Do đặc tính của lệnh While(1), ta thấy sau khi thực hiện xong hàm Write_Ouput() chương

trình sẽ thực hiện lại hàm Read_Input() Thời gian từ hàm Read_Input() đến Write_Ouput() là

chu kỳ quét chính của chương trình và vòng lặp while(1) được gọi là vòng lặp chính (Super

Loop)

ĐT

Phương pháp xây dựng chương trình trên vòng lặp chính là phương pháp phổ biến nhất khi

lập trình với hệ nhúng

2 Thời gian đáp ứng các sự kiện

Theo cấu trúc như trên ta thấy một vấn đề là việc xử lý các sự kiện theo nguyên tắc tuần tự,

các sự kiện sau phải chờ sự kiện phía trước xử lý xong Trong nhiều trường hợp thời gian xử lý

các sự kiện cuối sẽ quá lớn và không đáp ứng được yêu cầu bài toán

Thông thường với nhiều sự kiện đòi hỏi cần hàm trễ để đợi giá trị tác động đầu vào hoặc

chờ đến chu trình hoạt động tiếp theo, lúc này CPU chỉ thực hiện vòng đợi thời gian trong khi

cần xử lý sự kiện tiếp theo Như vậy ta không lợi dụng được hiệu năng của CPU với vai trò thực

hiện thuận toán, để khắc phục hiện tượng này có thể dùng giải pháp sau: thiết lập trạng thái đợi

vào một cờ nhớ, tương ứng với trạng thái này với mỗi vòng quét ta kiểm tra đã hết thời gian đợi

chưa Nếu hết thời gian sẽ xóa cờ nhớ và tiếp tục thực hiện trạng thái tiếp theo của sự kiện đợi,

trong trường hợp chưa hết thời gian đợi ta có thể thực hiện hàm xử lý sự kiện tiếp theo

Tương ứng với vòng quét chính trên ta thay thế hàm Event_1() như sau: void Event_1()

{

switch (trang_thai)

Trang 4

{ case 0:

Command_1(); trang_thai=1;

break;

case 1:

if(Het_5s) //Kiểm tra đã đủ 5 s {

Command_2(); trang_thai=0;

} } Khi các sự kiện làm việc phụ thuộc vào các yếu tố bên ngoài như các khối cứng Timer, ADC, PWM hay xung tác động từ ngoài vi xử lý thì chương trình phải đáp ứng các sự kiện này

thông qua hai phương pháp: hoặc là thực hiện vòng lặp để kiểm tra cờ trạng thái sự kiện hoặc

chức năng điều khiển ngắt Thực hiện chức năng điều kiển ngắt có lợi thế là khả năng đám ứng

tức thời và cấu trúc của chương trình mạch lạc, dễ kiểm soạt

Khi có một đòi hỏi ngắt từ các khối này, chương trình thực hiện vòng quét chính sẽ tạm ngừng và thực hiện hàm ngắt trong vùng nhớ vector ngắt tương ứng Sau khi hàm ngắt thực

hiện xong chương trình sẽ tự động trở về vị trí trong vòng quét chính lúc gọi hàm ngắt Với một hệ xử lý nhúng luôn luôn sử dụng chức năng ngắt để đảm bảo yếu tố thời gian

thực

3 Hệ điều hành thời gian thực (RTOS)

ĐT

Cùng với sự phát triển mạnh mẽ của hệ xử lý nhúng, đòi hỏi phát triển một hệ điều hành chuyên dụng cho các ứng dụng điều hành thời gian thực (RTOS – RealTime Operating System)

Hệ điều hành thời gian thực cho phép lập trình các ứng dụng có đáp ứng thời gian thực đơn giản

và dễ dàng, nó làm việc dưa trên sự phân chia giữa các chuỗi sự kiện Cấu trúc của lõi của hệ

điều hành này như sau:

Trong sơ đồ cấu trúc của hệ điều hành thời gian thực (RTOS) điều khiển đóng vai trò đặc biệt quan trọng với vai trò đồng bộ và phân bổ thời gian thực hiện của các Thẻ tiến trình

Trang 5

(Task) Khi sử dụng hệ điều hành, ta có thể sử dụng các hàm chuẩn điều hành và cơ chế sử dụng

vòng quét chính không tồn tại Nguyên tắc làm việc của các Thẻ tiến trình theo trạng thái sau:

Hoạt động

- Trạng thái hoạt động: Vi xử lý thực hiện các thuật toán phục vụ cho Thẻ tiến trình này,

tại một thời điểm với vi xử lý đơn chỉ cho phép thực hiện một Thẻ tiến trình

- Trạng thái sẵn sàng: Vi xử lý đang thực hiện một tiến trình khác, tuy nhiên Thẻ tiến trình

này sẵn sàng hoạt động khi kết thúc tiến trình trước đó

- Trạng thái khóa: Thẻ tiến trình không thực hiện nhiệm vụ gì tại thời điểm hiện tại, nó ở

trạng thái chờ một sự kiện bên ngoài tác động vào để kích hoạt

III XÂY DỰNG HÀM NGẮT

Để xây dựng một hàm ngắt trước tiên cần khởi tạo các thanh ghi cấu hình cho ngắt đó làm

việc Thông số của các thanh ghi này phụ thuộc vào từng loại vi xử lý, cầu trúc của khối phần

cứng đòi hỏi ngắt, các thông số này bao gồm: lựa chọn chế độ làm việc, các tham số ban đầu,

mức độ ưu tiên ngắt và cho phép đòi hỏi ngắt làm việc Ví dụ đối với khối biến đổi ADC ta cần

khai báo để thực hiện yêu cầu sau: tốc độ biến đổi 10 chuyển đổi/giây, dạng dữ liệu 12bit, biến

Bước tiếp theo là xác định chính xác địa chỉ tuyệt đối của hàm ngắt trong bảng Vector ngắt

đã được quy định sẵn Khi có một đòi hỏi ngắt đến vi xử lý, con trỏ chương trình sẽ chỉ đến địa

chỉ trong bảng Vector ngắt và tại địa chỉ này sẽ có lệnh gọi hàm ngắt tương ứng Ví dụ hàm ngắt

bộ ADC nằm ở địa chỉ OCB03

Cuối cùng ta cần xây dựng hàm ngắt để xử lý sự kiện mà ngắt đòi hỏi, vi dụ đối với bộ

biến đổi ADC hàm ngắt sẽ được gọi sau khi thực hiện phép biến đổi xong Trong hàm này cần

thực hiện các nhiệm vụ sau:

- Chuyển dữ liệu vừa biến đổi xong trong thanh ghi dữ liệu 16 bit vào biến trung gian

- Xóa các cờ bên trong khối biến đổi

- Ra lệnh thực hiện chuyển đổi tiếp theo

IV ỨNG DỤNG HÀM NGẮT TRONG CHẾ TẠO THIẾT BỊ GIÁM SÁT HÀNH TRÌNH

VÀ TỐC ĐỘ CHO PHƯƠNG TIỆN VẬN TẢI

1 Xác định các sự kiện đòi hỏi ngắt

Để giám sát tốc độ và hành trình phương tiện vận tải, thiết bị chế tạo cần thực hiện các

Trang 6

nhiệm vụ chính như xác định tọa độ hiện tại (kinh độ, vĩ độ), tốc độ (km/h), thời gian (giờ/phút/giây – ngày /tháng/năm), ghi dữ liệu vào bộ nhớ an toàn, truyền dữ liệu về trung tâm qua đường truyền RF/GSM

Trên cơ sở yêu cầu trên cần lựa chọn và thiết kế các phần cứng ghép nối với vi xử lý trung tâm như sau:

- Thiết bị thu định vị vệ tinh toàn cầu GPS, cho phép xác định các thông tin như tọa độ, tốc

độ và thời gian hiện tại của phương tiện Việc truyền dữ liệu thông qua đường truyền theo chuẩn UART

- Bộ nhớ dung lượng lớn dạng SDCard/MMC có thể lưu trữ với dung lượng 2GB Để đọc

và ghi dữ liệu sử dụng kênh truyền SPI

- Truyền dữ liệu về trung tâm sử dụng Module XE1205 với khoảng cách truyền đạt 400m Giao tiếp với vi xử lý qua kênh truyền SPI và ngắt ngoài

ĐT

- Truyền dữ liệu về trung tâm sử dụng mạng di động GSM với giao thức HTTP với khoảng cách truyền không hạn chế Giao tiếp với vi xử lý theo đường truyền chuẩn UART

Ngoài ra để đồng bộ và phân chia thời gian làm cho các khối Module phần cứng, phần mềm sử dụng bộ định thời Timer

Như vậy ta có 6 nguồn tác động vào ngắt sau: bộ định thời gồm 1 ngắt Timer_ISR, bộ truyền RF XE1205 gồm 2 ngắt (ngắt ngoài Rf_ISR, ngắt SPI chế độ Master SPIM_ISR),bộ thu định vị tọa độ gồm 1 ngắt GPS_ISR, bộ SDCard/MMC gồm 1 ngắt SPI Sdcard_ISR, bộ GSM gồm 1 ngắt GSM_ISR

Để chế tạo thiết bị giám sát hành trình ta sử dụng vi xử lý nhúng họ PsoC với tính năng có thể thiết kế Module phần cứng bên trong, các tài nguyên sử dụng là 1 khối Timer 8 bit, 1 khối Counter 8 bit tạo tốc độ truyền 9600 b/s cho các khối UART GSM, 1 khối Counter 8 bit tạo tốc

độ truyền 4800b/s cho khối UART GPS, 2 khối TX và RX trao đổi dữ liệu với Module GSM, 1 khối RX nhận dữ liệu từ GPS, 1 khối truyền dữ liệu SPI với SDCard, 2 khối truyền dữ liệu SPI với Module XE1205

2 Xây dựng hàm khởi tạo và hàm ngắt

Các hàm khởi tạo ngắt:

Setup7msPulse(); // Khởi tạo hàm ngắt Timer

Trang 7

com_initialize (); //Khởi tạo hàm ngắt truyền qua cổng UART

SDCard_Start();

sd_initialization(); // Khởi tạo đọc ghi SDCard

Config_RF(); //Khởi tạo hàm điều khiển module XE1205

Start_GM682(); //Khởi tạo hàm điều khiển ngắt cho Module GSM

Các hàm ngắt:

#pragma interrupt_handler GPSc_ISR

void GPSc_ISR() // Hàm nhận từ GPS

void Timer8c_ISR() // Hàm ngắt Timer

#pragma interrupt_handler Iqr_Rf_ISR

void Iqr_Rf_ISR() // Hàm ngắt ngoài từ XE1205

#pragma interrupt_handler SPIS1_ISR

void SPIS1_ISR() // Hàm ngắt nhận và truyền dữ liệu qua XE1205

#pragma interrupt_handler SPIM1_ISR

void SPIM1_ISR() // Hàm ngắt nạp tham số cho XE1205

#pragma interrupt_handler GM682c_RX_ISR

V KẾT LUẬN

Sử dụng hàm ngắt khi lập trình cho hệ nhúng cho phép xử lý đồng thời nhiều sự kiện (nhận

dữ liệu từ GPS, ghi/đọc dữ liệu vào SDCard, truyền dữ liệu với khoảng cách gần RF, truyền dữ

Để làm việc với hàm ngắt trước tiên phải xem xét đến thứ tự ưu tiên ngắt, sau đó cần khởi tạo

và cho phép hàm ngắt tích cực và cuối cùng là xây dựng thuật toán xử lý của bản thân hàm ngắt

Vòng quét chính của chương trình có nhiệm vụ đồng bộ và điều phối thứ tự thự hiện các sự kiện

Thiết bị giám sát hành trình và tốc độ phương tiện vận tải đã được sử dụng để xác định số

chuyến và cung đường vận chuyển tại Công ty cổ phần than Đèo nai, đã mang lại những hiệu

quả Đồng thời cũng đang được lắp đặt thử nghiệm kiểm soát tốc độ xe khách đường dài tuyến

Hà nội – Đà nẵng

Thiết bị giám sát hành trình:

• Kiểm soát số chuyến theo từng cung đường

• Truyền dữ liệu RF

• Dung lượng bộ nhớ 256MB

• Nguồn cấp 12-24VDC

• Độ chính xác định vị <5m

Tài liệu tham khảo

[1] Nguyễn Thanh Hải, Lựa chọn Chip cho bài toán đo lường và điều khiển Hội nghị đo lường lần thứ 5, 2005

[2] Dr Jürgen Sauermann, Melanie Thelen Realtime Operating Systems♦

Ngày đăng: 10/07/2014, 18:21

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w