Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

103
ÑAÏI HOÏC QUOÁC GIA THAØNH PHOÁ HOÀ CHÍ MINH TRÖÔØNG ÑAÏI HOÏC BAÙCH KHOA KHOA COÂNG NGHEÄ THOÂNG TIN ---------------o0o--------------- BAÙO CAÙO ĐỒ ÁN TIN HỌC TỔNG QUAN VI XỬ LÝ LPC2378 HƯỚNG DẪN SỬ DỤNG BOARD MCB2300 GVHD: TS. Đinh Đức Anh SVTH: Đặng Việt Hùng - 50401023 Traàn Trung Tín - 50402645 1

Transcript of Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

Page 1: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

ÑAÏI HOÏC QUOÁC GIA THAØNH PHOÁ HOÀ CHÍ MINHTRÖÔØNG ÑAÏI HOÏC BAÙCH KHOA KHOA COÂNG NGHEÄ THOÂNG TIN

---------------o0o---------------

BAÙO CAÙO ĐỒ ÁN TIN HỌC

TỔNG QUAN VI XỬ LÝ LPC2378

HƯỚNG DẪN SỬ DỤNG BOARD MCB2300

GVHD: TS. Đinh Đức Anh VũSVTH: Đặng Việt Hùng - 50401023Traàn Trung Tín - 50402645

Tp HCM, Thaùng 12/2007

1

Page 2: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

2

Page 3: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

MỤC LỤC

Đề mục Trang

1. Tổng quan về đồ án ................................................................................................................1

2. Cách sử dụng board MCB2300 ..............................................................................................2

2.1. Giới thiệu board thực tập MCB2300..........................................................................2

2.2. Cài đặt board MCB2300 ...........................................................................................4

2.3. Thiết lập jumper trên board MCB2300 .....................................................................8

3. Cách đánh địa chỉ trong LPC2300 .........................................................................................9

3.1. Tổ chức bộ nhớ và địa chỉ của các thiết bị ngoại vi...................................................9

3.2. Phân vùng bộ nhớ.....................................................................................................10

3.3. Địa chỉ thiết bị APB.................................................................................................12

3.4. Phần vùng lại bộ nhớ và boot ROM.........................................................................13

3.5. Điều khiển phân vùng bộ nhớ..................................................................................14

4. Khối điều khiển hệ thống......................................................................................................16

4.1. Giới thiệu ................................................................................................................16

4.2. Chân kết ngối ngoài ................................................................................................17

4.3. Các thanh ghi liên quan ...........................................................................................17

4.4 Reset .........................................................................................................................18

5. Cách thiết lập PIN cho LPC2300.........................................................................................19

6. Interrupt ...............................................................................................................................21

6.1. Giới thiệu.................................................................................................................21

6.2. Các loại thanh ghi....................................................................................................21

6.3. Kiến trúc Interrupt....................................................................................................23

3

Page 4: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

7. Timer ...............................................................................................................................26

7.1. Giới thiệu ................................................................................................................26

7.2. Timer hoạt động như thê nào...................................................................................26

7.3. Thiết lập timer..........................................................................................................28

8. UART ...............................................................................................................................30

8.1. Giới thiệu ................................................................................................................30

8.2. Các loại thanh ghi trong UART...............................................................................32

8.3. Khởi động UART.....................................................................................................33

9. I2C ...............................................................................................................................39

9.1.Giới thiệu..................................................................................................................39

9.2. Nguyên lý hoạt động................................................................................................39

9.3. Kết nối vật lý............................................................................................................40

9.4. Sơ đồ khối của I2C...................................................................................................41

9.5. Những thanh ghi quan trọng....................................................................................44

9.6. Các chế độ hoạt động của I2C..................................................................................45

9.7. Một số ví dụ.............................................................................................................49

Phần phụ lục..............................................................................................................................52

Điều khiển LED..............................................................................................................52

Điều khiển màn hình LCD..............................................................................................52

Tập lệnh ARM 7.............................................................................................................53

10. Kết luận...............................................................................................................................80

Tài liệu tham khảo

Kết luận.

4

Page 5: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

CHƯƠNG 1. TỔNG QUAN VỀ ĐỒ ÁN.

LPC2378 là một vi xử lý dựa trên nền tảng ARM và được dùng cho các ứng dụng yêu cầu

truyền nhận dữ liệu tuần tự. Vi xử lý này tính hợp một giao tiếp 10/100 Ethernet MAC, giao

tiếp USB 2.0 Full Speed, 4 giao tiếp UART, 2 kênh CAN, 1 cổng SPI, 2 cổng SSP

(Synchronous Serial Ports), 3 giao tiếp I2C, 1 giao tiếp I2S và 1 MiniBus.

Thuật ngữ LPC2300 được áp dụng cho toàn bộ họ vi xử lý gồm LPC2364, 2366, 2368 và

2378. Trong khuôn khổ báo cáo này, chúng ta chỉ quan tâm đến LPC2378.

Đồ án tin học này sẽ giới thiệu một số đặc điểm chính của kiến trúc LPC2378 cũng như tính

năng, ứng dụng và các ví dụ dựa trên thí nghiệm với board MCB2300.

5

Page 6: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

CHƯƠNG 2 CÁCH SỬ DỤNG BOARD MCB2300

2.1 Giới thiệu board thực tập MCB 2300

Board thí nghiệm MCB2300 cho phép tạo ra và chạy những chương trình trên họ thiết bị

LPC23xx của NXP. Board thí nghiệm có 2 phiên bản khác nhau là MCB2360 và MCB2370.

Board MCB 2360 thông dụng với vi điều khiển NXP LPC2368.

Board MCB 2370 thông dụng với vi điều khiển NXP LPC2378.

Trong phạm vi báo cáo này, chúng ta chỉ đề cập đến board MCB 2370. Khi nói đến board

MCB 2300 tức là bao gồm cả MCD 2368 và MCB 2378.

2.1.1 Kit thí nghiệm MCB2300

Bên trong một bộ kit thí nghiệm MCB 2300 bao gồm

_ Board thí nghiệm MCB 2300.

_ Hướng dẫn nhanh Vision IDE.

_ Bản giới thiệu tổng quan về công cụ phát triển của ARM.

_ Một CD-ROM chứa:

6

Page 7: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

+ Bản dùng thử chương trình “RealView MDK-ARM Microcontroller

Development Kit”.

+ Một số chương trình ví dụ chạy trên board MCB2300.

+ File hướng dẫn sử dụng của board MCB2300.

_ Chương trình ví dụ chạy trên board MCB2300 có thể tìm thấy ở KEIL\ARM\RV30\BOARDS\

KEIL\MCB2300 trên CD-ROM. Tất cả các ví dụ này đều có thể dịch và chạy trên bản dùng thử.

2.1.2. Đặc điểm chính của board MCB2300.

Giao diện USB 2.0 Full Speed.

Có hai cổng giao tiếp serial.

Có hai cổng giao tiếp CAN.

LF Amplifier.

Điều khiển điện áp tương tự cho cổng vào ADC.

Giao diện JTAG để nạp và chạy debug.

2.1.3 Chuẩn bị về phần cứng.

Để sử dụng board MCB2300, chúng ta cần chuẩn bị:

Board thí nghiệm MCB2300.

Máy tính chuẩn IBM còn trống:

_ 2 cổng USB : 1 cổng cung cấp nguồn điện và một cổng dùng để download/debug.

_ 1 cổng COM RS-232 nếu sử dụng cách nạp bằng ISP thông qua cổng giao tiếp

serial.

Bộ giao tiếp JTAG : bao gồm Adapter JTAG và 2 dây cáp nối USB.

Trong TH cần sử dụng tiện ích “Flash Magic Utility” một dây cáp serial, 1 đầu đực/1

đầu cái, ngắn hơn 3m.

2.1.4 Chuẩn bị về phần mềm.

7

Page 8: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

Hệ điều hành Microsoft Windows 2000/XP.

Phần mềm “Keil Vision”

Phần mềm “RealView MDK-ARM Evaluation Tools”.

Các ví dụ viết cho MCB2300 được kèm theo các bộ MDK-ARM, DB-ARM và Keil

ARM Evalution Toolkits.

2.2 Cài đặt board thí nghiệm MCB2300.

Sau khi đã chuẩn bị đầy đủ các yêu cầu về phần cứng và phần mềm, chúng ta có thể tiến hành

các bước sau đây để cài đặt và sẵn sàng thí nghiệm trên board MCB2300.

2.2.1 Cài đặt board.

Board MCB2300 dùng nguồn điện từ cổng USB.

Board MCB2300 kết nối trực tiếp đến phần mềm “Keil Vision Debugger” bằng adapter

“Keil ULINK USB-JTAG”, không cần cài đặt thêm bất cứ phần mềm nào trên board.

8

Page 9: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

2.2.2. Các thành phần quan trọng trên board MCB2300.

2.2.3 Kết nối với U-LINK.

Bước 1, kết nối U-LINK với PC thông qua cable USB.

Bước 2, kết nối U-LINK đến cổng JTAG nằm trên board MCB2300.

Bước 3, cấp nguồn cho board MCB2300 bằng cabke USB.

Bước 4, thiết lập mức xung JTAG cho adapter U-LINK.

_ Cho hoạt động board MCB2300.

_ Trong phần mềm Vision, thiết lập bộ Debug trong hộp thoại Project\Options for

Target\Debug.

9

Page 10: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

_ Chọn “Use: ULINK ARM Debugger” trong danh sách thả xuống.

_ Click lên nút “Setting” để mở hộp thoại “ARM Target Driver Setup”.

_ Danh sách thà xuống “Max JTAG Clock” dùng để chỉ định xung JTAG cao nhất

được dùng để giao tiếp với board thí nghiệm. Nên chọn giá trị 200 kHz để board

MCB2300 hoạt động tốt nhất.

*_ ULINK2 JTAG có thêm chân RTCK (Return Clock). Nếu sử dụng adapter ULINK2,

chúng ta có thể thiết lập Max JTAG Clock là 200 kHz hoặc RTCK.

2.2.4 Kết nối thông qua giao tiếp Serial

Bước 1, thiết lập jumper trên board MCB2300

_ J9 và J10 : ON.

_ J13 : OFF.

Bước 2, cấp nguồn cho board MCB2300 bằng cabke USB.

Bước 3, Kết nối board MCB2300 vào máy tính qua cổng COM từ cổng COM0 trên

board.

Bước 4, Xác nhận kết nối bằng tiện ích “Flash Magic”.

_ Chạy “Flash Magic” và thiết lập thông số như sau:

10

Page 11: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

_ Xác nhận cổng COM bằng lệnh ISP – Read Device Signature.

_ Cừa sổ sau đây sẽ hiển thị thông số kết nối.

11

Page 12: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

2.3 Thiết lập jumper trên board MCB2300.

Các jumper trên board MCB2300, đây cũng là thông số mặc định trong TH kết nối board

thông qua ULINK2.

Jumper

Stat

e Description

J1 - USB (D-) ON Connects USB Line D- to the USB connector.

J2 - USB (D+) ON Connects USB Line D+ to the USB connector.

J3 - AOUT ON Connects AOUT via LF amplifier to the loudspeaker.

J4 - -- Not used

J5 - UMODE ON Allows soft-connect of the USB device by issuing a software restart via P0.14

J6 - AD0.0 ON Connects POT1 potentiometer to AIN0 for analog input demonstration.

J8 - INT0 ON Enable INT0 Push Button.

J9 - RST ON Enables Reset via COM0.

J10 - ISP OFF Disables In-System Programming via COM0.

J11 - LED ON Enables Port2.0 - Port2.7 LEDs.

J13 - ETM ON Enables the Embedded Trace Macrocell (so that the USB soft-connect and the

LED's can be used)

12

Page 13: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

CHƯƠNG 3. CÁCH ĐÁNH ĐỊA CHỈ TRONG LPC2300

3.1. Tổ chức bộ nhớ và địa chỉ của các thiết bị ngoại vi.

Bộ xử lý ARM có thể quản lý một không gian địa chỉ bộ nhớ 4 GB. Bảng sau đây thể hiện sự

phân bố địa chỉ của vùng bộ nhớ trong các thiết bị ARM:

13

Page 14: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

3.2 Phân vùng bộ nhớ

LPC2300 quản lý chặt chẽ từng vùng nhớ riêng biệt. Bảng sau thể hiện toàn bộ không gian

địa chỉ. Vùng nhớ chứa địa chỉ vector ngắt phục vụ cho việc đánh lại địa chỉ nhớ, vấn đề này

sẽ được đề cập trong phần sau.

14

Page 15: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

3.2.1 Phân vùng bộ nhớ cho thiết bị ngoại vi

Cả hai vùng nhớ cho thiết bị AHB và APB để có không gian là 2MB và chia đều cho 128 thiết

bị., mỗi thiết bị được phân 16 KB. Điều này đơn giản việc giải mã địa chỉ cho từng thiết bị.

15

Page 16: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

3.3. Địa chỉ thiết bị APB.

Bảng sau thể hiện phân vùng của thiết bị APB.

16

Page 17: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

3.4 Phân vùng lại bộ nhớ trong LPC2300 và boot ROM

3.4.1 Nguyên lý và các chế độ hoạt động

Bảng vector ngắt của ARM7 được phân vùng từ 0x000 0000 đến 0x0000 001C, vì thế, một

phần chia của Boot ROM và SRAM cần được phân vùng lại để có thể hoạt động trong những

chế độ khác nhau. Việc phân vùng lại vector ngắt liên quan chặt chẽ đến Bộ Điều khiển Phân

vùng nhớ.

17

Page 18: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

3.4.2 Phân vùng lại bộ nhớ

Boot ROM được phân vùng trên cùng của bộ nhớ, một chương trình dù chiếm nhiều hay ít bộ

nhớ đều không ảnh hưởng đến vị trí của Boot ROM hoặc không thay đổi phân vùng của véc

tơ ngắt Boot ROM.

Phân vùng bộ nhớ được cấp phát lại cho phép thực hiện quá trình ngắt ở những chế độ khác

nhau, áp dụng cho vùng vectơ ngắt (32 bytes) và cả 32 bytes mở rộng. Mã điều khiển việc

phân vùng được cất giữ ở địa chỉ từ 0x0000 0000 và 0x0000 003F. Chương trình trong bộ nhớ

Flash được có điểu khiển FIQ lưu ở 0x0000 001C. Vectơ chứa trong SRAM, bộ nhớ ngoài và

Boot ROM phải chứa địa chỉ đến điều khiển ngắt thật sự một cách trực tiếp hay gián tiếp hông

qua một câu lệnh khác.

3.5. Điều khiển phân vùng bộ nhớ

Điều khiển phân vùng bộ nhớ thay đổi phân vùng của những vector ngắt xuất hiện ở địa chỉ

0x0000 0000. Mã chương trình sẽ được phép chạy ở những vùng nhớ khác và điều khiển

những ngắt.

3.5.1 Thanh ghi điều khiển phân vùng bộ nhớ (MEMMAP – 0xE01F C040)

Khi một điều khiển ngoại lệ cần thiết, vi xử lý sẽ nạp câu lệnh điền khiển địa chỉ của ngoại lệ

căn cứ vào bảng 2.5. Thanh ghi MEMMAP xác định địa chỉ nguồn của dữ liệu sẽ nạp vào

bảng này.

18

Page 19: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

19

Page 20: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

CHƯƠNG 4. KHỐI ĐIỀU KHIỂN HỆ THÔNG

4.1 Giới thiệu.

Khối điều khiển hệ thống bao gồm nhiều đặc tính hệ thống và nó điều khiển những thanh ghi

cho một số chức năng riêng biệt, không liên quan đến bất cứ thiết bị ngoại vi nào. Những

chức năng đó là:

Reset.

Brown-Out Detection.

Ngõ nhập ngoài tạo ngắt.

Điều khiển/ Thông số hệ thống.

Bảo mật và Tìm lỗi code.

AHB configuration.

Mỗi chức năng có một hay nhiều thanh ghi của riêng nó. Những bit không cần thiết trong

thanh ghi sẽ được giữ lại cho những mở rộng về sau. Những chức năng không liên quan với

nhau không chia sẽ chung bất cứ thanh ghi nào.

20

Page 21: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

4.2 Chân kết nối ngoài của khối điều khiển hệ thống.

Bảng sau đây thể hiện những chân kết nối ngoài liên quan đến những chức năng của khối điều

khiển hệ thống.

4.3 Các thanh ghi liên quan.

Bảng sau đây thể hiện những thanh ghi liên quan đến những chức năng của khối điều khiển hệ

thống.

21

Page 22: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

4.4 Reset

Có 4 cách Reset trên LPC2300.

Chân RESET (ngõ nhập Schmitt trigger)

Lệnh Reset của Watchdog.

Reset khi mở nguồn.

Mạch Brown Out Dectection.

Sơ đồ khối điểu khiển Reset

4.5 Các chức năng điều khiển khác.

Tham khảo User Manual – Chapter 3

22

Page 23: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

CHƯƠNG 5. CÁCH THIẾT LẬP PIN CHO LPC2378

Mỗi chân trong LPC2378 có thể có nhiều chức năng hoặc input, output hay làm 1 chức năng

cụ thể của 1 phần nào đấy. Ví dụ như : P0[1] (port số 0 chân số 1) có thể làm chức năng input,

output căn bản hay cũng có thể làm chức năng là chân nhận dữ liệu của Control Area Network

1 (CAN1).

Chi tiết của từng chân tham khảo trong user manual trang 95. Ý tưởng ở đây là chúng ta biết

mỗi chân có nhiều chức năng và khi muốn sử dụng chức năng nào thì ta phải thiết lập 1 số giá

trị nhất định cho thanh ghi nào đó.

Như vậy ta sẽ phải có 1 thanh ghi để chọn chức năng cho từng chân. Thanh ghi đó là PINSEL,

có 10 thanh ghi PINSEL0 -> PINSEL9. Mỗi 1 chân của LPC2378 sẽ tương ứng với 2 bit

trong 1 thanh ghi này.

PINSEL Chức năng

00 Chức năng input,output căn bản

01 Chức năng số 1

10 Chức năng số 2

11 Chức năng số 3

Mọi chân đều có thể làm input,output, tùy vào từng chân mà chức năng số 1,2,3 sẽ là gì.

Chi tiết chức năng của từng chân xem user manul trang 115

23

Page 24: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

Lấy ví dụ như ta muốn set chân P0.2 là TXD và P0.3 là RXD còn các chân còn lại giữ nguyên

thì ta sẽ dung câu lệnh :

PINSEL0 |=0x50; //set bit 4 và số 6 giữ nguyên các bit còn lại

PINSEL0 &=~0xA0; // xóa bit số 5 và số 7 giữ nguyên các bit còn lại

24

Page 25: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

CHƯƠNG 6. INTERRUPT

6.1 Giới thiệu

LPC2378 hỗ trợ 32 vector IRQ interrupt và có 16 mức độ ưu tiên

Có 2 loại interrupt : interrupt request (IRQ) và Fast Interrupt Request (FIQ)

Vectored Interrupt Controller (VIC) hỗ trợ 32 yêu cầu interrupt, ta sẽ lập trình vector

đó tương ứng với loại interrupt nào (IRQ hay FIQ)

Fast Interrupt Request là interrupt có độ ưu tiên cao nhất. Nếu có cùng độ ưu tiên thì

interrupt ở vector có chỉ số nhỏ nhất sẽ được làm trước. IRQ có độ ưu tiên thấp hơn,

cũng tương tự như FIQ nếu có nhiều interrupt cùng độ ưu tiên thì interrupt nào ở

vector có chỉ số nhỏ hơn sẽ được thực thi trước.

6.2 Các loại thanh ghi :

VICIRQStatus (Read only) (32 bit) từ 0-> 31 : bit nào trong thanh ghi này là 1 nó chỉ

rằng interrupt đó đang hoạt động và loại interrupt là IRQ

VD: VICIRQStatus = 0x00001003H có nghĩa là Vector interrupt số 0,1,15 đang hoạt

động và loại interrupt của 3 vector này là IRQ

VICFIQStatus (Read only) (32 bit) từ 0-> 31 : bit nào trong thanh ghi này là 1 nó chỉ

rằng interrupt đó đang hoạt động và loại interrupt là FIQ

VD: VICIRQStatus = 0x00001003H có nghĩa là Vector interrupt số 0,1,15 đang hoạt

động và loại interrupt của 3 vector này là FIQ

VICRawIntr(Read only) (32 bit) từ 0-> 31 :

o Bit nào bằng 0 : không có interrupt cả hardware lẫn software cho vector

interrupt đó

o Bit nào bằng 1 : có interrupt hardware hay software cho vector interrupt đó

VICIntSelect (Read/Write) (32 bit) : thay đổi loại interrupt IRQ hay FIQ

o Bit bằng 0: IRQ

25

Page 26: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

o Bit bằng 1: FIQ

VICIntEnable (Read/Write) (32 bit) Điều khiển 32 interrupt cả hardware lẫn software.

Khi ta đọc thanh ghi này, giá trị 1 nói rằng vector interrupt đó đang được enable (có

thể là FIQ hay IRQ). Khi ta write thanh ghi này, write bit nào trong thanh ghi đó là 1

thì nó sẽ cho phép vector đó interrupt (FIQ or IRQ)

VICVectAddr : cho ta biết địa chỉ sẽ nhảy đến khi interrupt xảy ra. Nó thường được

gán với địa chỉ của 1 hàm interrupt trong chương trình.

VICVectPriority : nói lên độ ưu tiên của interrupt đó. Từ 0 đến 16 (tức chỉ dùng 4 bit

đầu từ 0 đến 3) còn bit từ 4-> 31 không dùng (gán cho bằng 0 hết)

26

Page 27: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

6.3 Kiến trúc Interrupt

Nhìn vào sơ đồ khối ta có thể thấy : Phần interrupt của LPC2378 có 4 khối: phần interrupt

request, khối status interrupt, khối priority, khối vecto interrupt

Trong đó thì

Khối interrupt request : có vai trò khi bất cứ interrupt nào được bật lên thì nó sẽ cập

nhật lại khối status interrupt.

Khối status interrupt có vai trò : chứa các thông tin về các interrupt hiện tại và sinh ra

FIQ

Khối vectored interrupt chứa thông tin về vector IRQ và địa chỉ cần nhảy tới khi có

interrupt

27

Page 28: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

Khối priority and generation: có nhiệm vụ chọn interrupt nào sẽ làm, và địa chỉ nào sẽ

nhảy tới.

LPC2378 hỗ trợ nhiều ngoại vi và 1 số chức năng khác : mỗi 1 chức năng như vậy sẽ được

gắn với 1 thanh ghi trong vector interrupt. Ta muốn sử dụng chức năng interrupt nào thì phải

set thanh ghi đó. Muốn biết chức năng mình dùng nằm trong thanh ghi nào thì tham khảo

table 79 trang 87 (user manual)

Ví dụ bây giờ ta muốn set interrupt cho timer0

VICVectAdd4 = (unsigned long) Timer_handle0;// set địa chỉ nhảy đến

VicVectCntl4 = 15 //set độ ưu tiên cho interrupt 4 (0-15)

28

Page 29: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

VicIntEnable = (1 << 4) //Enable Vector interrupt 4

Vậy để cho tiện lợi thì ta sẽ xây dựng 1 hàm install_IRQ, hàm này có nhiệm vụ cài đặt các

interrupt , kích hoạt …

Hàm này sẽ nhận vào 3 thông số : IntNumber : vector interrupt số mấy (0-31),

*HanderAddr : là địa chỉ nơi cần nhảy đến khi interrupt xảy ra, và Priority là độ ưu tiên (0 –

15) . Hàm này sẽ trả về giá trị false nếu IntNumber >=32 và trả về true nếu cài đặt interrupt

thành công

Vậy giờ ta cần set interrupt timer thì ta chỉ cần gọi hàm

Install_IRQ(4, (void *) Timer_handler0, 15);

29

long install_irq( int IntNumber, void *HandlerAddr, int Priority ){ Long *vect_addr; long *vect_prio; VICIntEnClr = 1 << IntNumber; /* Disable Interrupt */ if ( IntNumber >= 32 ) return ( FALSE ); else {

/* find first un-assigned VIC address for the handler */

//xác định địa chỉ của thanh ghi Vic address cần thiết lậpvect_addr = (unsigned long *)(VIC_BASE_ADDR+ 0x100 +IntNumber*4);

// xác định địa chỉ của thanh ghi priority cần thiết lậpvect_prio = (unsigned long *)(VIC_BASE_ADDR+ 0x100 +IntNumber*4);*vect_addr = (unsigned long)HandlerAddr;/*set interrupt vector */*vect_prio = Priority;VICIntEnable = 1 << IntNumber; /* Enable Interrupt */return( TRUE );

}}

Page 30: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

CHƯƠNG 7. TIMER

7.1 Giới thiệu

Có 2 chức năng chính : ta có thể dùng làm đồng hồ để chạy thời gian, có thể đếm số sự kiện

(bên trong hay bên ngoài). Sau mỗi khoảng thời gian được quy định trước hay sau 1 số sự

kiện thì timer sẽ sinh ra 1 interrupt (chương trình sẽ nhảy đến địa chỉ chứa hàm interrupt và

thực thi hàm đó)

LPC2378 hỗ trợ 4 bộ timer 0,1,2,3 , tất cả đều 32 bit

7.2 Timer hoạt động như thế nào

Thanh ghi TC : là thanh ghi đếm (thời gian hay sự kiện). Cứ sau thời gian hay sự kiện thì

thanh ghi TC sẽ tăng lên. Tăng đến khi bằng giá trị trong thanh ghi MRn (n = 0-3) thì sẽ sinh

ra 1 interrupt. Interrupt này có thể reset TC, stop timer ... (Tùy vào chúng ta thiết lập giá trị là

bao nhiêu cho thanh ghi TnMCR)

30

Page 31: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

Nguyên lý hoạt động

Sơ đồ khối :

31

Page 32: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

Nhìn vào đây ta có thể thấy 1 cách tổng quát hoạt động của timer:

Đầu tiên clock PCLK đưa vào Prescale Counter (thanh ghi này sẽ điều khiển việc chia clock

PCLK) cụ thể là mỗi PCLK vào thì thanh ghi Prescale Counter sẽ tăng lên 1, nó tăng lên đến

khi nào bằng giá trị trong thanh ghi Precale Register thì thanh ghi TC sẽ tăng lên 1. Thanh ghi

TC cứ tăng lên như thế cho đến khi nào bằng với giá trị trong thanh ghi MRn thì sẽ sinh ra 1

interrupt.

Ngoài ra thì còn có thanh ghi TCR (để điều khiển có cho timer chạy hay không)

Và các thanh ghi Capter Register để load giá trị thanh ghi TC vào khi cần thiết.

7.3 Làm thế nào để thiết lập cho timer hoạt động.

a. Thiết lập mode (timer or counter) :

Ghi giá trị thích hợp lên thanh ghi TnCTCR (tham khảo trang 471 user manual)

Bit 1 :0 là để thiết lập conter/timer mode

Bit 3 :2 Thiết lập chân input cho timer (chỉ được sử dung trong counter mode)

Lưu ý: Nếu thiết lập mode này cho timer nào thì 3 bit của nó trong thanh ghi TnCCR phải

được lập trình là 0.

Bit 7:4 Không sử dụng (Lưu ý: cái nào không sử dụng cho nó bằng 0 hết)

b. Thiết lập thời gian hay số sự kiện để xảy ra 1 lần interrupt

Thiết lập thời gian sinh ra interrupt hay số sự kiện sinh ra interrupt

Ta sẽ ghi giá trị vào thanh ghi MR0 nếu ta dung timer0, MR1 nếu dung

timer1 … (Cứ sau mỗi khoảng thời gian hay số sự kiện này sẽ sinh ra 1

interrupt)

Ghi giá trị vào thanh ghi TMCR, đây là thanh ghi điều khiển việc sinh ra

interrupt.(Reset hay Stop TC) (Tham khảo trang 473)

32

Page 33: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

Nếu ở trên ta chọn Counter mode thì phải thiết lập giá trị cho thanh ghi TnCCR. Đây là thanh

ghi điều khiển, nó sẽ chọn cạnh lên hay cạnh xuống hay cả hai xảy ra ở chân input được coi là

1 sự kiện. Hay nói cách khác 1 sự kiện là 1 sự thay đổi ở ngõ vào input. (Xem chi tiết ở trang

475)

Ngoài ra ở chế độ counter mode có 4 thanh ghi CR0-3 (mỗi thanh ghi đước nối với 1 chân)

Khi sự kiện xảy ra ở chân này thì nó sẽ load giá trị của thanh ghi TC vào.

33

//Khởi động Vecter_interrupt Timer0VicVectAddr4 = (unsigned long) tên_hàm_interrupt;VicVectCntl4 = 15; //độ ưu tiên cho Add4 (0-15)VicIntEnable = (1<<4); //Enable Timer Interrupt//Khởi động các giá trị đầu cho timer0T0TCR = 2;// ResetT0PR = 0;T0MR0 = (Fpclk / 1000) -1 //delay 1ms, 1000 xung clk Pclk là 1 interruptT0IR = 0xFF; //reset interruptT0MCR = 0x04; //stop timerT0TCR = 0x01; //Enable timerWhile (T0TCR & 0x01); // delay time 1ms

Page 34: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

CHƯƠNG 8. UART

8.1 Giới thiệu

Trước hết UART là gì: Universal Asynchronous Receiver Transmitter

Dùng để truyền và nhận dữ liệu nối tiếp. LPC2378 hỗ trợ 4 bộ truyền nhận nối tiếp UART0,

UART1, UART2 và UART3 (truyền nhận 16 byte với cơ chế FIFO). Tiếp theo chúng ta sẽ

xem xét đến phần kiến trúc của UART

Kiến trúc :

Mọi sự truyền nhận thông tin giữa CPU và UART đều thông qua APB

Việc nhận tín hiệu của UART : thông qua chân RXD và đi vào thanh ghi dịch

(UnRSR) sau đó dữ liệu sẽ được chuyển qua thanh ghi chứa dữ liệu (UART RX

Buffer Register FIFO) và dữ liệu sẽ ở đây chờ CPU tới đọc.

Việc truyền tín hiệu của UART : cũng tương tự như thế, CPU truyền dữ liệu vào trong

buffer ở trong thanh ghi UnTHR (UART TX Holding Register FIFO), sau đó dữ liệu

từ thanh ghi này được chuyển sang thanh ghi dịch (UnTSR) và từ từ truyền ra ngoài

thông qua chân TXD

Về tốc độ truyền dữ liệu UART cho phép cho thiết lập tốc độ baud thông qua các

thanh ghi. Và ta phải tự tìm ra tốc độ baud nào hợp lý nhất (tức xác suất lỗi trên đường

truyền ít nhất) Vấn đề này sẽ được thảo luận trong phần sau.

Các sự thiết lập interrupt ở trong thanh ghi UnIER và UnIIR

Thông tin từ việc truyền nhận (2 chân TX và RX) được lưu trong thanh ghi UnLSR.

Thông tin điều khiển nằm ở trong thanh ghi UnLCR

34

Page 35: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

Sơ đồ khối của UART

UART giao tiếp với bên ngoài qua 2 chân TXD và RXD (mũi tên màu đỏ ở trên hình)

35

Page 36: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

Nhìn vào sơ đồ khối ta có thể thấy UART gồm có 4 bộ chính :

Bộ Interrupt : điều khiển việc interrupt, lưu trữ status và khi nào có interrupt sẽ đẩy ra

chân UnINTR

Bộ điều khiển Clock UnBRG điều khiển việc sinh ra CLK từ 2 dữ liệu vào là UnDLL

và UnDLM

Bộ truyền dữ liệu : UnTX có 2 thanh ghi : thanh ghi chứa dữ liệu và thanh ghi truyền

serial ra ngoài thông qua chân TXD

Bộ nhận dữ liệu : UnRX gồm có 2 thanh ghi là thanh ghi chứa dữ liệu và thanh ghi

truyền serial. Dữ liệu nhận vào ở chân RXD sẽ đẩy vào thanh ghi truyền serial rồi đưa

vào thanh ghi nhận dữ liệu.

Phần trên là sơ lược khái niệm về UART, bây giờ ta bắt đầu vào tìm hiểu các thanh ghi của

UART, cách thiết lập các thanh ghi để UART hoạt động.

8.2 Các loại thanh ghi UART

(tham khảo trang 330 user manual)

UnRBR (UART Receiver Buffer Register) là thanh ghi chỉ đọc (read only, chứa 8 bit

data) chứa thong tin cũ nhất có thể được đọc bới CPU. Để truy xuất được vào thanh

ghi này thì bit DLAB trong thanh ghi LCR phải là 0

UnTHR (UART Transmit Holding Register) cũng tương tự thanh ghi UnRBR nhưng

nó dùng để truyền dữ liệu nên nó sẽ là thanh ghi chứa dữ liệu mới nhất được truyền.

UnTHR là thanh ghi chỉ ghi (write only, 8 bit data) DLAB phải là 0 khi ta truy xuất

vào thanh ghi này.

UnIER (UART Interrupt Enable Register) được sử dụng để kích hoạt 3 interrupt (RBR

interrupt, THRE interrupt, RX Line Status Interrupt) và cho phép auto-baud rate và

time out. Chi tiết tham khảo trang 333

36

Page 37: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

UnIIR (UART Interrupt Identification Register) cung cấp cho chúng ta đó là interrupt

gì và độ ưu tiên của nó như thế nào. Như có interrupt đang đợi không? Interrupt đó là

gì? Có chế độ auto-baud không? Đã kết thúc chưa? Có bị time out không? … (Tham

khảo trang 334)

Về độ ưu tiên interrupt thì có 3 độ ưu tiên:

Receive Line Status (RLS) (ưu tiên cao nhất)

Receive Data available (RDA) (ưu tiên mức 2)

Character Time out Indicator (CTI) (ưu tiên mức 2)

THRE interrupt

UnFCR (UART FIFO Control Register) thanh ghi điều khiển

UnLCR (UART Line Control Register) Thiết lập các định dạng để truyền và nhận

UnLSR (UART Line Status Register) chứa thong tin về việc truyền nhận (lỗi, thanh

ghi chứa dữ liệu đang rỗng …)

Và còn vài thanh ghi cho các mục đích khác

8.3 Khởi động UART

Để khởi động cho UART đầu tiên ta phải thiết lập chân TXD và RXD cho nó

UART0 (có chân TXD0 là P0.2 và RXD0 là P0.3)

UART1 (có chân TXD1 là P0.15 và RXD1 là P0.16)

UART2 (có chân TXD2 là P0.2 và RXD2 là P0.3)

UART3 (có chân TXD3 là P0.0 hay P4.28 và RXD3 là P0.1 hay P4.29)

Như ta đã biết 1 chân có thể có nhiều chức năng và muốn nó làm chức năng gì ta phải thiết

lập cho nó thông qua thanh ghi PINSEL (chi tiết tham khảo trang 115)

37

Page 38: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

VD : ta thiết lập cho UART0 thì dùng câu lệnh sau :

PINSEL0 |= 0x00000050; /* RxD0 and TxD0 */

PINSEL0 &= ~0xA0;

Tiếp theo thiết lập thanh ghi điều khiển UnLCR (để tạo format cho việc truyền nhận)

(Như có sử dụng Parity checking không? Sử dụng bao nhiêu bit Stop bit …)

Set tốc độ baud

Các thanh ghi dùng để set tốc độ baud: UnACR, UnFDR,UnDLL, UnDLM

UnACR để thiết lập mode (Có 2 mode: mode 0 và mode 1), khởi động auto baud, kết thúc

auto baud

Mode 0: Baud rate được tính toán dựa trên 2 cạnh xuống của chân RX (1 cạnh xuống

là của Start bit và 1 cạnh xuống là của tín hiệu dữ liệu)

38

Page 39: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

Mode 1: Baud rate được tính toán giữa cạnh xuống và cạnh lên của Start bit (nó chính

là độ dài của Start bit)

Auto baud có thể sinh ra 2 interupt: UnIIR ABTOInt interrupt (khi counter overflow)

và UnABEOInt interrupt khi mà auto baud thành công

Baud rate phải nằm trong khoảng này

Công thức để tính tốc độ baud:

Giá trị đo lường trước sự sinh ra baud rate

MULVAL, DIVADDVAL chứa trong thanh ghi UnFDR

Công thức tính tốc độ baud:

39

Page 40: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

Mặc dù có công thức để tính nhưng tốc độ baud vẫn không phải là tốc độ truyền sinh ra ít lỗi

nhất. Bây giờ ta sẽ xem xét 1 giải thuật tính toán để sinh ra được baud rate hợp lý nhất.

Sơ đồ flow chart

40

Page 41: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

Cài đặt hàm interrupt:

Xem lại phần thiết lập các interrupt để biết rõ hơn

Công việc cuối cùng là kích hoạt cho UART bắt đầu hoạt động:

VD: cho UART0

#define IER_RBR 0x01

#define IER_THRE 0x02

#define IER_RLS 0x04

U0IER = IER_RBR | IER_THRE | IER_RLS;

41

Page 42: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

Gửi dữ liệu:

Kiểm tra cờ cho phép gửi nếu cho phép thì đưa 1 byte dữ liệu vào thanh ghi

UnTHR, tắt cờ cho phép gửi.

Khi nào gửi xong thì cờ sẽ tự động bật lên (trong làm interrupt)

Tiếp tục gửi cho đến khi hết dữ liệu

Nhận dữ liệu: Được thực hiện luôn trong hàm interrupt

Kiểm tra thanh ghi UnLSR, nếu bit 0 Receive Data Ready RDR là 1 tức là đang

có dữ liệu

Đọc thanh UnRBR để lấy dữ liệu (Khi ta đọc thanh ghi này thì cờ interrupt

trong UnLSR tự động bị xóa đi)

VD khởi động UART0

42

#define IER_RBR 0x01#define IER_THRE 0x02#define IER_RLS 0x04

PINSEL0 |= 0x00000050; /*set RxD0 and TxD0 */PINSEL0 &= ~0xA0;

U0LCR = 0x83; /* 8 bits, no Parity, 1 Stop bit */ Fdiv = ( Fpclk / 16 ) / baudrate ; /*baud rate */ U0DLM = Fdiv / 256; U0DLL = Fdiv % 256;

U0LCR = 0x03; /* DLAB = 0 */ U0FCR = 0x07; /*Enable and reset TX and RX FIFO. */

install_irq( 6, (void *)UART0Handler, 1 ); U0IER = IER_RBR | IER_THRE | IER_RLS; /* Enable

UART0 interrupt */

Page 43: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

CHƯƠNG 9. I2C

9.1. Giới thiệu.

I2C là giao thức để kết nối với các thiết bị bên ngoài, như LCD, bộ nhớ ngoài, ...

Giao tiếp chuẩn I2C, có thể thiết lập ở chế độ Master, Slave hay Master/Slave.

Cơ chế trọng tài, cho phép truyền nhận dữ liệu liên tục mà không bị gián đoạn dữ liệu.

Xung có thể thay đổi phù hợp với tốc độ truyền.

Truyền nhận 2 chiều giữa Master và Slave.

Đồng bộ bằng xung tuần tự cho phép nhiều thiết bị với tốc độ truyền nhận khác nhau

giao tiếp trên cùng một kênh.

9.2 Nguyên lý hoạt động của I2C

Có 2 loại dữ liệu được chấp nhận trên kênh truyền I2C.

* Dữ liệu được gửi từ Master đến Slave. Byte đầu tiên là địa chỉ của Slave. Sau đó là chuỗi

byte dữ liệu cần truyền. Slave cần gửi trả về ACK đối với mỗi byte đã nhận.

* Dữ liệu gửi từ Slave đến Master. Slave nhận byte đầu tiên, cũng là địa chỉ của Slave, được

gửi bởi Master. Slave trả về ACK. Sau đó Salve gửi chuỗi byte dữ liệu cần truyền. Master cần

gửi trả về ACK đối với mỗi byte đã nhận, ngoại trừ byte dữ liệu cuối cùng. Sau khi nhận tất

cả các byte dữ liệu, Master sẽ gửi NACK. Master cũng là thiết bị tạo ra tất cả các xung đồng

bộ và tín hiệu START / STOP. Trước khi tín hiệu START (cũng là tín hiệu bắt đầu của một

quá trình chuyển dữ liệu tuầu tự khác), kênh truyền I2C sẽ vẫn được tích cực.

Giao thức I2C hướng đến byte, và hoạt động ở 4 chế độ : Master truyền, Master nhận, Slave

truyền và Slave nhận. LPC2300 có 3 giao tiếp I2C, riêng bộ I2C[0] có thể điều khiển tắt thiết

bị LPC2300 mà không ảnh hưởng đến các thiết bị còn lại trên kênh truyền.

43

Page 44: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

9.3 Kết nối vật lý

44

Page 45: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

9.4 Sơ đồ khối của I2C.

45

Page 46: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

9.4.1 Bộ lọc ngõ vào và điều chỉnh ngõ ra.

_ Những tín hiệu ở ngõ vào được đồng bộ với xung nội bộ, và các gai tín hiệu ngắn hơn 3

xung đồng hồ sẽ được loại bỏ.

_ Ngõ ra cho I2C cũng được thiết kế đặc biệt để đáp ứng đặc tả của I2C.

9.4.2 Thanh ghi địa chỉ I2ADDR

Thanh ghi này sẽ chứa 7 bit địa chỉ và được dùng trong trường hợp thiết bị là Slave (truyền

hay nhận). Bit cuối cùng (LSB) được dùng để nhận dạng lời gọi địa chỉ chung (0x00).

9.4.3 Bộ so sánh.

Bộ so sánh sẽ phát hiện và yêu cầu ngắt khi 7 bits địa chỉ Slave trùng với địa chỉ Slave của

chính nó (7 bits cao trong thanh ghi I2ADR). Bộ so sánh cũng phát hiện trường hợp byte nhận

đầu tiên là lời gọi địa chỉ tổng quát (0x00). Khi có yêu cầu ngắt, các bit trạng thái cũng được

gán giá trị.

9.4.4 Thanh ghi dịch I2DAT.

Thanh ghi 8 bits này chứa một byte dữ liệu cần truyền hay vừa nhận được. Dữ liệu trong

I2DAT luôn dịch từ phải sang trái (bit MSB được dịch đầu tiên). Thanh ghi I2DAT luôn chứa

giá trị byte cuối cùng xuất hiện trên kênh truyền.

46

Page 47: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

9.4.5 Xung đồng bộ.

9.4.6 Bộ tạo xung tuần tự,

Bộ tạo xung này hoạt động khi thiết bị đóng vai trò Master, và được tắt khi thiết bị đóng vai

trò Slave. Tần số và tỉ lệ xung tích cực có thể lập trình thông qua việc gán giá trị cho 2 thanh

ghi là I2CSCLL và I2CSCLH.

9.4.7 Điều khiển và định thời.

Bộ điều khiển/ định thời có chức năng tạo ra xung để dịch thanh ghi I2DAT, kích khởi bộ so

sánh, tạo ra hay phát hiện tín hiệu START/ STOP, nhận và truyền bit ACK, điều khiển chế độ

Master hay Slave, phát hiện những điều kiện để yêu cầu ngắt và theo dõi tình trạng của kênh

truyền I2C.

9.4.8 Thanh ghi điều khiển I2CONSET và I2CONCLR

Các thanh ghi này chứa những bit mà giá trị của chúng quyết định chức năng của các khối

I2C, bắt đầu, khởi tạo hay kết thúc việc truyền tín hiệu tuần tự. Các thanh ghi này cũng quyết

định tốc độ truyền, phát hiện địa chỉ và tín hiện ACK.

47

Page 48: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

9.5 Những thanh ghi quan trọng.

48

Page 49: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

9.6 Các chế độ hoạt động của I2C

9.6.1 Master truyền.

Khi đó Master ở chế độ truyền và Slave ở chế độ nhận. Thanh ghi I2CONSET phải được thiết

lập như sau. I2EN phải được gán = 1 để kích hoạt chức năng I2C. Nếu bit AA = 0 thì giao tiếp

I2C sẽ nhận ra bất cứ địa chỉ nào nếu có một thiết bị khác đang là Master trên kênh truyền.

Trong chế độ này, bit R/W nên là 0, tức là “ghi”. Byte đầu tiên gửi đi chứ địa chỉ của thiết bị

nhận (7 bit) và bit R/W quyết định chiều của dữ liệu. Giao tiếp I2C sẽ khởi động vào chế độ

Master truyền khi chương trình phần mềm gán STA = 1. Giao tiếp I2C sẽ gửi tín hiệu START

khi kênh truyền rãnh. Sau khi START được truyền, bit SI sẽ được gán = 1, và giá trị của thanh

ghi I2STAT là 0x08. Byte gồm địa chỉ của Slave và bit R/W được truyền vào thanh ghi

I2DAT, sau đó bit SI được xoá = 0. Bit SI được xoá bằng cách gán 1 vào bit SIC trong thanh

ghi I2CONCLR.

Sau khi truyền byte chứa địa chỉ Slave và bit R/W, và ACK được trả về, bit SI lại được gán =

1, thanh ghi I2STAT lúc này có thể mang giá trị 0x18, 0x20 hay 0x38 (ở chế độ Master);

0x66, 0x78 hay 0xB0 (ở chế độ Slave).

49

Page 50: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

9.6.2 Master nhận.

Ở chế độ này, dữ liệu được Slave gửi về. Quá trình truyền nhận tương tự ở chế độ Master

truyền. Tuy nhiên, bit R/W được gán = 1, tức là “đọc”. Khi địa chỉ của Slave và bit R/W được

gửi, ACK sẽ được trả về, bit SI lại được gán = 1, thanh ghi I2STAT lúc này có thể mang giá

trị 0x40, 0x48 hay 0x38 (ở chế độ Master); 0x68, 0x78 hay 0xB0 (ở chế độ Slave).

Nếu tín hiệu START được khởi tạo một lần nữa, giao tiếp I2C của LPC2300 có thể trở về chế

độ Master truyền.

50

Page 51: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

9.6.3 Chế độ Slave nhận

Dữ liệu sẽ được gửi từ Master đến, để thiết lập chế độ này, thanh ghi I2ADR và I2CONSET

phải được thiết lập như sau:

Sau khi các thanh ghi I2ADR và I2CONSET được thiết lập, giao tiếp I2C sẽ chờ đến khi nó

được gán địa chỉ. Nếu bit R/W là 0, giao tiếp này là Slave nhận, ngược lại, nó sẽ trở thành

Slave truyền. Sau khi byte chứa địa chỉ Slave và bit R/W được nhận, SI được gán = 1 và

I2STAT được xác lập. Thanh ghi này có thể đọc để nhận giá trị thể hiện tình trạng của kênh

truyền.

51

Page 52: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

9.6.4 Chế độ Slave truyền.

Ở chế độ này, bit R/W có giá trị 1. Phần cứng sẽ tự động nhận dạng địa chỉ của chính nó. Khi

địa chỉ này được phát hiện, một ngắt sẽ được yêu cầu. Nếu vi xử lý yêu cầu vào chế độ Master

thì phải chờ cho đến khi kênh truyền rãnh. Và nếu cơ chế trọng tài bị mất đi thì giao tiếp I2C

lập tức chuyển thành chế độ Slave.

52

Page 53: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

9.7 Một số ví dụ

9.7.1 Tinh chỉnh tần số và tỉ lệ xung tích cực.

Tần số của kênh I2C được xác định bởi công thức.

Giả sử fPCLK = 20 MHz, sau các lệnh định nghĩ hằng, ta sẽ có tần số của kênh truyền là 125

KHz, tỉ lệ xung tích cực là 60%.

#define I2SCLH_SCLH 0x00000060 /* I2C SCL Duty Cycle High Reg */

#define I2SCLL_SCLL 0x00000040 /* I2C SCL Duty Cycle Low Reg */

53

Page 54: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

Một số ví dụ khác để tính toán tần số kênh truyền

9.7.2 Định nghĩ chân tín hiệu.

Để sử dụng được giao tiếp I2C, ta phải định nghĩ các chân tín hiệu như sau. Ở đây áp dụng

cho chân PIO0.27 và PIO0.28 trở thành I2C0 (SDA and SCK).

PINSEL1 &= ~0x03C00000;

PINSEL1 |= 0x01400000;

9.7.3 Khởi động I2C.

DWORD I2CInit( DWORD I2cMode )

{

PCONP |= (1 << 19);

PINSEL1 &= ~0x03C00000;

PINSEL1 |= 0x01400000;

/*--- Clear flags ---*/

I20CONCLR = I2CONCLR_AAC | I2CONCLR_SIC | I2CONCLR_STAC | I2CONCLR_I2ENC;

/*--- Reset registers ---*/

I20SCLL = I2SCLL_SCLL;

54

Page 55: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

I20SCLH = I2SCLH_SCLH;

if ( I2cMode == I2CSLAVE )

{

I20ADR = LM75_ADDR;

}

/* Install interrupt handler */

if ( install_irq( I2C0_INT, (void *)I2C0MasterHandler, HIGHEST_PRIORITY ) == FALSE )

{

return( FALSE );

}

I20CONSET = I2CONSET_I2EN;

return( TRUE );

}

55

Page 56: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

Phần phụ lục

Điều khiển Led

Trên board MCB2300 gồm có 8 con led nhỏ: Ở chân 16 ..23

Muốn sử dụng nó thì trước hét ta phải set chức năng cho các chân đó là output, rồi reset

các giá trị nó về 0. Ở đây ta định nghĩa 2 hàm, 1 hàm bật led, 1 hàm tắt led

Điều khiển màn hình LCD

Việc điều khiển LCD khá phức tạp, nhưng npx đã xây dựng sẵn cho ta các hàm hỗ trợ để có

thể xuất ra LCD 1 cách dễ dàng. Có thể down trên trang nxp hay copy trong cd (đính kèm)

file lcdport.h và lcdport.c. Xem thêm ví dụ về chương trình chạy đồng hồ hiển thị LCD trong

cd đính kèm.

Khi muốn xuất 1 chuỗi ra LCD thì chỉ cần gọi hàm LCD_puts(char *s);

LCD trên board được phân ra làm 2 hàng, và 16 cột muốn di chuyển thì ta sử dụng hàm

LCD_gotoxy(int x,int y);

56

led::led() {FIO2DIR = 0x000000FF; /* P1.16..23 defined as

Outputs */FIO2CLR = 0x000000FF; /* turn off all the LEDs

*/}void led::turn_on(unsigned char x) { FIO2SET = x;}void led::turn_off(unsigned char x) { FIO2CLR = x;}

VD: LCD_puts(“Do an mon hoc”)

VD: LCD_gotoxy(1,2); // di chuyển đến hàng 2 cột 3 (do

chỉ số ở đây bắt đầu bằng 0)

Page 57: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

Tập lệnh ARM7

I. ARM (Advanced RISC Machine)

ARM được phát triển tại Acron Computer Limited tại Cambridge England từ năm 1983

đến 1985.

Risc Acrchitecture: Berkeley đã cho ra 1 tập lệnh thu gọn cho kiến trúc máy tính gọi là

Bekeley RISC 1. Đặc điểm của nó là:

Câu lệnh cố định là 32 bit

Load-Store là những lệnh xử lý dữ liệu trên thanh ghi và nó được phân biệt với truy

xuất vào bộ nhớ

Câu lệnh 3 địa chỉ

Programmer’s model

ARM processor có cấu trúc là 32 bit nhưng nhân của ARM hiện thực theo 2 tập lệnh

khác nhau:

32 bit ARM instruction set

16 bit Thumb instruction set

Kiểu dữ liệu: cung cấp 6 kiểu dữ liệu

8 bit có dấu và không dấu

16 bit có dấu và không dấu

32 bit có dấu và không dấu

ARM có tổng cộng 37 thanh ghi tất cả có chiều dài 32 bits

57

Page 58: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

1 chứa trạng thái lập trình hiện tại

5 chứa trạng thái lập trình được save

31 thanh ghi được sử dụng cho mục đích chung khác

ARM có 7 mode hoạt động: Ở mỗi mode đều có thể thấy các thanh ghi từ r0 – r15.

Ngoài ra tùy từng mode mà thấy thêm được 1 số thanh ghi khác.

CPSR: thanh ghi chứa trạng thái lập trình hiện tại

Condition code flag (chỉ sử trong chế độ ARM state)

N : Negative result form ALU

Z: Zero result from ALU (cờ zero)

C: ALU Operation carried out (cờ nhớ)

58

Page 59: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

V: ALU operation overflowed (cờ tràn)

Interrupt disable bits

I = 1 disable IRQ

F =1 disable FIQ

T bit : chuyển trạng thái giữa ARM standard (câu lệnh 32 bit) và Thumb (câu lệnh 16

bit)

T = 0: ARM state

T = 1: Thumb state

59

Page 60: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

Mode bit (5 bit) : có tất cả 7 mode

II. ARM Thumb

Câu lệnh 16 bit tiết kiệm 35-40% bộ nhớ so với câu lệnh 32 bit

Mục đích giảm giá thành sản phẩm nhưng tăng thời gian xử lý. Vì phải qua quá trình

giải mã câu lệnh 16 bit thành 32 bit

Rất nhiều Thumb được xử lý lệnh sử dụng format 2 địa chỉ

Phần lớn lệnh Thumb được thực thi không có trường điều kiện (N,C,Z,V)

Sử dụng T bit (bit thứ 5 của CPSR) với câu lệnh BX để thay đổi (ARM standard và

ARM Thumb)

60

Page 61: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

Thum instruction được đặt trong pipeline, nó giải mã câu lệnh 16 bit thành 32 bit rồi đưa

vào instruction decoder và data bus

Ví dụ:

Add Rd, # Constant

61

Page 62: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

62

Page 63: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

Lower register: được sử dụng là thanh ghi trực tiếp, có toàn quyền truy xuất vào các

thanh ghi này.

Higher register:

R8-R12 chỉ được truy xuât thông qua 1 số câu lệnh của assembler cụ thể là : MOV,

ADD, BX, CMP dụng thông qua câu lệnh của assembler (như ADD, Compare, Mov)

SP, LR và PC : bị hạn chế truy xuất

CPSR: chỉ có thể truy xuất gián tiếp

SPSR: không cho phép truy xuất

63

Page 64: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

Có 6 mod sử dụng: Ở từng mod có thể sử dụng được các thanh ghi như trên hình vẽ, và

mod nào có thêm banked register thì chỉ khi ở mod đó mới có thể sử dụng thêm thanh ghi đó.

19 Format sử dụng trong ARM Thumb

64

Page 65: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

Chú thích:

Rd: destination register

Rs: source register

Rn: Register

Op: Opcode (ghi mã lệnh)

65

Page 66: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

Offset: Immediate value

L : Load/Store Flag (0: Lưu vào bộ nhớ, 1: Load từ bộ nhớ)

B: Byte or Word flag (0: truyền theo word, 1: truyền theo byte)

S: sign extention flag (0: không dấu, 1: có dấu)

H: low/high offset bit (0: offset low, 1: offset high)

66

Page 67: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

1. Move shifted register (LSL (shift trái),RSL (shift phải),ASL (shift đại số) )

VD: LSL R1,R2,#4 dịch trái R2 4 bit rồi lưu vào R1

2. Add/sub (ADD, SUB)

VD: Add R1,R2,R3 => R1 = R2+R3

3. Move/compare/add/subtract immediate (MOV, CMP, ADD, SUB)

VD: MOV R0, #128 => R0 = 128

4. ALU operation : có 16 lệnh khác nhau như bảng dưới

67

Page 68: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

5. Hi register operations/ branch exchange:

Để vào ARM mode thì xóa bit Rs, còn để vào Thumb mode thì set bị Rs

68

Page 69: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

6. Load/store với register offset (LDR, LDRB, STR, STRB)

VD: STR R1, [R2,R3] => lưu giá trị chứa trong R1 vào ô nhớ (R2+R3)

7. Load/Stored sign-extended byte/ halfword (LDSB, LDSH, LDRH, STRH)

69

Page 70: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

8. Load/Stored với immediate offset (LDR, LDRB, STR, STRB)

9. Load/Stored halfword (LDRH, STRH)

10. SP-relative load / Store (LDR, STR)

70

Page 71: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

11. Load Address

12. Add offset to Stack Pointer

13. Push/pop

VD: STMDB R13!,{R0-R1} => Add R0 và R1 vào stack

14. Multiple load/store (LDMIA, STMIA)

71

0 : PC1 : SP

Page 72: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

VD: STMIA R13!, {R0-R1} => lưu trữ R0, R1 vào bộ nhớ bắt đầu từ địa chỉ chứa trong

R13

15. Lệnh rẽ nhánh có điều kiện

BEQ, BNE, BCS, BCC, BMI,BPL, BVS, BHI, BLS, BGE, BLT, BGT, BLE

72

Page 73: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

3. ARM Instruction Set

a. Tổng quan tập lệnh trong kiến trúc ARM

Từ mã Lệnh Giải thích lệnh Mô tảTham

khảo

ADC Add with Carry Phép cộng, kể cả phần dư Rd := Rn + Op2 + Carry 4.5

ADD Add Phép cộng Rd := Rn + Op2 4.5

AND AND Phép AND bit Rd := Rn AND Op2 4.5

BIC Bit Clear Rd := Rn AND NOT Op2 4.5

BL Branch witn Link R14 := R15, R15 := address 4.4

BX Branch and ExchangeR15 := Rn,

T bit : = Rn[0]4.3

CDPCoprocesor Data

ProcessingCoprocessor-specific 4.14

CMN Compare Negative CPSR flags := Rn + Op2 4.5

CMP Compare CPRS flags := Rn – Op2 4.5

EOR Exclusive ORRd := (Rn AND NOT Op2) OR

(Op2 AND NOT Rn)4.5

LDCLoad Coprocessor from

MemoryCoprocessor load 4.15

LDM Load Multi Registers Stack manipulation (Pop) 4.11

LDRLoad Register from

Memoryd := (address) 4.9,10

MRCMove CPU Register to

Coprocessor RegistercRn := rRn {<op> cRm} 4.16

MRSMove PSR status/ flags to

registerRn := PSR 4.6

MUL Multiply Rd := Rm * Rs 4.7,8

MVN Move Negative Register Rd := 0xFFFF FFFF EOR Op2 4.5

73

Page 74: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

ORR Or Rd := Rn OR Op2 4.5

RSB Reverse Subtract Rd := Op2 – Rn 4.5

RSCReverse Subtract with

CarryRd := Op2 – Rn – 1 + Carry 4.5

SBC Subtract with Carry Rd := Rn – Op2 – 1 + Carry 4.5

STCStore Coprocessor

Register to Memoryaddress : = CRn 4.15

STM Store Multiple Stack manipulation (Push) 4.11

STR Store Register to Memomy <address> := Rd 4.9,10

SUB Subtract Rd := Rn – Op2 4.5

SWI Software Interrupt OS call 4.13

SWPSwap Register with

MemoryRd := [Rn], [Rn] := Rm 4.12

TEQ Test Bitwise Equality CPSR flags := Rn EOR Op2 4.5

TST Test Bits CPRS flags := Rn AND Op2 4.5

b, Trường điều kiện

Trong chế độ hoạt động ARM, mọi dòng lệnh đều được thực thi có điều kiện, căn cứ vào trạng thái của

mã điều kiện CPSR và trường điều kiện của dòng lệnh. Trường điều kiện này (bit 31:28) xác lập một trạng thái

điều kiện để một dòng lệnh có thể thực thi. Nếu trạng thái của cờ C, N, Z và V đáp ứng đủ điều kiện, dòng lệnh

sẽ được thực thi. Ngược lại, nếu trạng thái các cờ trên vi phạm vào điều kiện thì câu lệnh sẽ được bỏ qua.

Trường điều kiện có thể nhận 16 giá trị, mỗi giá trị được kí hiệu bằng tiếp đầu ngữ gồm 2 kí tự gợi nhớ.

Ví dụ, lệnh BEQ – Branch if Equal chỉ được thực thi nếu cờ Z được thiết lập ngay tại thời điểm lệnh ngày được

gọi.

Trên thực tế, giá trị 1111b không được sử dụng. Đối với các lệnh không yêu cầu điều kiện, trường điều

kiện luôn được gán giá trị AL – “Always”, lúc đấy, lệnh này sẽ luôn được thực thi bất kể giá trị của mã điều kiện

CPSR là bao nhiêu. Sau đây là bảng liệt kê 15 giá trị của trường điều kiện.

Code Suffix Flags

Meaning

0000 EQ Z set equal

74

Page 75: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

0001 NE Z clear not equal

0010 CS C set unsigned higher or same

0011 CC C clear unsigned lower

0100 MI N set negative

0101 PL N clear positive or zero

0110 VS V set overflow

0111 VC V clear no overflow

1000 HI C set and Z clear unsigned higher

1001 LS C clear or Z set unsigned lower or same

1010 GE N equals V greater or equal

1011 LT N not equal to V less than

1100 GT Z clear AND (N equals V) greater than

1101 LE Z set OR (N not equal to V) less than or equal

1110 AL (ignored) always

c, Branch and exchange

Câu lệnh này chỉ thực thi khi điều kiện thoả mãn (tham khảo 4.2). Câu lệnh này sao

chép nội dung của thanh ghi Rn vào PC.

75

Page 76: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

d, Branch and Branch with Link (B, BL)

76

Page 77: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

e, lệnh tính toán số học / luận lý

Câu lệnh này sẽ trả về một kết quả tuỳ vào phép tính số học hoặc luận lý cụ thể. Toán

hạng đầu tiên là một thanh ghi Rn, toán hạng thứ hai (nếu có) có thể là một thanh ghi dịch Rm

77

Page 78: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

hoặc một giá trị 8-bit nhất thời, điều này quy định bởi bit I (bit 25) trong câu lệnh. Một số

toán tử, gồm TST, TEQ, CMP, CMN, không ghi kết quả ra thanh ghi Rd, mà chỉ dùng để

kiểm tra hoặc thay đổi các thanh ghi điều kiện.

78

Page 79: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

Các phép tính được liệt kê dưới đây:

Các toán tử số học thực hiện trên các toán hạng 32-bit (số không dấu, hay số bù 2 có

dấu)

Nếu bit S được thiết lập, và Rd không phải là R15, thì bit cờ V sẽ được thiết lập nếu xảy

ra tràn số. Bit cờ C sẽ chứa giá trị nhớ của phép tính. Bit cờ Z được thiết lập chỉ khi và chỉ khi

kết quả của phép tính là 0. Và cuối cùng, bit cờ N nhận giá trị của bit thứ 31, để nhận dạng kết

quả âm trong trường hợp tính toán trên số bù 2 có dấu.

79

Page 80: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

Khi toán hạng thứ 2 được chỉ định là một thanh ghi dịch, hoạt động dịch thanh ghi được

điều khiển bởi phần “Shift” trong câu lệnh. Phần “Shift” này sẽ xác định hành động dịch: dịch

luận lý sang trái hay phải, dịch số học sang phải hay đảo sang phải. Số bit được dịch cũng

được định rõ.

Số lượng bit được dịch chỉ rõ trong câu lệnh, bao gồm dãy 5-bit, có thể nhận giá trị từ 0

đến 31. Đối với phép dịch trái hay phải, số 0 sẽ được điền vào những vị trí không có ánh xạ.

Các bit bị thừa ra cũng bị xoá bỏ, tuy nhiên, bit thừa ra liền kề dãy bit được giữ lại và chuyển

vào bit cờ C. Các ví dụ cụ thể được cho dưới đây :

80

Page 81: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

81

Page 82: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

f, Thanh ghi chỉ định số bit được dịch

Chỉ có byte trọng số thấp nhất trong nội dung của các thanh ghi là được dùng để chỉ

định cụ thể số lượng bit được dịch. Thanh ghi ở đây có thể là mọi thanh ghi chứ không chỉ là

R15.

Nếu giá trị byte này là 0, nội dung thanh ghi Rm không thay đổi và được dùng như là

một toán hạng thứ 2, và giá trị hiện tai của bit cờ C được xem như giá trị nhớ.

Nếu giá trị byte này từ 1 đến 31, nội dung thanh ghi Rm được dịch theo định dạng của

câu lệnh.

82

Page 83: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

Nếu giá trị byte này lớn hơn 31, kết quả sẽ là một mở rộng luận lý, được mô tả chi tiết

như sau:

a, LSL by 32 tạo kết quả 0, carry out = Rm[0]

b, LSL by >32 tạo kết quả 0, carry out = 0

c, LSR by 32 tạo kết quả 0, carry out = Rm[31]

d, LSR by >32 tạo kết quả 0, carry out = 0

e, ASR by >31 tạo kết quả được chèn thên giá trị Rm[31], carry out = Rm[31]

f, ROR by 32 tạo kết quả = Rm, carry out = Rm[31]

g, ROR by n>32 tạo ra kết quả như là ROR by (n MOD 32)

g, Ghi vào thanh ghi R15

Khi thanh ghi Rd không phải là R15, mã điều kiện CPSR có thể cập nhật lại từ cờ ALU.

Khi Rd là R15 và bit cờ S không được thiết lập, kết quả của phép tính được cất vào

thanh ghi R15 và cờ CPSR không bị tác động.

Khi Rd là R15 và bit cờ S được thiết lập, kết quả của phép tính được cất vào thanh ghi

R15 và CPRS bị thay đổi dựa vào mode thực thi. Dạng thực thi này không nên dùng ở chế độ

User.

h, Dùng thanh ghi R15 như là một toán hạng

Khi thanh ghi R15 (chính là PC) được sử dụng như một toán hạng trong thì nó được sử

dụng trực tiếp.

Giá trị của PC là địa chỉ của câu lệnh, và được chèn thêm 8 hoặc 12 bytes.

83

Page 84: Tong Quan Vi Xu Ly Lpc2378 Huong Dan Su Dung Board Mcb2300

CHƯƠNG 10. KẾT LUẬN

10.1 Tài liệu tham khảo

[1] Trang WEB www.nxp.com

[2] Trang WEB www.keil.com

[3] User manual LPC23xx

[4] Đĩa cd LPC_3_2007

10.2 Kết luận

Công việc đã làm được:

Nghiên cứu kiến trúc và tập lệnh ARM7

Nghiên cứu và sử dụng board MCB2300

Nghiên cứu 1 số chức năng cơ bản của LPC2378

Interrupt

Timer

UART

I2C

Chương trình demo:

Chạy led

Đồng hồ hiển thị LCD

Truyền serial máy tính và LPC2378

84