Trang 86
- Các biến thể của LPC có thể có 4 bộ điều khiển can độc lập trên board.
Giao thức CAN (Controller Area Network) đƣợc phát triển bởi Robert Bosch cho mạng tự động (Automotive Networking) vào năm 1982. Trải qua 22 năm sau, CAN trở thành một chuẩn cho mạng tự động và trở lên hấp dẫn đối với các hệ thống không tự động mà muốn yêu cầu một số nút đƣợc nhúng vào. CAN có những đặc tính hấp dẫn đối với những ngƣời phát triển hệ nhúng. Nó có chi phí thấp, dễ hiện thực hóa, các mạng ngang hàng với đặc tính kiểm tra lỗi mạnh và tốc độ truyền cao, hàng Mbit/s. Mỗi gói CAN khá nhỏ và có thể giữ một khối lƣợng cực đại là 8 byte dữ liệu. Do đó, CAN rất phù hợp với các mạng nhúng nhỏ để truyền một lƣợng dữ liệu nhỏ giữa các nút một cách tin cậy.
Thiết kế node CAN:
Một nút CAN điển hình đƣợc thiết kế nhƣ sau:
Hình 3.33. Cấu trúc CAN
- Một đặc tính quan trọng khi thiết kế CAN là bộ điều kiển CAN có đƣờng truyền và nhận dữ liệu riêng biệt và từ thiết bị vật lý. Bởi vậy một nút đang ghi dữ liệu lên bus, đồng thời cũng lắng nghe phản hồi trên bus. Do vậy cần có cơ chế phân xử và phát hiện lỗi trên bus.
Hai mức logic đƣợc ghi lên 2 cặp cáp nhƣ hình dƣới, hai mức logic 0 thể hiện trạng thái rỗi của bus.
Trang 87 Hình 3.34.
Cấu trúc một thông điệp CAN:
Hình 3.35. Cấu trúc thông điệp CAN
Các bít định danh dùng để dịnh danh gói tin: theo chuẩn 20A có 11 bít định danh, 20B thụ động thì có bít định danh và 20B chủ động có 29 bít định danh.
RTR luôn bằng 0.
Bít DLC chứa độ dài dữ liệu Bít CRC chứa mã lỗi khi truyền Bít ACK: cho phép chấp nhận gói tin
Để truyền một thông điệp CAN, Bộ điều khiển CAN có một tập các thanh ghi điều khiển và thanh ghi trạng thái nhƣ sau:
Trang 88
Hình 3.36 Các thanh ghi bộ điều khiển CAN
Tốc độ truyền tính theo công thức: Tốc độ baund=PCLK/(RBRx(1+Tseg1+Tseg2)) Với RBR là tốc đô prescaler.
Trang 89
Đoạn chƣơng trình sau mô tả khởi tạo CAN và truyền thông điệp: C2MOD = 0x00000001; //Khoi dong bo dieu khien CAN C2BTR = 0x001C001D; //thiet lap bi Timing la 125k C2MOD = 0x00000000; //dung bo dieu khie CAN if(C2SR & 0x00000004) //neu bo dem Tx Buffer 1 rong {
C2TFI1 = 0x00040000; //thiet lap DLC la 4 byte
C2TID1 = 0x00000022; //dia chi Standard Frame la 0x22 C2TDA1 = NetworkData; //copy du lieu vao 4 byte dau tien C2CMR = 0x00000001; //truyen thong diep
}
Trang 90
Cấu trúc vùng đệm nhận dữ liệu
Hình 3.37. Các thanh ghi dùng khi nhận dữ liệu từ CAN
int main(void) {
VPBDIV = 0x00000001; //thiet lap PClk la 60MHz IODIR1 = 0x00FF0000; // thiet lap cac chan ra
PINSEL1|= 0x00040000; //cho phep chan 0.25 la CAN1 RX C1MOD = 0x00000001; //reset CAN
C1BTR = 0x001C001D; //thiet lap bit Timing la 125k C1IER =0x00000001; //cho phep nhan ngat
Trang 91
VICVectCntl0 = 0x0000003A; //chon thu tu uu tien ngat VICVectAddr0 = (unsigned)CAN1IRQ; //lay dia chi ngat IRQ //into the VIC slot
VICIntEnable = 0x04000000; //cho phep ngat AFMR = 0x00000001; //Cam bo loc
C1MOD = 0x00000000; //ket thuc CAM while(1){;}
Trang 92
TÀI LIỆU THAM KHẢO
[1]. Philips (2005), The insider‟s guide to the Philips ARM7 based microcontroller. [2]. Jean J. Labrosse (2000), Embbeded System Building Block Second Edition:
Commplete and ready to use in module C, R&D Books