LPC2103 là vi điều khiển 32-bit được xây dựng trên nền cấu trúc ARM7TDMI-S CPU với khả năng mô phỏng thời gian thực và bộ nhớ flash tốc độ cao dung lượng 32 kB. Vùng nhớ nội được mở rộng đến 128-bit địa chỉ và một cấu hình tăng tốc đặc biệt giúp cho việc thực thi các lệnh 32-bit chỉ trong một chu kì xung nhịp. Với các ứng dụng nhỏ, LPC2103 hỗ trợ tập lệnh 16-bit (Thumb mode) giúp giảm 30% kích thước mà không gây ra bất lợi đáng kể so với việc sử dụng tập lệnh 32-bit thực hiện cùng chức năng.
Nhờ vào kích thước nhỏ và tiết kiệm năng lượng, LPC2103 rất lí tưởng cho các ứng dụng đòi hỏi khắt khe về cực tiểu hóa kích thước. Phạm vi giao tiếp truyền thông nối tiếp rất rộng sử dụng UARTs, SPI (Serial Peripheral Interface) – SSP (Serial Synchronous Port) và I¬2C kết hợp với SRAM 8 kB giúp LPC2103 thích hợp với nhiều loại cổng truyền thông và các giao thức chuyển đổi.Với các Timer 32-bit và 16-bit, ADC 10-bit, PWM, 32 chân xuất nhập đa dụng (GPIO) và các chân ngắt ngoài, LPC2103 đặc biệt thích hợp với các ứng dụng điều khiển trong công nghiệp, y khoa, cổng thông tin, truyền thông đa phương tiện
46 trang |
Chia sẻ: ngtr9097 | Lượt xem: 4763 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Đồ án ARM 7( LPC2103) analysic Temperature + display LCD, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
MỤC LỤC
VI ĐIỀU KHIỂN LPC2103
I. Giới thiệu chung về LPC2103
1. LPC2103
2. Các module của LPC2103
a. Clock(APB divider)
b. GPIO
c. Timer
d. ADC
II. Text LCD
Sơ đồ chân
Thanh ghi và cách điều khiển
THỰC HIỆN ĐỒ ÁN
Phần cứng LPC2103
Lưu đồ , Giải thuật và chương trình
Kết quả
Giới Thiệu Chung Về LPC2103
LPC 2103
Tổng quan về LPC2103:
LPC2103 là vi điều khiển 32-bit được xây dựng trên nền cấu trúc ARM7TDMI-S CPU với khả năng mô phỏng thời gian thực và bộ nhớ flash tốc độ cao dung lượng 32 kB. Vùng nhớ nội được mở rộng đến 128-bit địa chỉ và một cấu hình tăng tốc đặc biệt giúp cho việc thực thi các lệnh 32-bit chỉ trong một chu kì xung nhịp. Với các ứng dụng nhỏ, LPC2103 hỗ trợ tập lệnh 16-bit (Thumb mode) giúp giảm 30% kích thước mà không gây ra bất lợi đáng kể so với việc sử dụng tập lệnh 32-bit thực hiện cùng chức năng.
Nhờ vào kích thước nhỏ và tiết kiệm năng lượng, LPC2103 rất lí tưởng cho các ứng dụng đòi hỏi khắt khe về cực tiểu hóa kích thước. Phạm vi giao tiếp truyền thông nối tiếp rất rộng sử dụng UARTs, SPI (Serial Peripheral Interface) – SSP (Serial Synchronous Port) và I2C kết hợp với SRAM 8 kB giúp LPC2103 thích hợp với nhiều loại cổng truyền thông và các giao thức chuyển đổi.Với các Timer 32-bit và 16-bit, ADC 10-bit, PWM, 32 chân xuất nhập đa dụng (GPIO) và các chân ngắt ngoài, LPC2103 đặc biệt thích hợp với các ứng dụng điều khiển trong công nghiệp, y khoa, cổng thông tin, truyền thông đa phương tiện… .
Các tính năng cơ bản:
Vi điều khiển 32-bit dòng ARM7TDMI-S, có hỗ trợ tập lệnh 16-bit tích hợp trong chip 48 chân.
RAM tĩnh 8 kB và bộ nhớ flash 32 kB. 128-bit giao tiếp cho phép hoạt động tốc độ cao với tần số 70 MHz.
ISP (In System Programming) / IAP (In Appication Programming) thông qua phần mềm bootloader trên chip, xóa một sector hoặc toàn bộ chip trong 100ms và lập trình 256 bytes trong 1ms.
Giao tiếp nhúng ICE-RT cho phép quan sát điểm breakpoint và watchpoint. Các phục vụ ngắt vẫn tiếp tục được thực thi trong khi đang debug tác vụ nền với phần mềm quan sát thời gian thực RealMonitor trên chip.
8 kênh chuyển đổi A/D 10-bit, thời gian chuyển đổi 2.44 μs mỗi kênh.
2 bộ timers/counters 32-bit (bao gồm 7 kênh capture và 7 kênh compare) và 2 bộ timers/counters 16-bit (3 kênh capture, 7 kênh compare).
Đồng hồ thời gian thực RTC (Real-Time Clock) tiết kiệm năng lượng với nguồn cấp độc và xung nhịp ngõ vào 32 kHz.
Giao diện nối tiếp bao gồm 2 UARTs (16C550), 2 bus I2C tốc độ cao (400kbits/s), SPI và SSP
Vector điều khiển ngắt có địa chỉ truy cập và có mức ưu tiên xác lập được.
32 chân xuất nhập đa dụng (GPIO) mức 5V và 3 chân ngắt ngoài (tích cực theo cạnh hoặc theo mức).
Với tần số xung clock đưa vào trong khoảng 10MHz-25MHz, CPU có thể hoạt động với tần số đạt tối đa 70 MHz lập trình được thông qua bộ PLL (Phase Locked Loop) trên chip, thời gian thiết lập 100μs.
Bộ tạo dao động tích hợp trên chip với thạch anh ngoài, tầm hoạt động từ 1 MHz-25 MHz.
3 chế độ tiết kiệm năng lượng bao gồm : Idle mode, Power-down mode và Power-down mode with RTC.
Chức năng cho phép / không cho phép riêng lẻ từng thành phần ngoại vi nhằm tối ưu hóa nguồn năng lượng.
Đưa vi điều khiển trở lại chế độ hoạt động bình thường từ Power-down mode nhờ ngắt ngoài hoặc RTC.
Sơ đồ khối vi điều khiển LPC2103:
Sơ đồ chân LPC2103 ( đóng gói theo kiểu LQFP48):
Bảng mô tả chức năng các chân của LPC2103:
Ký hiệu
Số thứ tự
Loại
Mô tả
P0.0
đến
P0.31
I/O
Port 0 : Port 0 là port xuất nhập 32-bit, có thể điều khiển riêng lẻ từng bit. 31 chân đầu tiên của port 0 (P0.0-P0.30) được sử dụng như các chân xuất nhập số đa dụng 2 chiều (I/O), trong khi chân P0.31 là chân xuất. Hoạt động của các chân của port 0 phụ thuộc vào chức năng từng chân được chọn thông qua khối kết nốichân (Pin Connect Block).
P0.0/TXD0/ MAT3.1
13
I/O
P0.0 : Chân xuất nhập đa dụng (GPIO).
O
TXD0 : Ngõ xuất dữ liệu của UART0.
O
MAT3.1 : Ngõ ra PWM của Timer 3, kênh 1.
P0.1/RXD0/ MAT3.2
14
I/O
P0.1 : Chân xuất nhập đa dụng (GPIO).
I
RXD0 : Ngõ nhận dữ liệu của UART0.
O
MAT3.2 : Ngõ ra PWM của Timer 3, kênh 2.
P0.2/SCL0/ CAP0.0
18
I/O
P0.2 : chân xuất nhập đa dụng (GPIO).
I/O
SCL0 : I2C clock I/O, ngõ ra cực máng để hở.
I
CAP0.0 : Ngõ vào Capture của Timer 0, kênh 0.
P0.3/SDA0/ MAT0.0
21
I/O
P0.3 : Chân xuất nhập đa dụng (GPIO).
I/O
SDA0 : I2C dữ liệu I/O, ngõ ra cực máng để hở.
O
MAT0.0 : Ngõ ra PWM của Timer 0, kênh 0.
P0.4/SCK0/ CAP0.1
22
I/O
P0.4 : Chân xuất nhập đa dụng (GPIO).
I/O
SCK0 : Clock nối tiếp cho SPI0. ngõ ra SPI clock từ master hoặc ngõ vào slave.
I
CAP0.1 : Ngõ vào Capture của Timer 0, kênh 1.
P0.5/MISO0/ MAT0.1
23
I/O
P0.5 : Chân xuất nhập đa dụng (GPIO).
I/O
MISO0 : Ngõ vào master ngõ ra slave của SPI0. Dữ liệu ngõ vào SPI master hay dữ liệu ngõ ra từ SPI slave.
O
MAT0.1 : Ngõ ra PWM của Timer 0, kênh 1.
P0.6/MOSI0/ CAP0.2
24
I/O
P0.6 : Chân xuất nhập đa dụng (GPIO).
I/O
MOSI0 : Ngõ ra master ngõ vào slave của SPI0. Dữ liệu ngõ ra từ SPI master hay dữ liệu ngõ vào SPI slave.
I
CAP0.2 Ngõ vào Capture của Timer 0, kênh 2.
P0.7/SSEL0/ MAT2.0
28
I/O
P0.7 : Chân xuất nhập đa dụng (GPIO).
I
SSEL0 : Lựa chọn giao tiếp SPI0 như một Slave.
O
MAT2.0 : Ngõ ra PWM của Timer 2, kênh 0.
P0.8/TXD1/ MAT2.1
29
I/O
P0.8 : Chân xuất nhập đa dụng (GPIO).
O
TXD1 : Ngõ xuất dữ liệu của UART1.
O
MAT2.1 : Ngõ ra PWM của Timer 2, kênh 1.
P0.9/RXD1/ MAT2.2
30
I/O
P0.9 : Chân xuất nhập đa dụng (GPIO).
I
RXD1 : Ngõ nhận dữ liệu của UART1.
O
MAT2.2 : Ngõ ra PWM của Timer 2, kênh 2.
P0.10/RTS1/ CAP1.0/ AD0.3
35
I/O
P0.10 : Chân xuất nhập đa dụng (GPIO).
O
RTS1 : Yêu cầu gửi tín hiệu vào cho UART1.
I
CAP1.0 : Ngõ vào Capture của Timer 1, kênh 0.
I
AD0.3 : ADC 0, ngõ vào 3.
P0.11/CTS1/ CAP1.1/ AD0.4
36
I/O
P0.11 : Chân xuất nhập đa dụng (GPIO).
I
CTS1 : Xóa để gửi tín hiệu vào cho UART1.
I
CAP1.1 : Ngõ vào Capture của Timer 1, kênh 1.
I
AD0.4 : ADC 0, ngõ vào 4.
P0.12/DSR1/ MAT1.0/ AD0.5
37
I/O
P0.12 : Chân xuất nhập đa dụng (GPIO).
I
DSR1 : Bộ dữ liệu sẵn sàng thiết lập kết nối ngõ vào UART1.
O
MAT1.0 : Ngõ ra PWM của Timer 1, kênh 0.
I
AD0.5 : ADC 0, ngõ vào 5.
P0.13/DTR1/ MAT1.1
41
I/O
P0.13 : Chân xuất nhập đa dụng (GPIO).
O
DTR1 : Thiết bị đầu cuối dữ liệu sẵn sàng kết nối ngõ ra UART1.
O
MAT1.1: Ngõ ra PWM của Timer 1, kênh 1.
P0.14/DCD1/ SCK1/EINT1
44
I/O
P0.14 : Chân xuất nhập đa dụng (GPIO).
I
DCD1 : Phát hiện sóng mang dữ liệu ngõ vào UART1.
I/O
SCK1 : Clock nối tiếp cho SPI1. Ngõ ra SPI clock từ master hoặc ngõ vào slave.
I
EINT1 : Ngõ vào ngắt ngoài 1.
P0.15/RI1/ EINT2
45
I/O
P0.15 : Chân xuất nhập đa dụng (GPIO).
I
RI1: Ngõ vào chỉ thị của UART1.
I
EINT2: Ngõ vào ngắt ngoài 2.
P0.16/EINT0 /MAT0.2
46
I/O
P0.16 : Chân xuất nhập đa dụng (GPIO).
I
EINT0 : Ngõ vào ngắt ngoài 0.
O
MAT0.2 : Ngõ ra PWM của Timer 0, kênh 2.
P0.17/CAP1.2 /SCL1
47
I/O
P0.17 : Chân xuất nhập đa dụng (GPIO).
I
CAP1.2 : Ngõ vào Capture của Timer 1, kênh 2.
I/O
SCL1 : Ngõ I/O clock I2C1, ngõ ra cực máng để hở.
P0.18/CAP1.3 /SDA1
48
I/O
P0.18 : Chân xuất nhập đa dụng (GPIO).
I
CAP1.3 : Ngõ vào Capture của Timer 1, kênh 3.
I/O
SDA1 : Ngõ I/O dữ liệu I2C1, ngõ ra cực máng để hở.
P0.19/MAT1.2 /MISO1
1
I/O
P0.19 : Chân xuất nhập đa dụng (GPIO).
O
MAT1.2 : Ngõ ra PWM của Timer 1, kênh 2.
I/O
MISO1 : Ngõ vào master ngõ ra slave của SSP. Dữ liệu ngõ vào SSP master hay dữ liệu ngõ ra từ SSP slave.
P0.20/MAT1.3 /MOSI1
2
I/O
P0.19 : Chân xuất nhập đa dụng (GPIO).
O
MAT1.3 : Ngõ ra PWM của Timer 1, kênh 3.
I/O
MOSI1 : Ngõ ra master ngõ vào slave của SSP. Dữ liệu ngõ ra từ SSP master hay dữ liệu ngõ vào SSP slave.
P0.21/SSEL1/ MAT3.0
3
I/O
P0.21: Chân xuất nhập đa dụng (GPIO).
I
SSEL1 : Lựa chọn giao tiếp SPI1 như một Slave.
O
MAT3.0 : Ngõ ra PWM của Timer 3, kênh 0.
P0.22/AD0.0
32
I/O
P0.22 : Chân xuất nhập đa dụng (GPIO).
I
AD0.0 : ADC 0, ngõ vào 0.
P0.23/AD0.1
33
I/O
P0.23 : Chân xuất nhập đa dụng (GPIO).
I
AD0.1 : ADC 0, ngõ vào 1.
P0.24/AD0.2
34
I/O
P0.24 : Chân xuất nhập đa dụng (GPIO).
I
AD0.2 : ADC 0, ngõ vào 2.
P0.25/AD0.6
38
I/O
P0.25 : Chân xuất nhập đa dụng (GPIO).
I
AD0.6 : ADC 0, ngõ vào 6.
P0.26/AD0.7
39
I/O
P0.26 : Chân xuất nhập đa dụng (GPIO).
I
AD0.7 : ADC 0, ngõ vào 7.
P0.27/TRST/ CAP2.0
8
I/O
P0.27 : Chân xuất nhập đa dụng (GPIO).
I
TRST: Test Reset cho giao tiếp JTAG
I
CAP2.0 : Ngõ vào Capture của Timer 2, kênh 0.
P0.28/TMS/ CAP2.1
9
I/O
P0.28 : Chân xuất nhập đa dụng (GPIO).
I
TMS : Test Mode Select cho giao tiếp JTAG.
I
CAP2.1 : Ngõ vào Capture của Timer 2, kênh 1.
P0.29/TCK/ CAP2.2
10
I/O
P0.29 : Chân xuất nhập đa dụng (GPIO).
I
TCK : Test clock cho giao tiếp JTAG.
I
CAP2.2 : Ngõ vào Capture của Timer 2, kênh 2.
P0.30/TDI/ MAT3.3
15
I/O
P0.30 : Chân xuất nhập đa dụng (GPIO).
I
TDI : Test dữ liệu vào cho giao tiếp JTAG.
O
MAT3.3 : Ngõ ra PWM của Timer 3, kênh 3.
P0.31/TDO
16
O
P0.31 : Chân chỉ xuất đa dụng (GPIO).
I
TDO : Test dữ liệu ra cho giao tiếp JTAG.
RTXC1
20
I
Ngõ vào mạch dao động RTC.
RTXC2
25
O
Ngõ ra từ mạch dao động RTC.
RTCK
26
I/O
Ngõ ra trả về Test Clock.
X1
11
I
Ngõ vào mạch dao động và mạch phát xung nội.
X2
12
O
Ngõ ra bộ khuếch đại dao động.
DGBSEL
27
I
Chân lựa chọn chế độ sửa lỗi (Debug select): Ở mức thấp, vi điều khiển hoạt động bình thường. Ở mức cao, chế độ sửa lỗi được kích hoạt.
6
I
Ở mức thấp, chân cài đặt lại thiết bị, đưa các I/O ports và các ngoại vi về trạng thái mặc định, bộ xử lí bắt đầu thực hiên lại tại địa chỉ 0.
VSS
7, 19, 43
I
Ground (0 V).
VSSA
31
I
Analog ground (0 V) : được cách ly để giảm nhiễu
VDDA
42
I
Analog 3V3 power supply : được cách ly để giảm nhiễu. Điện áp này dùng để cung cấp cho bộ PLL trên chip đồng thời là mức điện áp mẫu cho bộ ADC.
VDD(1V8)
5
I
1.8V core power supply : Đây là nguồn áp cấp cho các mạch bên trong chip.
VDD(3V3)
17, 40
I
3.3V pad power supply : Đây là nguồn áp cấp cho các I/O ports.
VBAT
4
I
RTC power supply : điện áp 3V3 ở chân này cung cấp năng lượng cho bộ RTC.
*Pin connect block :
Các chân của vi điều khiểu có nhiều chức năng , dùng cho các bộ riêng biệt trong LPC2103 . Để sử dụng vào những mục đích đó thì thanh ghi chức năng ( REGISTER DESCRIPTION ) sẻ quyết định những chân vào những bộ cụ thể . Gồm có hai thanh ghi : PINSEL0 và PINSEL1 :
- Đây là hai thanh ghi chọn chức năng cho chân của vi điều khiển. Riêng
con LPC2103 chỉ có một Port 0 duy nhất gồm 32 chân đánh dấu từ P0.0
đến P0.31. Mỗi chân thường có từ 3 đến 4 công dụng. Chức năng mặc
định là chân xuất nhập chung (tức dùng điều khiển Led hoặc LCD hoặc
nhận phím bấm… tức làm bất cứ gì mà không dùng đến module thiết kế
sẵn bên trong VĐK).
- PINSEL0 điều khiển cho 16 chân đầu, còn PINSEL1 điều khiển 16 chân
còn lại . Bít thứ 0 và 1 của PINSEL0 sẽ điều khiển cho P0.0, bít thứ 2 và 3 điều
khiển cho P0.1. Tương tự cho các chân còn lại, tức 2 bít điều khiển cho 1
chân. Chẳng hạn P0.0 có 3 chức năng, chức năng thứ 0 là GPIO, thứ 1 là
TXD0 (chân Transmitter của UART0) và thứ 2 là MAT3.1(PWM thứ 1
của timer 3) vậy nếu bít 1và 0 của PINSEL0 có giá trị là 00 thì P0.0 là
GPIO, nếu là 01 thì là TXD0 và 10 là MAT3.1. Giá tri 11 không được sử
dụng. Các chức năng cũng như thứ tự chức năng của mỗi chân có thể xem dưới đây :
PINSEL0 : pin function select register 0 ( 0xE002 C000)
Pin name Value Function Value after reset
1:0 P0.0 0 0 GPIO Port 0.0 0
0 1 TXD0 (UART0)
1 0 MAT3.1(Timer 3)
1 1 Reserved
3:2 P0.1 0 0 GPIO Port 0.1 0
0 1 RXD0 (UART0)
1 0 MAT3.2 (Timer 3)
1 1 Reserved
5:4 P0.2 0 0 GPIO Port 0.2 0
SCL0 (I2C0)
0 1
1 0 CAP0.0 (Timer 0)
1 1 Reserved
7:6 P0.3 0 0 GPIO Port 0.3 0
SDA0 (I2C0)
0 1
1 0 MAT0.0 (Timer 0)
1 1 Reserved
9:8 P0.4 0 0 GPIO Port 0.4 0
0 1 SCK0 (SPI0)
1 0 CAP0.1 (Timer 0)
1 1 Reserved
11:10 P0.5 0 0 GPIO Port 0.5 0
0 1 MISO0 (SPI0)
1 0 MAT0.1 (Timer 0)
1 1 Reserved
13:12 P0.6 0 0 GPIO Port 0.6 0
0 1 MOSI0 (SPI0)
1 0 CAP0.2 (Timer 0)
1 1 Reserved
15:14 P0.7 0 0 GPIO Port 0.7 0
0 1 SSEL0 (SPI0)
1 0 MAT2.0 (Timer 2)
1 1 Reserved
17:16 P0.8 0 0 GPIO Port 0.8 0
0 1 TXD1 (UART1)
1 0 MAT2.1 (Timer 2)
1 1 Reserved
19:18 P0.9 0 0 GPIO Port 0.9 0
0 1 RXD1 (UART1)
1 0 MAT2.2 (Timer 2)
1 1 Reserved
21:20 P0.10 0 0 GPIO Port 0.10 0
0 1 RTS1(UART1)
1 0 CAP1.0 (Timer 1)
1 1 AD0.3
23:22 P0.11 0 0 GPIO Port 0.11 0
0 1 CTS1 (UART1)
1 0 CAP1.1 (Timer 1)
1 1 AD0.4
25:24 P0.12 0 0 GPIO Port 0.12 0
0 1 DSR1 (UART1)
1 0 MAT1.0 (Timer 1)
1 1 AD0.5
27:26 P0.13 0 0 GPIO Port 0.13 0
0 1 Reserved
1 0 MAT1.1 (Timer 1)
1 1 DTR1 (UART1)
29:28 P0.14 0 0 GPIO Port 0.14 0
0 1 EINT1
1 0 SCK1 (SSP1)
1 1 DCD1 (UART1)
31:30 P0.15 0 0 GPIO Port 0.15 0
0 1 EINT2
1 0 Reserved
1 1 RI1 (UART1)
PINSEL0 : pin function select register 0 ( 0xE002 C000)
PINSEL1 Pin Name Value Function Value after reset
3:2 P0.17 0 0 GPIO Port 0.17 0
SCL1 (I2C1)
0 1
1 0 CAP1.2 (Timer 1)
1 1 Reserved
5:4 P0.18 0 0 GPIO Port 0.18 0
(I2C1)
0 1 SDA1
1 0 CAP1.3 (Timer 1)
1 1 Reserved
7:6 P0.19 0 0 GPIO Port 0.19 0
0 1 MISO1 (SPI1)
1 0 MAT1.2 (Timer 1)
1 1 Reserved
9:8 P0.20 0 0 GPIO Port 0.20 0
0 1 MOSI1 (SPI1)
1 0 MAT1.3 (Timer 1)
1 1 Reserved
11:10 P0.21 0 0 GPIO Port 0.21 0
0 1 SSEL1 (SPI1)
1 0 MAT3.0 (Timer 3)
1 1 Reserved
13:12 P0.22 0 0 GPIO Port 0.22 0
0 1 Reserved
1 0 Reserved
1 1 AD0.0
15:14 P0.23 0 0 GPIO Port 0.23 0
0 1 Reserved
1 0 Reserved
1 1 AD0.1
17:16 P0.24 0 0 GPIO Port 0.24 0
0 1 Reserved
1 0 Reserved
1 1 AD0.2
19:18 P0.25 0 0 GPIO Port 0.25 0
0 1 Reserved
1 0 Reserved
1 1 AD0.6
21:20 P0.26 0 0 GPIO Port 0.26 0
0 1 Reserved
1 0 Reserved
1 1 AD0.7
23:22 P0.27 0 0 GPIO Port 0.27 0
0 1 TRST (JTAG)
1 0 CAP2.0 (Timer 2)
1 1 Reserved
25:24 P0.28 0 0 GPIO Port 0.28 0
0 1 TMS (JTAG)
1 0 CAP2.1 (Timer 2)
1 1 Reserved
27:26 P0.29 0 0 GPIO Port 0.29 0
0 1 TCK (JTAG)
1 0 CAP2.2 (Timer 2)
1 1 Reserved
29:28 P0.30 0 0 GPIO Port 0.30 0
0 1 TDI (JTAG)
1 0 MAT3.3 (Timer 3)
1 1 Reserved
31:30 P0.31 0 0 GPIO Port 0.31 0
0 1 TDO (JTAG)
1 0 Reserved
1 1 Reserved
Các module của LPC 2103
Clock (APD divider and PLL)
- ARM có một bộ PLL là một bộ nhân tần số. Tức là khi thạch anh đầu vào của bạn chỉ là12MHz và bạn muốn hoặt động ở tần số 60MHz (hỗ trợ cao nhất đến 70Mhz) thì bạn cần nhân 5 tần số ngõ vào. Điều này được thực hiện thông qua thanh ghi PLLCON, PLLCFGvà PLLFEED. Và thường được khai báo sẵn trong file startup.s mặc định của Keil C.
- Clock sinh ra thông qua PLL gọi là Cclk. Cclk quyết định tốc độ thực thi lệnh cũng như tốc độAHB bus (các bus có tốc độ cao trong VĐK như bus bộ nhớ).
- Bên cạnh đó thì ARM còn có một bộ chia tần số gọi là bộ VPB divider. Clock sinh rathông qua bộ chia VPB sẽ quyết định tốc độ của VPB bus và có tên là Pclk. Bus nàythường được dùng để giao tiếp với các thiết bị ngoại vi (nhằm tránh gây hiện tượng nghẽn cổ chai do tốc độ của các thiết bị ngoại vi chậm hơn tốc độ của VĐK). Bên cạnhđó còn dùng để điều khiển Timer (nếu dùng nguồn clock nội thì cứ mỗi xung của Pclk sẽtăng timer count lên 1, còn nếu dùng xung ngoài thì cứ mỗi cạnh lên của Pclk thì VĐK sẽ kiểm tra tín hiệu ở ngõ Capture). Bộ VPB được quyết định bởi thanh ghi VPBDIV. Vídụ, nếu bạn cho VPBDIV = 0x00000002 thì tức là Pclk sẽ có tần số bằng ½ tần số của Cclk . Trong đề tài này thì Pclk = 30Mhz .
GPIO
- Đặc tính :
+ Mỗi chân port GPIO đều có hai tính năng truy xuất thông thường và truy xuất nhanh thông qua cách cấu hình thanh ghi .
+ Tất cả các port sau khi reset được mặc định là GPIO .
- Ứng dụng :
+ mục địch I/O thông thường (general purpose I/O)
+ điều khiển Led và các thiết bị bên ngoài .
+ Controlling off-chip devices .
+ nhận biết ngõ vào số (sensing digital inputs ) .
- Pin description :
- Khi dùng đến chức năng nào trong vi điều khiển , điều quan trọng là phải nắm rõ được nhiệm vụ , chức năng của từng thanh ghi liên quan đến bộ đó . ở đây ta đề cập đến các thanh ghi : IOPIN , IOSET, IODIR, IOCLR …
+ IOPIN : Đây là thanh ghi dùng để đọc trạng thái của các chân, không cần biết chân đó đang là Input hay Output. Mỗi bit trong thanh ghi IOPIN sẽ tương ứng trạng thái của một chân trong P0 . Bạn có thể ghi thẳng vào thanh ghi này các giá trị cần xuất ra cho các chân, lưu ý là tất cả các chân sẽ bị thay đổi theo giá trị mà bạn gán. Khác với thanh ghi IOSET hay IOCLR là chỉ các vị trí bạn gán 1 thì port đó mới thay đổi giá trị .
+ IOSET và IOCLR : 2 thanh ghi dùng để thay đổi trạng thái của các chân. Nếu bạn ghi bit 1vào thanh ghi IOSET thì tại vị trí tương ứng chân đó sẽ có logic mức cao. Còn nếu bạn ghi bit 1 vào thanh ghi IOCLR thì tại vị trí tương ứng chân đó sẽ có logic mức thấp (chú ý ghi 1 vào IOCLR, ghi 0 vào sẽ không có tác dụng) .
+ IODIR : Thanh ghi dùng để quyết định một chân là Input hay Output. Cái này chỉ có tác dụng khi chân đó là GPIO(nếu đó không phải là GPIO thì việc là output hay input sẽ do các module có sẵn trong VĐK phụ trách). Bật bit nào lên thì Port tương ứng với bít đó sẽ là output, mặc định sẽ là input .
Khi reset chế độ mặc định của thì thanh ghi SCS = 0x00000000 ở chế độ GPIO nếu SCS = 0x00000001 bạn vào chế độ FastGPIO). Thanh ghi tương đương như các thanh ghi GPIO nhưng tốc độ cải thiện 3.5 lần ( có thể sinh ra những tín hiệu có tần số cao hơn) .
-Tương tự với các thanh ghi FIODIR, FIOMASK, FIOPIN, FIOSET, FIOCLR.Sự khác biệt lớn nhất giữ Fast GPIO và Slow GPIO là tốc độ đáp ứng chênh nhau khoảng 3.5 lần, tức là tần số bạn có khả năng sinh ra ở các chân có thể cao lên gấp 3.5 lần. Và điều khác biệt thứ hai là khi ghi hoặc đọc dữ liệu vào các thanh ghi FIOPIN, FIOSET hay FIOCLR thì chỉ các bit nào trong thanh ghi FIOMASK là 0 thì mới được đọc hoặc ghi. Ví dụ muốn cho các chân từ P0.0 đến P0.15 lên 1 và giữ nguyên giá trị cho các chân còn lại, có thể gán cho IOMASK=0xFFFF0000 và gán cho FIOPIN = 0xFFFFFFFF. Lúc đó các chân từ P0.16 trở đi sẽ bị che .
Timer
-Giới thiệu :
+ Timer nếu dùng làm bộ định thời thì nguồn clock sẽ là Pclk tức clock đã
được chia nhờ bộ chia VPB .
+ Mỗi Timer có các thanh ghi điều khiển con như sau: IR, TCR, TC, PR, PC, MCR, MR0, MR1, MR2, MR3, CCR, CR1, CR2, CR3, EMR, CTCR, PWMCON. Ví dụ tương ứng với Timer0 thì ta có thanh ghi
T0IR, T0TC
-Các thanh ghi :
+ IR (Interupt register): thanh ghi gồm 8 bít, 4 bít đầu dùng cho Matchinterupts (Tức ngắt xảy ra khi Timer đạt đến một giá trị định trước) và 4 bít sau dùng cho Capture interupts (Tức ngắt xảy ra khi có xung kích ở chân CAP được định trước), mỗi khi có ngắt xảy ra thì bit tương ứng trong thanh ghi IR sẽ được bật (bít 0 cho Match0…, bít 4 cho Capture0). Thanh ghi này thường được dùng để kiểm tra nguồn gây ra ngắt sau khi đã vào chương trình phục vụ ngắt. Nếu ghi 1 vào bất cứ bít nào trong thanh ghi IR có nghĩa là xóa tín hiệu ngắt của nguồn ngắt tương ứng .
+ TCR (Timer Control register): chỉ dùng 2 bít đầu, bít thứ 0 để bắt đầu chạy timer nếu bật lên 1 và dừng nếu xuống 0. Bít thứ 1 nếu được bật lên 1 sẽ reset timer ở lần kích cạnh lên tiếp theo của Pclk .
+ CTCR (Count Control register): dùng chọn các chế độ Timer/Counter .
+ TC (Timer counter): (32 bits) Mỗi lần thanh ghi PC đạt đến giá trị của thanh ghi PR thì nó sẽ reset về 0 và thanh ghi TC sẽ cộng 1. Nếu đạt đến 0xFFFFFFFF thì thanh ghi TC sẽ quay về 0, không sinh ra ngắt nhưng
việc sinh ngắt có thể được điều khiển bằng thanh ghi Match .
+ PR (Prescale register) :(32 bits) giá trị cận trên cho thanh ghi PC .
+ PC (Prescale Counter): tăng 1 mỗi khi có cạnh lên của Pclk. PR và PC thường dùng để chia tần số của Pclk khi tác động lên thanh ghi TC . Ví dụ khi cho PR = 0 thì cứ mỗi mỗi clock của Pclk sẽ tăng TC lên 1, nếu PR=1 thì cứ 2 clock của PCLK sẽ tăng 1 giá trị của TC… Như vậy sẻ dễ thấy nguồn clock thật sự dùng cho timer sẽ đi qua 2 bộ chia, từ Cclk tức là clock thật của vi điều