CHƯƠN G5 PHÁT TRIỂN HỆ THỐNG NHÚNG DỰA TRÊN VXL ARM
5.3.2 Thiết kế điều khiển I/O
Vi điều khiển LPC2300 có lên tới 5 port vào ra đa dụng gọi tắt là GPIO – General Purpose IO, mỗi port gồm 32 đường IO được ánh xạ vào 32 bit của các thanh ghi điều khiển, trạng thái.
Để tương thích với các các dòng LPC21xx, PORT0 và PORT1 có thể được điều khiển bởi tập các thanh ghi điều khiển kế thừa từ các dòng cũ được giao tiếp thông qua bus APB, tuy nhiên, việc điều khiển thông qua các thanh ghi này có tốc độ khá chậm. Để cải thiện vấn đề này trong LPC2300 có thêm 1 tập các thanh ghi điều khiển cho các port GPIO đặt ở bus cục bộđược gọi là các thanh ghi Fast GPIO để có được tốc độđiều khiển nhanh hơn.
Giống như các loại vi điều khiển khác,mỗi pin của LPC2378 bao gồm nhiều chức năng cụ thể là mỗi chân có từ 1 đến 4 chức năng. Việc chọn chức năng của mỗi pin thông qua các thanh ghi PINSELn mà trong datasheet của nhà sản xuất sẽ nói rõ chi tiết. Khi reset, mặc định các pin là các GPIO.
Về cơ bản mỗi port GPIO được điều khiển thông qua tập gồm 4 thanh ghi với các chức năng:
- IOPIN : thanh ghi giá trị các pin của Port. Trạng thái hiện tại của các pin của Port có thể được đọc từ thanh ghi này.Giá trị của pin tương ứng được biểu diễn qua bit tương ứng của thanh ghi.Bit thứ i sẽ mô tả trạng thái của pin thứ i của port
- IOSET: Thanh ghi set đầu ra Port. Thanh ghi này cùng với thành ghi IOCLR được dùng để điều khiển trạng thái đầu ra của các pin của port. Viết 1 vào một bít nào đó thì tương ứng sẽ tạo ra mức cao ở pin tương ứng với bít đó. Viết 0 vào sẽ không tác động gì
Ví dụ:
IOSET= 1>>10 ; // Đưa pin 10 lên mức cao
- IOCLR : tương tự như thanh ghi set, tuy nhiên khi viết 1 bít nào đó tương ứng với đưa pin đó về mức thấp.
Ví dụ : IOCLR= (1<<1)|(1<<2); //Đưa pin 1 và pin 2 về mức thấp
- IODIR : thanh ghi chọn hướng của pin là input hay output.Nếu bit tương ứng với pin trong thanh ghi bằng 1 thì pin đó là pin output còn bit đó bằng 0 thì pin tương ứng là pin input.
Đây chính là tập thanh ghi điều khiển với thời gian đáp ứng chậm. Nhưđã giới thiệu LPC2378, các port còn có thể được điều khiển với đáp ứng thời gian nhanh hơn thông qua các thanh ghi fast với chức năng tương tự là FIODIR,FIOSET,FIOCLR,FIOPIN. Chú ý khi làm việc với các thanh ghi fast IO, nó còn có thêm một thanh ghi khác là FIOMASK, việc thiết lập bit tương ứng là 0 của mỗi pin sẽ cho phép việc set,clear, đọc trạng thái tương ứng của pin đó qua các thanh ghi FIOSET,FIOCLR,FIOPIN, khi giá trị bít nào đó là 1 thì pin tương ứng với chân đó sẽ không đáp ứng lại với sự thay đổi do tác động của các thanh ghi FIOSET, FIOCLR,FIOPIN.
Hình 5-10. Sơđồ kết nối các chân IO với các led trên board MCB2300 Ví dụ 1 : Điều khiển nháy led
Sau đây là chương trình điều khiển tắt mở các led kết nối với các Pin 0 đến 7 của port 2 gồm 1 viết bằng assembly và 1 viết bằng C