shusi_kute

New Member

Download miễn phí Đề tài Tổng quan vi xử lý lpc2378 hướng dẫn sử dụng board mcb2300





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
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.
 



Để tải bản Đầy Đủ của tài liệu, xin Trả lời bài viết này, Mods sẽ gửi Link download cho bạn sớm nhất qua hòm tin nhắn.
Ai cần download tài liệu gì mà không tìm thấy ở đây, thì đăng yêu cầu down tại đây nhé:
Nhận download tài liệu miễn phí

Tóm tắt nội dung tài liệu:

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
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 hay 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
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
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 :
Bit nào bằng 0 : không có interrupt cả hardware lẫn software cho vector interrupt đó
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
Bit bằng 0: IRQ
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)
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
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)
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
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ập
vect_addr = (unsigned long *)(VIC_BASE_ADDR+ 0x100 +IntNumber*4);
// xác định địa chỉ của thanh ghi priority cần thiết lập
vect_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 );
}
}
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);
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)
Nguyên lý hoạt động
Sơ đồ khối :
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.
Thiết lập mode (timer or counter) :
Ghi giá trị thích hợp lên thanh ghi TnCTCR (tham kh...
 

Các chủ đề có liên quan khác

Top