Tải bản đầy đủ (.pdf) (92 trang)

Lập trình ARM của Ngô Vinh

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (4.75 MB, 92 trang )



Trang 1

MỤC LỤC

CHƢƠNG 1: CÁC KHÁI NIỆM CƠ BẢN TRONG HỆ THỐNG NHÚNG 3
1.1. Hệ nhúng 3
1.2. Hệ thời gian thực 3
1.3. Biễu diễn số và dữ liệu 3
1.4. Cấu trúc phần cứng của hệ thống nhúng 4
1.5. Hệ điều hành nhúng và phần mềm nhúng 5
1.5.1. Hệ điều hành nhúng 5
1.5.2. Hệ điều hành thời gian thực –RTOS: (Realtime Operationg System ) 6
1.5.3. Phần mềm nhúng 7
1.6. Quy trình thiết kế hệ thống nhúng 8
1.7. Mô hình hệ thống nhúng 10
CHƢƠNG 2: HỌ VI ĐIỀU KHIỂN ARM 11
2.1. Tổng quan 11
2.2. Cơ chế Pipeline 12
2.3. Các thanh ghi 13
2.4. Thanh ghi trạng thái chƣơng trình hiện hành 14
2.5. Các mode ngoại lệ 15
2.6. Tập lệnh ARM 7 16
2.6.1. Các lệnh rẽ nhánh 18
2.6.2. Các lệnh xử lý dữ liệu 18
2.6.3. Các lệnh truyền dữ liệu 19
2.6.4. Lệnh SWAP 20
2.7. Ngắt mềm (SWI – Software Interrupt Instruction) 20
2.8. Đơn vị MAC (Multiply Accumulate Unit (MAC) 21
2.9. Tập lệnh THUMB 21


2.10. Phần mềm phát triển và công cụ phần cứng 23
2.10.1. Cấu trúc file start up 23
2.10.2. Công cụ phần cứng 25
2.10.3. Cách viết chƣơng trình C với tập lệnh ARM và tập lệnh THUMB 25
2.11. Cấu trúc bên trong 26
2.11.1. Bản đồ bộ nhớ 26
2.11.2. Lập trình thanh ghi 27


Trang 2

2.11.3. Memory Acelerator Module (MAM) 27
2.11.4. PLL- Phase Locked Loop 29
2.11.5. Bộ chia bus (VLSI Peripheral Bus Divider) 32
2.12. Các cổng vào ra 33
CHƢƠNG 3: LẬP TRÌNH VI ĐIỀU KHIỂN ARM 34
3.1. Hƣớng dẫn sử dụng phần mềm Keil C 34
3.2. Truy nhập các chân vào ra chung 42
Thí dụ 1: Viết chƣơng trình điều khiển led đơn sáng nhấp nháy 43
Thí dụ 2: Chƣơng trình hiển thị chữ trên LCD 44
3.3. Lập trình ngắt 50
3.3.1. Chân Connect Block 50
3.3.2. Các chân ngắt ngoài 51
3.3.3. Cấu trúc ngắt 52
3.3.4. Ngắt FIQ 54
3.3.5. Kết thúc ngắt 56
3.3.6. Vecto IRQ 56
3.3.7. Kết thúc một ngắt IRQ 57
3.3.8. Ngắt không có địa chỉ 58
3.3.9. Kết thúc ngắt không địa chỉ 59

3.4. Lập trình Timer 59
3.4.1. Các Timer 59
3.4.2. Đồng hồ thời gian thực (Real Time Clock - RTC) 67
3.5. Lập trình qua UART 70
3.6. Giao diện I2C 78
3.7. Giao diện SPI 81
3.8. Chuyển đổi ADC và DAC 83
3.8.1. Chuyển đổi ADC 83
3.8.2. Chuyển đổi D/A 85
3.9. Truyền dữ liệu qua CAN(Controller Area Network) 85
TÀI LIỆU THAM KHẢO 92




Trang 3

CHƢƠNG 1: CÁC KHÁI NIỆM CƠ BẢN TRONG HỆ THỐNG NHÚNG
(tổng số tiết: 3T, số tiết lý thuyết: 3T, số tiết thực hành: 0)

1.1. Hệ nhúng
Hệ nhúng là một phần hệ thống xử lý thông tin nhúng trong các hệ thống
lớn, phức hợp và độc lập. Thí dụ: ôtô, tủ lạnh, các thiết bị đo lƣờng, điều khiển,
truyền thông.
Là những tổ hợp của phần cứng và phần mềm để thực hiện một hoặc một
nhóm chức năng chuyên biệt, cụ thể (Trái ngƣợc với máy tính PC là đa năng).
Một hệ thống nhúng là một máy tính với chất lượng cao, yêu cầu về độ tin cậy
cao hơn các loại máy tính khác.
Các thiết bị PDAs, Web pad không phải là hệ thống nhúng.
1.2. Hệ thời gian thực

Chia làm 2 loại:
 Thời gian thực cứng là khi hệ thống hoạt động với yêu cầu thoả mãn sự ràng
buộc trong khung thời gian cứng tức là nếu vi phạm thì sẽ dẫn đến hoạt
động của toàn hệ thống bị sai hoặc bị phá huỷ. Thí dụ: Lò phản ứng hạt
nhân,…
 Thời gian thực mềm là khi hệ thống hoạt động với yêu cầu thoả mãn ràng
buộc trong khung thời gian mềm, nếu vi phạm và sai lệch nằm trong khoảng
cho phép thì hệ thống vẫn có thể hoạt động được và chấp nhận được. Thí dụ
nhƣ hệ thống phát thanh truyền hình.
Hầu hết hệ nhúng là các hệ thời gian thực và hầu hết các hệ thời gian thực là hệ
nhúng-> Thuộc tính thời gian là thuộc tính tiêu biểu cho hệ thống nhúng.
1.3. Biễu diễn số và dữ liệu
Đơn vị cơ bản nhất trong biểu diễn thông tin của hệ thống số đƣợc gọi là bit,
chính là ký hiệu viết tắt của thuật ngữ binary digit.
 1964, IBM đã thiết kế và chế tạo máy tính số sử dụng một nhóm 8 bit để
đánh địa chỉ bộ nhớ và định nghĩa ra thuật ngữ 8 bit = 1 byte.
 Ngày nay sử dụng rộng rãi thuật ngữ word là một từ dữ liệu dùng để biểu
diễn kích thƣớc dữ liệu mà đƣợc xử lý một cách hiệu quả nhất đối với mỗi


Trang 4

loại kiến trúc xử lý số cụ thể. Chính vì vậy một từ có thể là 16 bits, 32 bits,
hoặc 64 bits…
 Mỗi một byte có thể đƣợc chia ra thành hai nửa 4 bit và đƣợc gọi là các
nibble.
 Nibble chứa các bít trọng số lớn đƣợc gọi là nibble bậc cao, và nibble chứa
các bit trọng số nhỏ đƣợc gọi là nibble bậc thấp.
 Các hệ thống cơ số:
Một cách tổng quát một hệ biểu diễn số cơ số b và a là một số nguyên nằm

trong khoảng giá trị cơ số b đƣợc biểu diễn nhƣ sau:




n
i
i
i
xbaA
0
1

cơ số binary (nhị phân), cơ số decimal (thập phân), cơ số hexadecimal, cơ số
8 Octal (bát phân).
1.4. Cấu trúc phần cứng của hệ thống nhúng

Hình 1.1. Kiến trúc cơ bản của của các chip vi điều khiển nhúng
 CPU: Đóng vài trò là bộ não, giả mã và thực thi lệnh, gồm khối ALU, bộ giả
mã, bộ tuần tự và các thanh ghi.


Trang 5

Xung nhịp và trạng thái tín hiệu: Hoạt động của hệ thống đƣợc thực hiện đồng bộ hoặc
dị bộ theo các xung nhịp chuẩn. Các nhịp đó đƣợc lấy trực tiếp hoặc gián tiếp từ một
nguồn xung chuẩn thƣờng là các mạch tạo xung hoặc dao động thạch anh.
 Bus: có 3 loại, bus dữ liệu, địa chỉ và điều khiển (Bus điều khiển phục vụ
truyền tải các thông tin dữ liệu để điều khiển hoạt động của hệ thống).
 Bộ nhớ: có 2 loại kiến trúc

- Kiến trúc von neumann: không phân biệt vùng chứa dữ liệu và mã
chƣơng trình. Cả chƣơng trình và dữ liệu đều đƣợc truy nhập theo
cùng một đƣờng.
- Kiến trúc Havard: tách/phân biệt vùng lƣu mã chƣơng trình và dữ liệu.
Mã chƣơng trình chỉ có thể đƣợc lƣu và thực hiện trong vùng chứa
ROM và dữ liệu cũng chỉ có thể lƣu và trao đổi trong vùng RAM.
Hầu hết các vi xử lý nhúng ngày nay sử dụng kiến trúc bộ nhớ Havard hoặc kiến
trúc Havard mở rộng (tức là bộ nhớ chƣơng trình và dữ liệu tách biệt nhƣng vẫn cho
phép khả năng hạn chế để lấy dữ liệu ra từ vùng mã chƣơng trình).
 Bộ nhớ chƣơng trình: Eprom và Flash
Là các chíp khả trình, cấu tạo từ các transitor, eprom có thể xóa bằng tia cực tím,
trong khi Flash có thể xóa bằng các xung điện, có thể lập trình trực tiếp và không cần
tháo ra khỏi mạch.
 Bộ nhớ RAM: gồm SRAM và DRAM
 Bộ điều khiển ngắt: Xử lý yêu cầu ngắt
 Bộ định thời chó canh (Watchdog Timer): Là một bộ định thời đặc biệt để
định nghĩa 1 khung thời gian hoạt động bình thƣờng của hệ thống. Tự động
reset lại hệ thống khi phát hiện các sự cố mềm nhƣ hệ thống bị treo hoặc chạy
quẩn.
Khung thời gian do ngƣời lập trình đặt ra.
1.5. Hệ điều hành nhúng và phần mềm nhúng
1.5.1. Hệ điều hành nhúng
- Đóng vai trò trung gian để tƣơng tác trực tiếp với phần cứng và các chƣơng trình ở
lớp trên cũng nhƣ ngƣời sử dụng: Quản lý các tiến trình, quản lý tài ngyên và bảo về
các tài nguyên khỏi sự xâm phạm.


Trang 6

- Đƣợc nạp và thực thi đầu tiên khi hệ thống khởi động

- Để nạp hệ điều hành cần sử dụng bộ nạp boot-loader, có kích thƣớc nhỏ gọn, đảm
nhiệm chức năng tiền hệ điều hành.
- Bộ nạp khởi tạo cũng có nhiệm vụ khởi tạo vùng nhớ dữ liệu và các thanh ghi hệ
thống trƣớc khi nhảy tới chƣơng trình ứng dụng chính.
- Có rất nhiều dạng khác nhau của bộ nạp khởi tạo, từ dạng đơn giản đến phức tạp.
1.5.2. Hệ điều hành thời gian thực –RTOS: (Realtime Operationg System )
- Các chức năng chính nhƣ định thời, giải quyết xung đột dữ liệu, giao tiếp giữa các
tác vụ process/task >Ngắn gọn: RTOS là hệ điều hành đa nhiệm - multitasking dùng
cho các ứng dụng thời gian thực.
- RTOS: Cung cấp các giao tiếp giữa phần cứng và chƣơng trình ứng dụng, với các
tính năng chủ yếu sau: Đa nhiệm - Multitasking, Đồng bộ - Sync , xử lý sự kiện và
ngắt, I/O, truyền thông giữa các tách vụ process/task, quản lý Timer, Clock và bộ nhớ
(tựa chung là quản lý tài nguyên).

Hình 1.2. Cấu trúc của OSEK
Phân loại:
a. Các hệ điều hành mang tính thƣơng mại: thƣờng nhỏ và nhanh, nhƣ QNX,
PDOS, pSOS, VxWorks, Nulceus, ERCOS, EMERALDS, Windows CE, chúng có các
đặc điểm sau:


Trang 7

+ Có thời gian chuyển ngữ cảnh và thời gian đáp ứng nhanh.
+ Kích thƣớc rất nhỏ.
+ Không có bộ nhớ ảo và có thể cố định mã, dữ liệu trong bộ nhớ.
+ Hệ thống đa tác vụ và chuẩn giao tiếp liên quá trình. Các mailbox, các
sự kiện, các tín hiệu và các đèn báo đƣợc định nghĩa tốt.
Những hệ điều hành này thƣờng có các đặc tả tốt và có các công cụ tốt để phát triển
các ứng dụng nhúng thời gian thực. Nó hỗ trợ các ràng buộc thời gian thực với các

dịch vụ nhƣ:
+ Các giới hạn thời gian thực hiện.
+ Đồng hồ thời gian thực.
+ Lập lịch thứ tự ƣu tiên.
+ Cảnh báo đặc biệt và thời gian quá hạn (timeout).
+ Hỗ trợ các hàng đợi thời gian thực.
+ Cung cấp việc xử lý độ trễ, treo hay kích hoạt việc thực hiện.
b. Hệ điều hành thời gian thực mở rộng tới Unix và các hệ điều hành khác
Các hệ điều hành này nhƣ: RT-UNIX, RT-LINUX, RT-MACH, RT-POSIX. Chúng
chậm hơn và có khả năng dự đoán ít hơn so với các hệ điều hành thời gian thực thƣơng
mại ở trên nhƣng chúng lại có nhiều chức năng và môi trƣờng phát triển tốt hơn dựa
trên tập các giao tiếp chuẩn và thân thiện.
c. Các nhân cho mục đích nghiên cứu
Thí dụ nhƣ: Spring, MARS, HARTOS, MARUTI, ARTS, CHAOS, DARK.
Các hệ điều hành này có các đặc điểm sau:
+ Hỗ trợ các thuật toán lập lịch thời gian thực và việc phân tích thời gian.
+ Hỗ trợ các dịch vụ cơ bản để đồng bộ thời gian thực.
+ Nhấn mạnh khả năng dự đoán hơn là hiệu năng trung bình.
+ Hỗ trợ cho khả năng chịu lỗi.
- Đối với LPC2000 thì OS đƣợc xem là hệ điều hành tốt nhất.
1.5.3. Phần mềm nhúng
- Ngôn ngữ đƣợc sử dụng để phát triển các ứng dụng nhúng thƣờng là C hoặc
Assembler.
- Keil C là công cụ hỗ trợ viết soạn thảo, debug và biên dịch code (cả C và ASM).


Trang 8

- Simulator là một chƣơng trình phần mềm cho phép ngƣời phát triển mã chƣơng
trình chạy mô phỏng một chƣơng trình viết cho một nền VXL/VĐK (nền phần

cứng đích) trên một môi trƣờng phần cứng khác (hay còn gọi là môi trƣờng phát
triển); cho phép chạy từng bƣớc, kiểm thử, điều chỉnh với các giá trị khác nhau, sử
dụng các thuật toán khác nhau.
Hỗ trợ các chức năng giống nhƣ trên phần cứng đích, có thể kèm theo emulator.
- Emulator là một thiết bị phần cứng có khả năng thực hiện nhƣ một nền phần cứng
đích ( Còn gọi là cộng cụ phát triển thời gian thực bởi vì nó cho ta phản ứng với các
sự kiện nhƣ VĐK đích thực thi)
Các bộ Emulator thƣờng có kèm theo cả phần chƣơng trình giám sát
(monitor program) để cho phép ngƣời phát triển chƣơng trình cho VĐK đích kiểm
tra nội dung, trạng thái các thanh ghi và các khu vực bộ nhớ và thiết lập các điểm
dừng khi thực hiện chạy chƣơng trình.
1.6. Quy trình thiết kế hệ thống nhúng
Khi tiếp cập kiển trúc hệ thống nhúng dƣới góc nhìn kỹ thuật có thể sử dụng một số
mô hình để miêu tả chu kỳ thiết kế. Một số mô hình điển hình nhƣ sau:
 Mô hình big-bang: Mô hình này về cơ bản là không cần có kế hoạch và quy
trình trƣớc và trong quá trình thiết kế.
 Mô hình code anh fix: Đƣa ra ra các yêu cầu nhƣng không có quy trình trƣớc
khi bắt đầu phát triển dự án.
 Mô hình waterfall(thác nƣớc): Phát triển hệ thống theo từng bƣớc, có đƣợc kết
quả của bƣớc trƣớc mới thực hiện bƣớc sau và lặp lại từ đầu.


Trang 9


Hình 1.3. Mô hình thác nƣớc
 Mô hình spiral (xoáy ốc): Là một quy trình phát triển hệ thống theo từng bƣớc,
tại mỗi bƣớc có sự thay đổi và quay lại thiết kế bƣớc trƣớc sao cho phù hợp.

Hình 1.4. Mô hình xoán ốc

Thực tế ngƣời ta thƣờng kết hợp các mô hình, nhƣ mô hình chu kỳ thời gian sống là sự
kết hợp của mô hình waterfall và mô hình spiral


Trang 10


Hình 1.5. Mô hình phát triển hệ thống theo chu kỳ thời gian sống
1.7. Mô hình hệ thống nhúng
Mô hình hệ thống nhúng gồm 3 lớp

Hình 1.5. Mô hình tổng thể của hệ thống nhúng



Trang 11


CHƢƠNG 2: HỌ VI ĐIỀU KHIỂN ARM

2.1. Tổng quan
- Họ vi điều khiển LPC2000 là ARM7, ngƣời lập trình không cần thiết phải thành thạo
ARM 7 để sử dụng LPC2000 mà vấn đề phức tạp là ở trình biên dịch C.
- Ngƣời lập trình cần có kiến thức cơ bản về cách CPU làm việc và các đặc tính của nó
để tạo ra các thiết kế tin cậy.
- ARM 7 là một máy tính nhỏ với tập lệnh nhỏ, khả năng tính toán cao, tiêu thụ năng
lƣợng thấp.
- Vi điều khiển ARM đƣợc phát triển theo kiến trúc RISC (Reduced Instruction Set
Computer):
- Chỉ có các lệnh nạp hoặc lƣu trữ là có thể tham chiếu tới bộ nhớ,

- Tồn tại ít lệnh và kiểu định địa chỉ, khuôn dạng lệnh cố định,
- Có nhiều tập thanh ghi,
- Các lệnh thực hiện trong một chu ky máy,
- Lệnh đƣợc thực hiện trực tiếp trên phần cứng(CISC có 1 chƣơng trình thông
dịch nhỏ),
- Chƣơng trình biên dịch mã nguồn phức tạp(CISC-chƣơng trình thông dịch
phức tạp),
- Hỗ trợ cơ chế pipeline,
- Kích thƣớc chƣơng trình lớn.
Cấu trúc các chân:
Thí dụ các chân của LPC2101:


Trang 12


Hình 2.1. Cấu trúc các chân của LPC2101
2.2. Cơ chế Pipeline
- Trái tim của ARM7 là cơ chế pipeline, thực thi lệnh theo ba bƣớc: đọc lệnh, giải mã
lệnh và thực thi lệnh.

Hình 2.2. Ba bƣớc thực hiện của pipepline
- Pipeline có phần cứng độc lập để thực hiện các bƣớc, trong khi lệnh thứ nhất đang
thực thi, lệnh thứ 2 đƣợc giải mã và lệnh thứ 3 đƣợc đọc lên pipeline.
- Hầu hết các lệnh của ARM 7 đƣợc thực thi trong 1 chu kỳ máy.


Trang 13

- Pipeline làm việc rất tốt trong trƣờng hợp chƣơng trình không rẽ nhánh. ARM chỉ

cho phép thực hiện các bƣớc nhảy ngắn trong đoạn chƣơng trình.
- Pipeline là một thành phần của CPU, thanh ghi PC chạy ở 8 bytes đầu của lệnh hiện
hành sẽ đƣợc thực thi. Thí dụ: 0x4000 LDR PC,[PC,#4]-> PC=0x400C
2.3. Các thanh ghi
- ARM7 có kiến trúc kiểu load and store, bởi vậy, để thực hiện các lệnh xử lý dữ liệu
thì tất cả các dữ liệu phải đƣợc tải từ bộ nhớ vào một tập các thanh ghi trung tâm, lệnh
xử lý dữ liệu đƣợc thực hiện và lƣu trữ dữ liệu trở lại bộ nhớ.

Hình 2.3. Kiến trúc load and store của ARM 7
- ARM7 có 17 thanh ghi 32 bít:
- Các thanh ghi R0 đến R12 là các thanh ghi chung,
- Thanh ghi R13 là thanh ghi con trỏ ngăn xếp,
- R14 là thanh ghi liên kết,
- R15 là thanh ghi bộ đếm chƣơng trình (PC) và
- Thanh ghi trạng thái chƣơng trình CPSR.
- Thanh ghi R14 dùng trong chƣơng trƣờng hợp gọi đến chƣơng trình con “gần” thì nó
sẽ cất giữ địa chỉ của trả về của chƣơng trình chính, nếu trong chƣơng trình con này
gọi đến một chƣơng trình con khác thì địa chỉ của chƣơng trình chính phải đƣợc cất
giữa vào ngăn xếp.


Trang 14


Hình 2.4. Các thanh ghi của ARM7
2.4. Thanh ghi trạng thái chƣơng trình hiện hành

Hình 2.5. Thanh ghi trạng thái chƣơng trình CPSR
- CPU ARM7 thực thi 2 loại lệnh: Tập lệnh ARM 32 bít và tập lệnh đƣợc nén 16 bít.
Bít T sẽ quyết định loại lệnh nào sẽ đƣợc thực thi, ngƣời lập trình không nên set hay

xóa giá trị của bít này.
- ARM7 có 7 chế độ hoạt động khác nhau, ngƣời lập trình thƣờng chạy trong chế độ
ngƣời dùng để truy cập đến các bank thanh ghi từ R0-R15 và thanh ghi trạng thái
chƣơng trình(CPSR). Tuy nhiên khi gặp các ngoại lệ nhƣ ngắt, lỗi bộ nhớ, ngắt mềm
CPU sẽ chuyển sang chế độ khác. Mỗi chế độ các thanh ghi R13 và R14 có giá trị


Trang 15

riêng. Ở chế độ ngắt nhanh FIQ các thanh ghi R7-R12 có giá trị giống nhau (không cần
dùng stack để lƣu chữ).

Hình 2.6. 6 chế độ hoạt động của APU ARM7
2.5. Các mode ngoại lệ
- Khi có một ngoại lệ xảy ra, CPU sẽ chuyển chế độ và thanh ghi PC sẽ đƣợc đảy về
địa chỉ của vecto ngoại lệ. Bảng vecto bắt đầu từ địa chỉ 0 trùng địa chỉ vecto ngắt.
- Mỗi vecto ngoại lệ là 4 bytes.

Hình 2.6. Bảng các vecto ngắt


Trang 16


Hình 2.7. Thứ tự ƣu tiên của các ngắt

Hình 2.8. Thí dụ về trật tự xử lý khi có một ngoại lệ ngắt xảy ra

Hình 2.9. CPU trở lại trạng thái ban đầu khi kết thúc phụ vụ ngoại lệ
2.6. Tập lệnh ARM 7

- ARM7 có 2 tập lệnh: Tập lệnh mở rộng 32 bít và tập lệnh nén (THUMB) 16 bít.
- CPU ARM7 đƣợc thiết kế để hỗ trợ xử lý theo kiểu big endian hay little endian:


Trang 17


Hình 2.10. Hai kiểu xử lý của CPU ARM7
- Một đặc điểm thú vị của ARM7 là tất cả các lệnh đều có thể là các lệnh có điều
kiện, bằng cách so sánh 4 bít từ bit 28 đến bít 31 của kết quả thực hiện lệnh với các bít
điều kiện trong thanh ghi CPSR, nếu điều khiện không thỏa mãn thì lệnh sẽ không
đƣợc thực thi.
- Các lệnh xử lý dữ liệu sẽ bị ảnh hƣởng bởi các bít điều kiện trong thanh ghi
CPSR. Hai lệnh cơ bản MOV và ADD có thể đặt các tiến tố đằng trƣớc với 16 điều
kiện nhƣ sau:

Hình 2.11. 16 điều kiện đƣợc kiểm tra trƣớc khi thực thi lệnh


Trang 18

Thí dụ: EQMOV R1,#0x00800000;
Giá trị 0x00800000 chỉ đƣa vào R1 khi kết quả cuối cùng của lệnh có các bít
tƣơng ứng với 4 bít trong thanh ghi CPSR và bít cờ Z đƣợc set =1.
- Các lệnh của ARM7 có thể chia thành 6 nhóm: Các lệnh rẽ nhánh, các lệnh xử lý
dữ liệu, truyền dữ liệu, truyền khối dữ liệu, lệnh số học và ngắt mềm.
2.6.1. Các lệnh rẽ nhánh
- Cho phép nhảy tiến hoặc lùi trong phạm vi 32MB, địa chỉ của lệnh tiếp theo sẽ
đƣợc lƣu vào thanh ghi liên kết R14.
- Lệnh rẽ nhánh có 2 biến thể: Rẽ nhánh trao đổi (branch exchange) và rẽ nhánh

liên kết trao đổi (branch link exchange). Hai lệnh này cơ giống nhau nhƣng lệnh rẽ
nhánh liên kết địa chỉ của lệnh tiếp theo đƣợc cộng thêm 4 bytes rồi đƣa vào R14.
2.6.2. Các lệnh xử lý dữ liệu
Cú pháp tổng quát:

Hình 2.12. Cú pháp tổng quát của một lệnh xử lý dữ liệu có điều kiện
Mỗi lệnh đều có 2 toán hạng, trong đó toán hạng thứ nhất phải là thanh ghi, toán hạng
còn lại có thể thanh ghi hoặc giá trị cụ thể.
Bít „S‟ đƣợc sử dụng để điều khiển điều kiện của lệnh:
 S=1 thì điều kiện của lệnh phụ thuộc vào kết quả của lệnh,
 S=0 thì không có điều gì xảy ra
 Nếu S=1 và PC là thanh ghi chứa kết quả thì SPSR của chế độ hiện hành đƣợc
copy vào CPSR.


Trang 19


Hình 2.13. Bảng các lệnh xử lý dữ liệu
2.6.3. Các lệnh truyền dữ liệu

Hình 2.14. Các lệnh truyền dữ liệu


Trang 20


Hình 2.15. Các lệnh truyền một khối dữ liệu
2.6.4. Lệnh SWAP
- ARM7 hỗ trợ các tín hiệu thời gian thực với một lệnh swap cho phép trao đổi chỗ

nội dung của hai thanh ghi.
- Lệnh này đƣợc hỗ trợ trong thƣ viện ARM chứ không trực tiếp từ ngôn ngữ C.

Hình 2.16. Mô tả lệnh swap trong ARM7
2.7. Ngắt mềm (SWI – Software Interrupt Instruction)


Trang 21

Các ngắt mềm sinh ra một ngoại lệ khi thực thi, đƣa vi xử lý vào chế độ hoạt động
giám sát và PC nhảy tới địa chỉ 0x00000008. Cũng nhƣ các lệnh ARM khác, lệnh ngắt
mềm chứa một mã điều kiện thực thi trong 4 bít thấp của toán hạng, các bít còn lại là
trống rỗng.

Hình 2.17. Điều kiện của ngắt mềm để CPU vào chế độ giám sát
Có thể giả lặp chƣơng trình con phục vụ ngắt của ngắt mềm nhƣ sau:
switch( *(R14-4) & 0x00FFFFFF) // Kiểm tra giá trị
//đƣợc lƣu trữ trong thanh ghi liên kết
{
case ( SWI-1):
…}

2.8. Đơn vị MAC (Multiply Accumulate Unit (MAC)
- MAC hỗ trợ phép nhận số nguyên kiểu integer và long integer, khi nhân kiểu
integer 2 thanh ghi 32 bít với nhau thì kết quả là 32 bít đƣợc đặt vào thanh ghi thứ 3.
Khi nhân 32 bít kiểu long integer thì kết quả là 64 bít và đƣợc đặt vào 2 thanh ghi.
- Các lệnh nhận dạng ASM:
Tên lệnh
Viết tắt
Kết quả

MUL
Multiply
32 bit
MULA
Multiply accumulate
32 bit
UMULL
Unsigned multiply
64 bit
UMLAL
Unsigned multiply accumulate
64 bit
SMULL
Signed multiply
64 bit
SMLAL
Signed multiply accumulate
64 bit
Bảng 2.1. Các lệnh nhân trong vi điều khiển ARM
2.9. Tập lệnh THUMB
- Tập lệnh ARM là tập lệnh 32 bít, ARM có tập lệnh 16 bít gọi là tập lệnh
THUMB. Tập lệnh THUMB thực chất là tập lệnh nén lại từ tập lệnh ARM.


Trang 22


Hình 2.18. Tập lệnh THUMB đƣợc nén lại từ tập lệnh ARM
- Tập lệnh THUMB cho giá trị kết quả thấp hơn tập lệnh ARM nhƣng mà các kết
quả này chiếm một tỷ lệ lớn hơn. Tập lệnh THUMB tiết kiệm đƣợc không gian nhớ

30% và chạy nhanh hơn 40% so với tập lệnh ARM.
- Tập lệnh THUMB không có điều kiện thực thi trừ các lệnh rẽ nhánh. Các lệnh xử
lý dữ liệu thì cần có một thanh ghi nguồn và một thanh ghi đích.
Thí dụ: Với lệnh cộng thanh ghi R0 và R1:
Dùng lệnh ARM: ADD R0, R0,R1 //R0 = R0+R1
Dùng lệnh THUMB: ADD R0,R1 // R0 = R0+R1
- Tập lệnh THUMB chỉ có thể truy cập đến các thanh ghi thấp từ R0-R7, các thanh
ghi cao từ R8-R12 bị giới hạn truy cập:

Hình 2.19. Mô hình lập trình tập lệnh THUMB


Trang 23

Ngƣời lập trình không thể truy cập trực tiếp vào thanh ghi CPSR và SPSR. Ngƣời lập
trình có thể sử dụng 2 lệnh BLX và BX để chuyển chế độ hoạt động với các lệnh. Khi
reset vi điều khiển làm việc với tập lệnh THUMB, khi có 1 ngoại lệ xảy ra thì sẽ
chuyển sang làm việc với tập lệnh ARM, khi kết thúc ngoại lệ thì quay trở về làm việc
với lệnh ARM.

Hình 2.20. Trao đổi giữa lệnh ARM và lệnh THUMB
2.10. Phần mềm phát triển và công cụ phần cứng
- Keil C ARM là công cụ cho phép lập trình mô phỏng vi điều khiển ARM với hệ
thống thƣ viện đƣợc hỗ trợ tƣơng đối đầy đủ về vi điều khiển core ARM 7 nhƣ: họ vi
điều khiển LPCxxxx và ARM966E-S, cortex-M0 đến cortex-M3.
- Phần mềm isp của atmel và H-jtag để biên dịch và nạp code lên board.
2.10.1. Cấu trúc file start up
- Phần đầu cung cấp bảng vecto ngắt:



Trang 24


Hình 2.21. Các định nghĩa các vecto ngắt trong file startup.s
Bảng vecto ngắt đƣợc định nghĩa tại địa chỉ 0x00000000 và cho phép bộ đếm
chƣơng trình nhảy đến chƣơng trình con phụ vụ ngắt ( ISR-interupt service routine).
Rải địa chỉ của vio điều khiển là liên tiếp, không bị ngắt quãng trong bảng vecto ngắt.
Lệnh LDR (Load Register) đƣợc sử dụng để tải hằng tƣơng ứng với vecto ngắt trong
bảng vecto ngắt.
- Bảng vecto ngắt và bảng các hằng nằm ở 64 bytes đầu tiên của bộ nhớ.
- Lệnh NOP đƣợc sử dụng để nhảy đến vị trí vecto ngắt tại địa chỉ 0x00000014, vị
trí lỗi.
- Phần tiếp trong file startup.s cấu hình con trỏ ở đỉnh ngăn xếp cho từng chế độ
hoạt động:
- Kích thƣớc Stack tính theo byte, thí dụ trong file startup của LPCxxxx nhƣ sau:


Trang 25


Hình 2.22. Cấu hình stack cho từng chế độ hoạt động
- Vùng nhớ dành cho stack đƣợc định nghĩa ở phần địa chỉ cao nhất của bộ nhớ và
lớn dần về phần địa chỉ thấp.
2.10.2. Công cụ phần cứng
- Họ LPC2000 của hãng Philips có nhiều cổng cho phép kết nối vi điều khiển với
máy tính, thƣờng đƣợc sử dụng nhất là cổng JTAG. Khi kết nối trực tiếp với máy tính
cho phép ngƣời lập trình debug trực tiếp trên mạch phần cứng:

Hình 2.23. Kết nối LPC2000 với máy tính qua cổng JTAG
- Đồng thời kèm theo module ETM cho phép debug chƣơng trình: nhƣ theo dõi

thời gian thực, theo dõi sự kiện và phân tích quá trình thực thi.
2.10.3. Cách viết chƣơng trình C với tập lệnh ARM và tập lệnh THUMB
- Để sử dụng các định nghĩa địa chỉ các ARM7, trong chƣơng trình cần khai báo
thƣ viện hợp lệ, thí dụ với họ LPC có các khai báo: #include LPC2xxx.h hoặc
LPC21xx.h hoặc LPC210x.h
- Ngƣời lập trình có thể đƣa ra các hàm đƣợc biên dịch theo lệnh tập ARM hoặc tập
THUMB. Để chỉ định một hàm sẽ đƣợc biên dịch theo tập lệnh nào dùng directive
#pragma, thí dụ:

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×