Tải bản đầy đủ (.doc) (43 trang)

ĐỒ ÁN KỸ THUẬT LẬP TRÌNH

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 (852.27 KB, 43 trang )

5
Đồ Án Kỹ Thuật Lập Trình
ĐỒ ÁN KỸ THUẬT LẬP TRÌNH
MỤC LỤC
Mở đầu : Mụclục, lời nói đầu, đề bài tr.1
Chương I. TỔNG QUAN VỀ ARM LPC2103. tr.2
I.1 : GIỚI THIỆU TỔNG QUAN VỀ ARM tr.
I.2 : ARM CORTEX VÀ ARMv7 tr.
I.3 : GIỚI THIỆU TỔNG QUAN VỀ ARM tr.
Chương II. CẤU TRÚC VÀ BỘ NHỚ VÀ CHỨC NĂNG PIN LPC 2103 tr.6
II.1 PINSEL0 và
PINSEL
tr.7
II.2
IOPIN
tr.8
II.3
IODIR
tr.8
II.4 IOSET/
IOCLR
tr.9
II.5 CẤU TRÚC CÁC PIN LPC2103 tr.10
II.6 CÁC CHỨC NĂNG PORT 0 tr.13
Chương III. PLL Control Register (PLL0CON & PLL1CON) tr.19
III.1 PLLCON tr.
III.2 PLL Status Register (PLL0STAT & PLL1STAT): tr.
III.3 PLL Feed Register (PLL0FEED & PLL1FEED) tr.
III.4 Pulse Width Modulator (PWM): tr.
III.5 PWM tr.
Chương IV. CHỌN PHẦN MỀM LẬP TRÌNH CHO CHÍP tr.23


Chương V. THIẾT KẾ PHẦN CỨNG LPC 2103 tr.27
Chương VI. Kết luận và tài liệu tham khảo. tr.37
_____________________________________________________________________________
GVHD : Th.S Hà Ngọc Nguyên
5
Đồ Án Kỹ Thuật Lập Trình
lời nói đầu
Hiện nay, các nghành kinh tế nói chung và cơ khí nói riêng đòi hỏi kỹ sư cơ khí và
các cán bộ kỹ thuật được đào tạo ra phải có kiến thức sâu rộng, đồng thời phải biết
vận dụng những kiến thức đó để giải quyết những vấn đề thường gặp trong sản xuất
và sử dụng máy móc. Cùng với sự phát triển ngày càng cao của khoa học kỹ thuật
thì những dòng chíp mới được ra đời với nhũng tính năng vượt trội, nhằm đáp ứng
những yêu cầu ngày càng cao của xã hội.
Mục tiêu của môn học là giúp sinh viên cũng cố kiến thức của các môn đã học
như: Kỹ thuật lập trình, Kỹ thuật điện, Lập trình C cho vi điều khiển, …. Ngoài ra
còn giúp sinh viên tìm hiểu thêm về một dòng chíp mới(chíp 32 bit) với những điểm
mạnh nổi trội có thể trong tương lai không xa sẽ thay thế những dòng chíp khác
bằng những ứng dung, lợi ích và tốc độ vượt trội mà nó mang lại. Qua đó sing viên
nắm chắc hơn về phương pháp tính, thiết kế và quy trình chế tạo một mạch điện cơ
bản như mạnh nguồn, mạch công suất …. Cũng như các yêu cầu công nghệ, và kinh
tế với mục tiêu là sản phẩm chế tạo ra phải đáp ứng được yêu cầu và hợp với thời
đại ngày nay.
Đồ án Kỹ Thuật Lập Trình nằm trong chương trình đào tạo của nghành cơ tin
kỹ thuật thuộc khoa cơ khí tự động và robot có vai trò hết sức quan trọng, là bước
đầu cho sing viên trong con đường học tập, giúp sinh viên hiểu sâu hơn về những
nhiệm vụ và những yêu cầu cơ bản của một người kỹ sư cơ điện, và quan trọng nhất
là tổng hợp lại những gì mình đã học trong suốt thời gian qua.
Trong quá trình thực hiện đồ án được sự hướng dẫn và giúp đỡ tận tình của
thầy HÀ NGỌC NGUYÊN các em đã hoàn thành đồ án này
Em xin chân thành cảm ơn.



_____________________________________________________________________________
GVHD : Th.S Hà Ngọc Nguyên
5
Đồ Án Kỹ Thuật Lập Trình
PHẦN I: TỔNG QUAN VỀ ARM LPC2103.
I.1 : GIỚI THIỆU TỔNG QUAN VỀ ARM
1. 1ARM = Acorn RISC Machine. Sau này, do có thêm nhiều công ty cùng phát
triển và một số lý do khác, người ta thống nhất gọi ARM=Advance RISC Machine.
1.2ARM được dùng trong Iphone của Apple (ARM Cortex A5)
1.3ARM sử dụng kiến trúc RISC:
• Kích thước 1 lệnh là cố định <32bit> với chỉ một vài định dạng
• Sử dụng kiến trúc load-store , các lệnh xử lý dữ liệu chỉ ở trong thanh ghi
( toán hạng chỉ được nằm trong thanh ghi,phải dùng lênh truy cập để load nội dung
từ bộ nhớ vào rồi mới thực hiện cộng trừ v v )
• Giải mã các lệnh logic bằng phần cứng
• Thực thi theo pipeline
1.4ARM nhanh hơn, tiết kiệm năng lượng hơn và nhỏ gọn hơn
1.5Thích thì chọn, có làm sao ko?
I.2 ARM CORTEX VÀ ARMv7
- Trước hết ARM không phải là 1 bộ vi điều khiển kiểu như 8051, AVR … Nó
chỉ là một cái lõi (core) chuyên xử lý dữ liệu, và kiến trúc của lõi này được công ty
ARM thiết kế, bán cho các hãng khác theo dạng cấp phép sở hữu trí tuệ (Intellectual
Property), các hãng sản xuất khác sẽ lắp thêm các thành phần ngoại vi vào cái core
này để tạo ra 1 sản phẩm hoàn thiện. Để đơn giản , các bạn hãy tưởng tượng core
ARM chính là cái chíp core-i5, core-i7 thậm chí là core-9. Các công ty sẽ làm
nhiệm vụ lắp thêm RAM, ROM, cổng USB, cổng LAN và cho ra đời các sản phẩm
cụ thể như : LPC2000,LPC2148, LPC3xxx, LPC1114, ATSAM7…
• Dòng ARM7 dựa trên kiến trúc Von Neumann sử dụng chung vùng nhớ để

chứa dữ liệu và chương trình, do đó dùng chung bus cho việc truy xuất.
• Cortex-M3 dựa trên kiến trúc Harvard, được đặc trưng bằng sự tách biệt giữa
vùng nhớ chứa dữ liệu và chương trình do đó có các bus riêng để truy cập.
Vì có thể đọc cùng lúc lệnh và dữ liệu từ bộ nhớ, bộ vi xử lý Cortex-M3 có thể
thực hiện nhiều hoạt động song song, tăng tốc thực thi ứng dụng.
_____________________________________________________________________________
GVHD : Th.S Hà Ngọc Nguyên
5
Đồ Án Kỹ Thuật Lập Trình
I.3 KIẾN TRÚC CỦA ARM7
1.3.1 Kiến trúc cơ bản:
• Cấu trúc load-store
• Lệnh có chiều dài cố định <32bit>
• Lệnh có 3 địa chỉ.
• Thay vì chỉ dùng 1 chu kì xung nhịp cho tất cả các chỉ lệnh, ARM thiết kế để
sao cho tối giản số chu kì xung nhịp cho một chỉ lệnh, do đó tăng được sự phức tạp
cho các chỉ lệnh đơn lẻ.
1.3.2 Cấu trúc load – store:
Cũng như hầu hết các bộ xử lý dùng tập lênh RISC khác, ARM cũng sử dụng cấu
trúc load-store. Điều đó có nghĩa là: tất cả các chỉ lệnh <cộng, trừ…> đều được thực
hiện trên thanh ghi. Chỉ có lệnh copy giá trị từ bộ nhớ vào thanh ghi<load> hoặc
chép lại giá trị từ thanh ghi vào bộ nhớ<store> mới có ảnh hưởng tới bộ nhớ.
1.3.3 Tập lệnh của ARM:
Tất cả các lệnh của ARM có thể thuộc 1 trong 3 loại sau:
+ Chỉ lệnh xử lý dữ liệu: chỉ thay đổi giá trị trên thanh ghi.
+ Chỉ lệnh truyền dữ liệu: copy giá trị từ thanh ghi vào bộ nhớ và chép giá trị
từ bộ nhớ vào thanh ghi.<load-store>
+ Chỉ lệnh điều khiển dòng lệnh: Bình thường, ta thực thi các chỉ lệnh chứa
trong một vùng nhớ liên tiếp, chỉ lệnh điều khiển dòng lệnh cho phép chuyển sang
các địa chỉ khác nhau khi thực thi lệnh, tới những nhánh cố định, <lệnh rẽ nhánh>

hoặc là lưu và trở lại địa chỉ để phục hồi chuỗi lệnh ban đầu <chỉ lệnh rẽ nhánh và
kết nối> hay là đè lên vùng code của hệ thống <gọi giám sát-ngắt phần mềm>.
Một số đặc điểm riêng biệt của tập lệnh :
+ Để tăng tính mềm dẻo và giảm kích thước chương trình, ARM đưa ra một
loại lệnh gọi là THUMB chỉ có 16 bit. Với lệnh 16bit này tốc độ thực thi của
_____________________________________________________________________________
GVHD : Th.S Hà Ngọc Nguyên
5
Đồ Án Kỹ Thuật Lập Trình
chương trình sẽ giảm tuy nhiên bộ nhớ lưu trữ của chương trình sẽ tiết kiệm hơn.
Theo như datasheet của LPC2148 thì :
+ Mọi câu lệnh trong ARM đều có thể viết thành “câu lệnh có điều kiện” ví
dụ: EQMOV R1, #0x02FE0302 ; có nghĩa là move giá trị #0x02FE0302 vào R1
nếu kết quả của câu lệnh trước = R1 và sẽ set cờ Z lên 1(EQ được thêm vào trước
MOV và người ta gọi thể loại bựa nhân này là Suffix, có thể tra datasheet cái bảng
Suffix này) . Điều này làm cho một số câu lệnh rẽ nhánh được thực hiện rất nhanh.
Phần II : CẤU TRÚC VÀ BỘ NHỚ VÀ CHỨC NĂNG PIN
LPC 2103
Các tính năng được hỗ trợ trong
LPC2103
- Là vi điều khiển 32
bit
- Có 8KB Ram và 32KbRom, hoạt động cao nhất ở 70Mhz
(Dòng
LPC2101/2102 là tương tự nhưng có Ram và Rom ít
hơn)
- ISP/IAP, khả năng nạp xuống vi điều khiển 256bytes/1ms hay xóa
toàn
bộ
chip trong

100ms
- Khả năng Debug theo thời gian thực bằng cổng
JTAG
- ADC 10bit với thời gian thực hiện 2.44u. Ghi thẳng vào thanh ghi
kết
quả
không cần dùng
ngắt.
- 2 bộ timer 32 bít (Timer0 và Timer1) với 7 chân Capture và 7 kênh
so
sánh.
- 2 bộ timer 16 bít (Timer2 và Timer3) với 3 chân Capture và 7 kênh
so sánh.
- Đồng hồ thời gian thực low power (Real-Time Clock (RTC)) cấp nguồn
_____________________________________________________________________________
GVHD : Th.S Hà Ngọc Nguyên
5
Đồ Án Kỹ Thuật Lập Trình
rời và khả năng dùng xung rời
32Khz.
- 2 bộ UART, 2 bộ FastI2C (400Kbit/s) SPI và
SSP.
- Bộ véctơ ngắt có thể điều chỉnh độ ưu tiên.(1 ngắt nhanh “Fast IRQ”,
16
vector ngắt có thể lập trình địa chỉ “Vectored IRQ”, các ngắt còn
lại
“Non-
Vectored IRQ” bạn có thể định danh nguồn gây ra ngắt sau khi
vào
chế độ

ngắt.
- 32 chân ngõ xuất nhập công dụng chung
5V
- 13 chân có khả năng làm chân ngắt
ngoài
- Có bộ nhân tầng giúp VĐK hoặt động ở 70Mhz với tần số ngõ vào từ
1
đến
25Mhz.
- Có chế độ Idle,
Power-down.
- Thức dạy trong chế độ Power-down hoặt Idle thông qua ngắt ngoài
hoặt
định giờ trong
RTC.
- Có khả năng tắt hoặc mở từng phần các module ngoại vi giúp tối ưu
hóa
lượng
điện năng tiêu
thụ.
- Có chế độ Thump dùng tập lệnh 16bit thay vì 32bit và có khả năng
phối
hợp
cả 2 chế độ, giúp tối ưu thời gian thực hiện cũng như chi phí bộ
nhớ.
Trong chế độ
Thump bạn giảm được 30% code nhưng chạy chậm
hơn
40% so với chế độ 32 bit
( thường được gọi là chế độ ARM

)
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ỉ

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,
PLLCFG
và PLLFEED. Và thường được khai báo sẵn trong
file startup.s mặc định của Keil.
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
ra
thông qua bộ chia VPB sẽ quyết định tốc độ của VPB bus và có tên là Pclk.
Bus
này
thườ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
_____________________________________________________________________________
GVHD : Th.S Hà Ngọc Nguyên
5
Đồ Án Kỹ Thuật Lập Trình
II.1 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ưng thứ
tự chức năng của mỗi chân các bạn có
thể
tham khảo trong phần User manual rất
hoàn chỉnh. Ở các Tuts sau
mình

sẽ cố gắng trình bày đầy đủ các chức năng mà
bạn có được từ
một

con
LPC2103.
II.2.
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ị.
Quyết định dùng thanh ghi IOPIN
hay
IOSET/IOCLR sẽ giúp bạn tối ưu được
chương trình của
mình.

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

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.

_____________________________________________________________________________
GVHD : Th.S Hà Ngọc Nguyên
5
Đồ Án Kỹ Thuật Lập Trình
II.4. IOSET/
IOCLR
- 2 thanh ghi dùng để thay đổi trạng thái của các chân. Nếu bạn ghi bit
1 và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


tác
dụng).\
E. Các thanh ghi FastGPIO : (Khi SCS = 0x00000000 (mặc định) bạn ở chế
độ GPIO
còn
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 (Giúp bạn có thể
sinh ra những tín hiệu

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ụ

tôi 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, tôi có thể gán cho
FIOMASK=0xFFFF0000
và gán cho FIOPIN =
0xFFFFFFFF. Lúc đó các chân từ P0.16 trở đi
sẽ
bị
che.
- Điều đáng lưu ý là các thanh ghi này chưa được khai báo trong
file
LPC210x.h
của Keil, mình chỉ xin khai báo lại 5 thanh ghi
FIODIR,
FIOMASK, FIOPIN,
FIOSET, FIOCLR mà thôi. Còn một số thanh
ghi
bổ sung nhằm giúp tối ưu hóa
quá trình xuất nhập, các bạn có thể
tra thêm
trong User manua
II.5 : CẤU TRÚC CÁC PIN LPC2103
2.5.1 : Sơ đồ khối của ARM LPC 2103.
_____________________________________________________________________________
GVHD : Th.S Hà Ngọc Nguyên
5
Đồ Án Kỹ Thuật Lập Trình
2.5.2 : Thứ tự chân trên chíp trên chip LPC 2103.
_____________________________________________________________________________

GVHD : Th.S Hà Ngọc Nguyên
5
Đồ Án Kỹ Thuật Lập Trình
2.5.3: Chức năng và nhiệm vụ của từng chân.
- Vi điều khiển LPC 2103 có 48 chân .
- Gồm 32 chân từ P0.0 tới P0.31 với chức năng I/O .
- Chân số 7,19,43 nối GND.
- Chân số 42, 17, 40 nối VCC(3,3V)
- Chân số 5 nối VCC(1,8V)
_____________________________________________________________________________
GVHD : Th.S Hà Ngọc Nguyên
5
Đồ Án Kỹ Thuật Lập Trình
- Tổng cộng có 32 chân của Port 0 có thể được sử dụng như mục đích chung hai
chiều vừa có thể là tín hiệu đầu ra vừa có thể là tín hiệu đầu vào.Riêng Port 0.31 chỉ
có thể là tín hiệu đầu vào input.
- Các chân của Port 0 có hoạt động phụ thuộc vào chức năng pin lựa chọn thông
qua các kết nối khối pin .
- LPC 2103 sử dụng hai thạch anh dao động ,một thạch anh cho mạch chính, một
thạch anh cho đồng hồ thời gian thực .
- Chân số 20,25 sử thạch anh RTCX1,RTCX2 _32KHZ_là đầu vào và đầu ra cho
mạch giao động RTC(rill time clock).
- Chân số 11,12 sử dụng thạch anh XTAL1,XYAL2 là đầu vào và đầu ra cho mạch
dao động nội bộ .
- Chân số 26 _ RTCK :Trả lại đồng hồ kiểm tra đầu ra .Extra tín hiệu được gửi đến
cổng JTAG. Hỗ trợ gỡ rối đồng bộ hóa khi bộ xử lý tần số khác nhau.
- Chân số 27 _ DBGSEL được chọn: khi ở mức thấp, một phần hoạt động bình
thường. Khi bên ngoài kéo lên mức cao , P0.27 để P0.31 được cấu hình như JTAG
cảng và một phần là ở chế độ Debug.
- Chân số 6 _ RST_ Khi chân này được đưa về mức thấp thì thiết bị bị sẽ được

reset, gây ra cổng I / O và thiết bị ngoại vi để đưa vào trạng thái mặc định của họ và
thực hiện xử lý bắt đầu tại địa chỉ 0. TTL với thời gian trễ 5 V là đủ.
II.6 : CÁC CHỨC NĂNG PORT 0 .
- P0.0 : chân 13 của LPC 2103.
+ Tổng giám mục đích đầu vào / đầu ra kỹ thuật số pin.
+ TXD0 - phát đầu ra cho UART0.
+ MAT3.1 - PWM ra 1 cho Timer 3.
- P0.1 : chân 14 của LPC 2103.
_____________________________________________________________________________
GVHD : Th.S Hà Ngọc Nguyên
5
Đồ Án Kỹ Thuật Lập Trình
+ Tổng giám mục đích đầu vào / đầu ra kỹ thuật số pin.
+ RXD0 - phát đầu ra cho UART0.
+ MAT3.2 - PWM ra 2 cho Timer 3.
- P0.2 : chân 18 của LPC 2103.
+ Tổng giám mục đích đầu vào / đầu ra kỹ thuật số pin. Kết quả là cống được mở.
+ SCL0 : C0 đồng hồ đầu vào / đầu ra.
+ CAP0.0 : Bắt đầu vào cho Timer 0, kênh 0.
- P0.3 : chân 21 của LPC 2103.
+ Tổng giám mục đích đầu vào / đầu ra kỹ thuật số pin. Kết quả là cống được mở.
+ SDA0 : C0 dữ liệu đầu vào / đầu ra.
+MAT0.0 : PWM đầu ra cho 0 Timer, kênh 0
- P0.4 : chân 22 của LPC 2103.
+ Tổng giám mục đích đầu vào / đầu ra kỹ thuật số pin. Kết quả là cống được mở.
+ SCK0 : Serial đồng hồ cho SPI0. SPI đồng hồ đầu ra từ chủ hoặc đầu vào cho
thiết bị.
+ CAP0.1 : Bắt đầu vào cho Timer 0, kênh 1.
- P0.5 : chân 23 của LPC 2103.
+ Tổng giám mục đích đầu vào / đầu ra kỹ thuật số pin. Kết quả là cống được mở.

+ MISO0 : Dữ liệu đầu vào cho SPI chủ hoặc dữ liệu đầu ra từ SPI thiết bị.
+MAT0.1 :PWM đầu ra cho Timer 0, kênh 1
- P0.6 : chân 24 của LPC 2103.
+ Tổng giám mục đích đầu vào / đầu ra kỹ thuật số pin. Kết quả là cống được mở.
_____________________________________________________________________________
GVHD : Th.S Hà Ngọc Nguyên
5
Đồ Án Kỹ Thuật Lập Trình
+ MOSI0 : Dữ liệu đầu ra từ SPI chủ hoặc dữ liệu đầu vào từ SPI thiết bị.
+ CAP0.2 - Bắt đầu vào cho Timer 0, kênh 2 .
- P0.7 : chân 28 của LPC 2103.
+ Tổng giám mục đích đầu vào / đầu ra kỹ thuật số pin. Kết quả là cống được mở.
+ SSEL0 : Thiết bị ngoài chọn SPI 0.Chọn giao diện SPI là một thiết bị bên
ngoài để thực thi.
+ MAT2.0: PWM đầu ra cho 2 Timer, kênh 0.
- P0.8 : chân 29 của LPC 2103.
+ Tổng giám mục đích đầu vào / đầu ra kỹ thuật số pin. Kết quả là cống được mở.
+ TXD1 : phát đầu ra cho UART1.
+ MAT2.1 :PWM đầu ra cho Timer 2 , kênh 1.
- P0.9 : chân 30 của LPC 2103.
+ Tổng giám mục đích đầu vào / đầu ra kỹ thuật số pin. Kết quả là cống được mở.
+ RXD1 : nhận đầu ra cho UART1.
+ MAT2.2 : PWM đầu ra cho Timer 2 , kênh 2.
- P0.10 : chân 35 của LPC 2103.
+Tổng giám mục đích đầu vào / đầu ra kỹ thuật số pin.
+ RTS1 : Yêu cầu đầu ra cho UART1 gửi.
+ CAP1.0 : Bắt đầu vào cho 1 Timer, kênh 0.
+ AD0.3 : ADC 0, đầu vào 3.
- P0.11 : chân 36 của LPC 2103.
+Tổng giám mục đích đầu vào / đầu ra kỹ thuật số pin.

+ AD0.4 - ADC 0, đầu vào 4.
_____________________________________________________________________________
GVHD : Th.S Hà Ngọc Nguyên
5
Đồ Án Kỹ Thuật Lập Trình
+ CAP1.1 : Bắt đầu vào cho Timer 1, kênh 1.
+ CTS1 :Clear để Gửi đầu vào cho UART1.
- P0.12 : chân 37 của LPC 2103.
+Tổng giám mục đích đầu vào / đầu ra kỹ thuật số pin.
+ DSR1 : Data Set Ready đầu vào cho UART1.
+ MAT1.0 : PWM đầu ra cho 1 Timer, kênh 0.
+ AD0.5 : ADC 0, đầu vào 5.
- P0.13 : chân 41 của LPC 2103.
+Tổng giám mục đích đầu vào / đầu ra kỹ thuật số pin.
+DTR1 : Data Terminal Ready đầu ra cho UART1.
+MAT1.1 :-PWM đầu ra cho Timer 1, kênh 1
- P0.14 : chân 44 của LPC 2103.
+Tổng giám mục đích đầu vào / đầu ra kỹ thuật số pin.
+DCD1 ; Phát hiện nhà cung cấp dữ liệu đầu vào cho UART1.
+ SCK1 : SPI đồng hồ đầu ra từ chủ hoặc đầu vào cho thiết bị .
+EINT1 : ngắt ngoài gián đoạn 1 đầu vào .
- P0.15 : chân 45 của LPC 2103.
+Tổng giám mục đích đầu vào / đầu ra kỹ thuật số pin.
+RI1: Ring Chỉ số đầu vào cho UART1.
+EINT2 : ngắt ngoài gián đoạn 2 đầu vào.
- P0.16 : chân 46 của LPC 2103.
+Tổng giám mục đích đầu vào / đầu ra kỹ thuật số pin.
+EINT0 - ngoài ngắt 0 đầu vào.
+ MAT0.2 - PWM đầu ra cho Timer 0, kênh 2
- P0.17 : chân 47 của LPC 2103.

+Tổng giám mục đích đầu vào / đầu ra kỹ thuật số pin.
_____________________________________________________________________________
GVHD : Th.S Hà Ngọc Nguyên
5
Đồ Án Kỹ Thuật Lập Trình
+ CAP1.2 - Bắt đầu vào cho Timer 1, kênh 2.
+ SCL0 : C1 đồng hồ đầu vào / đầu ra.
- P0.18 : chân 48 của LPC 2103.
+Tổng giám mục đích đầu vào / đầu ra kỹ thuật số pin.
+ CAP1.3 - Bắt đầu vào cho Timer 1, kênh 3.
+SDA1 :C1 dữ liệu đầu vào / đầu ra. pin này là một cống mở ra nếu chức năng
được chọn trong các kết nối khối pin .
- P0.19 : chân 1 của LPC 2103.
+Tổng giám mục đích đầu vào / đầu ra kỹ thuật số pin.
+ MAT1.2 - PWM đầu ra cho Timer 1, kênh 2.
+ MISO1 : Dữ liệu đầu vào cho SPI chủ hoặc dữ liệu đầu ra từ SPI thiết bị.
- P0.20 : chân 2 của LPC 2103.
+Tổng giám mục đích đầu vào / đầu ra kỹ thuật số pin.
+ MAT1.3 - PWM đầu ra cho Timer 1, kênh 3.
+ MOSI1 : Dữ liệu đầu ra cho SPI chủ hoặc dữ liệu đầu vào từ SPI thiết bị.
- P0.21 : chân 3 của LPC 2103.
+Tổng giám mục đích đầu vào / đầu ra kỹ thuật số pin.
+ MAT3.0 - PWM đầu ra cho Timer 3, kênh 0.
+ SSEL1 : Thiết bị ngoài chọn SPI1.Chọn giao diện SPI là một thiết bị bên ngoài
để thực thi.
- P0.22 : chân 32 của LPC 2103.
+Tổng giám mục đích đầu vào / đầu ra kỹ thuật số pin.
+ AD0.0 – ADC0, ngõ vào 0.
- P0.23 : chân 33 của LPC 2103.
+Tổng giám mục đích đầu vào / đầu ra kỹ thuật số pin.

+ AD0.1 – ADC0, ngõ vào 1.
_____________________________________________________________________________
GVHD : Th.S Hà Ngọc Nguyên
5
Đồ Án Kỹ Thuật Lập Trình
- P0.24 : chân 34 của LPC 2103.
+Tổng giám mục đích đầu vào / đầu ra kỹ thuật số pin.
+ AD0.2 – ADC0, ngõ vào 2.
- P0.25 : chân 38 của LPC 2103.
+Tổng giám mục đích đầu vào / đầu ra kỹ thuật số pin.
+ AD0.6– ADC0, ngõ vào 6.
- P0.26 : chân 39 của LPC 2103.
+Tổng giám mục đích đầu vào / đầu ra kỹ thuật số pin.
+ AD0.7 – ADC0, ngõ vào 7
- P0.27 : chân 8 của LPC 2103.
+Tổng giám mục đích đầu vào / đầu ra kỹ thuật số pin.
+ TRST - Test thiết lập lại cho giao diện JTAG. Nếu DBGSEL là cao, chân này là
tự động cấu hình để sử dụng với EmbeddedICE (Debug chế độ).
+ CAP2.0 - Bắt đầu vào cho 2 Timer, kênh 0.
- P0.28 : chân 9 của LPC 2103.
+Tổng giám mục đích đầu vào / đầu ra kỹ thuật số pin.
+ TMS - Chọn chế độ thử nghiệm cho giao diện JTAG . Nếu DBGSEL là cao,
chân này là ) tự động cấu hình để sử dụng với EmbeddedICE (Debug chế độ).
+ CAP2.1- Bắt đầu vào cho 2 Timer, kênh 1.
- P0.29 : chân 10 của LPC 2103.
+Tổng giám mục đích đầu vào / đầu ra kỹ thuật số pin.
+TCK - Kiểm tra đồng hồ cho giao diện JTAG. Đồng hồ này phải được chậm hơn
1/6 lần của CPU đồng hồ (CCLK) cho giao diện JTAG để hoạt động. Nếu DBGSEL
là cao, điều này pin được tự động cấu hình để sử dụng với EmbeddedICE (Debug
chế độ).

+ CAP2.2 - Bắt đầu vào cho 2 Timer, kênh 2.
_____________________________________________________________________________
GVHD : Th.S Hà Ngọc Nguyên
5
Đồ Án Kỹ Thuật Lập Trình
- P0.30 : chân 15 của LPC 2103.
+Tổng giám mục đích đầu vào / đầu ra kỹ thuật số pin.
+TDI - Kiểm tra dữ liệu nhập cho giao diện JTAG. Nếu DBGSEL là cao, chân này
là tự động cấu hình để sử dụng với EmbeddedICE (Debug chế độ).
+MAT3.3 - PWM ngõ ra 3 cho Timer 3.
- P0.31 : chân 16 của LPC 2103.
+ Tổng giám mục đích đầu ra kỹ thuật số pin.
+ TDO - Kiểm tra dữ liệu ra cho giao diện JTAG. Nếu DBGSEL là cao, chân này
là tự động cấu hình để sử dụng với EmbeddedICE (Debug chế độ)
Phần III: PLL Control Register (PLL0CON & PLL1CON):
III.1 : PLLCON
Chứa các bit để kích hoạt và kết nối PLL. Kích hoạt PLL cho phép khóa cấu hình hiện
tại (với 2 số M & P). Kết nối PLL làm chip và toàn bộ các chức năng chạy theo xung
nhịp từ ngõ ra PLL.
Bit Ký hiệu Ý nghĩa Giá trị sau Reset
0 PLLE bit = 1: cho phép kích hoạt PLL 0
và khóa tại tần số yêu cầu.
1 PLLC khi PLLE và PLLC = 1 thì PLL được 0
kết nối như nguồn xung cho vi điều khiển
7:2 - Reserved n/a
_____________________________________________________________________________
GVHD : Th.S Hà Ngọc Nguyên
5
Đồ Án Kỹ Thuật Lập Trình
III.2 : PLL Status Register (PLL0STAT & PLL1STAT):

PLLSTAT là thanh ghi chỉ đọc, nó chứa các giá trị thực sự của bộ PLL tại thời điểm
đọc thanh ghi này.
Bit Ký hiệu Ý nghĩa Giá trị sau Reset
4:0 MSEL số nhân hiện tại đang được sử dụng bởi bộ PLL 0
6:5 PSEL số chia hiện tại đang được sử dụng bởi bộ PLL 0
7 - Reserved n/a
8 PLLE bit = 1: bộ PLL đang được kích hoạt 0
9 PLLC bit = 1: bộ PLL đang được kích hoạt 0
và kết nối.
10 PLOCK bit = 0: PLL chưa được khóa 0
bit = 1: PLL đã được khóa với tần số yêu cầu
15:11 - Reserved n/a
III.3 : PLL Feed Register (PLL0FEED & PLL1FEED)
Sau khi bộ PLL đã được kết nối, mọi thay đổi trong 2 thanh ghi PLLCON &
PLLCFG sẽ
không có tác dụng. Để thay đổi cấu hình PLL đã chọn, phải ghi vào thanh ghi
PLLFEED
theo 1 thứ tự xác định:
- Ghi 0xAA vào PLLFEED
- Ghi 0x55 vào PLLFEED
Thao tác ghi phải theo đúng thứ tự, và liền kề nhau.
*******************************************************
Ví Dụ: tính toán tần số PLL: giả sử tần số thạch anh là 12MHz và tần số chip CCLK
là 60MHz, không sử dụng USB.
Fosc: tần số dao động thạch anh
_____________________________________________________________________________
GVHD : Th.S Hà Ngọc Nguyên
5
Đồ Án Kỹ Thuật Lập Trình
Fcco: tần số dao động của PLL CCO

CCLK: ngõ ra PLL, đồng thời là xung hệ thống
Ta có:
CCLK = Fosc x M => M = 5
Fcco = CCLK x 2 x P
156 MHz < Fcco < 320 MHz => 1.3 < P < 2.7 => P = 2
Bảng giá trị của MSEL & PSEL:
PSEL bits 6:5 của PLLCFG P
00 1
01 2
10 4
11 8
MSEL bits 4:0 PLLCFG M
00000 1
00001 2
… …
11110 31
11111 32
Vậy PSEL = 01 và MSEL = 00100
Giá trị ghi vào thanh ghi PLLCFG sẽ là 0x00000024
III.4 : Pulse Width Modulator (PWM):
Bộ tạo xung PWM được thiết kế dựa trên bộ Timer/Counter, hoạt động theo xung
PCLK. Nguyên tắc hoạt động dựa trên các Match events của 7 match register. Có 2 loại
xung:
- Single Edge: tất cả các xung đều được set lên 1 ngay khi bắt đầu 1 xung PWM,
xung được set về 0 khi giá trị của timer counter bằng với giá trị của 1 trong các
_____________________________________________________________________________
GVHD : Th.S Hà Ngọc Nguyên
5
Đồ Án Kỹ Thuật Lập Trình
Match register 1-6. Có thể có tối đa 6 xung Single Edge đồng thời, tất cả các xung

đều có cùng tần số được điểu khiển bởi Match register 0 (khi giá trị của timer
counter bằng giá trị trong Match register 0 thì kết thúc 1 xung PWM và bắt đầu 1
xung mới).
III.5 : PWM
- Double Edge: các xung được set bằng 0 khi bắt đầu 1 xung PWM, được set lên 1
bằng 1 Match register và set về 0 bằng 1 Match register khác. Các xung double
edge cũng có tần số được điều khiển bởi Match register 0.
PWM2 & PWM4: double edge
PWM5: single edge
Bảng các kênh PWM:
Kênh Single Edge Double Edge
Set by Reset by Set by Reset by
1 Match 0 Match 1 - -
2 Match 0 Match 2 Match 1 Match 2
3 Match 0 Match 3 Match 2 Match 3
4 Match 0 Match 4 Match 3 Match 4
5 Match 0 Match 5 Match 4 Match 5
6 Match 0 Match 6 Match 5 Match 6
_____________________________________________________________________________
GVHD : Th.S Hà Ngọc Nguyên
5
Đồ Án Kỹ Thuật Lập Trình
PHẦN IV : CHỌN PHẦN MỀM LẬP TRÌNH CHO CHÍP
Hiện nay có nhiều phần mềm lập trình cho LPC2103 như “Keil uVision4” for
ARM đây là phần mềm thông dụng được sử dụng nhiều nhất hiện nay. Bên cạnh đó
còn có “Raisonance Tools” hay còn gọi là Ride7 dành riêng cho ARM, phần mềm
này hỗ trợ khá đầy đủ cho việc lập trình IO,PPL,ADC,PWM cho ARM với việc khai
báo sẵn trong file thư viện (.h), các ví dụ đơn giản trong phần Example. Ngoài ra
người sử dụng có thể khai báo những thanh gi khác mà không có sẵn trong file thư
viện để sử dụng cho những ứng dụng khác.

Ở đây chúng ta sử dụng Raisonance Tools để lập trình cho LPC2103.
GIAO DIỆN VÀ LẬP TRÌNH CƠ BẢN VỚI “RAISONANCE TOOLS”
Biểu tượng Raisonance Tools
- Giao diện chính:
_____________________________________________________________________________
GVHD : Th.S Hà Ngọc Nguyên
5
Đồ Án Kỹ Thuật Lập Trình
Các bước lập trình cho LPC2103 bằng Ride7 như sau:
- Khởi động chương trình.
- Tạo New Project cho LPC2103
- Chọn các thông số bên phần Properties
- Lập trình (viết code)
- Biên dịch sửa lỗi và nạp qua ISP
• Về cấu t rúc chương trình của Ride7 tương đối giống với các phần mềm lập trình
# cùng sử dụng ngôn ngữ C, chỉ khác những lệnh hỗ trợ và tên thanh ghi thì gần
như tương đương với “Keil uVision4” ví dụ sau đây là một đoạn chương trình
tương đương được Em viết bằng 2 phần mềm “Keil uVision4” và Ride7 cho
LPC2103.
_____________________________________________________________________________
GVHD : Th.S Hà Ngọc Nguyên
5
Đồ Án Kỹ Thuật Lập Trình
- Chương tring dịch led từ trái qua phải 8 bit từ p0.16 -> p0.23 sử dụng delay viết
tay.
Ride7 :
#include <LPC21xx.h> while(1)
volatile unsigned int dcnt; {
volatile unsigned int i=0x00010000; IOCLR = i & 0x00FF0000;
void donothing(); Delay(MINDELAY*(1000));

#define IMAXVAL (0x800) IOSET = i & 0x00FF0000;
#define MINDELAY (0x10) i = i * 2;
#define MYFIODIR IODIR if (i>0x01000000) i =0x00010000;
#define MYFIOSET IOSET }
#define MYFIOCLR IOCLR }
#define MYOUTPUTSHIFT 16 void donothing() {;}
#define MYOUTPUTMASK (0x00FF0000) void Delay(unsigned int cnt)
main() {
{ dcnt=cnt;
Delay(0x1000); while(dcnt )
MYFIODIR = MYOUTPUTMASK; donothing();
MYFIOSET = MYOUTPUTMASK; }
IODIR = 0x00FF0000;
Viết bằng Keil uVision4
#include <LPC210x.H>
#include <LPC21xx.h>
void delay(int time)//Ham delay
{
unsigned int count;
for (count = 0; count<time; count++)
{;}
}
int main(void)
_____________________________________________________________________________
GVHD : Th.S Hà Ngọc Nguyên
5
Đồ Án Kỹ Thuật Lập Trình
{
unsigned int flasher = 0x00010000;
IODIR = 0x00FF0004;

IOSET = 0x00000040;
while(1)
{
delay(0x20000);
IOSET = 0x00FF0000;
IOCLR = flasher ;//& 0x00FF0000;
flasher = flasher<<1;
if (flasher & 0x1000000 ) flasher = 0x00010000;
}
}
PHẦN IV : CHỌN PHẦN MỀM LẬP TRÌNH CHO CHÍP
Hiện nay có nhiều phần mềm lập trình cho LPC2103 như “Keil uVision4” for
ARM đây là phần mềm thông dụng được sử dụng nhiều nhất hiện nay. Bên cạnh đó
còn có “Raisonance Tools” hay còn gọi là Ride7 dành riêng cho ARM, phần mềm
này hỗ trợ khá đầy đủ cho việc lập trình IO,PPL,ADC,PWM cho ARM với việc khai
báo sẵn trong file thư viện (.h), các ví dụ đơn giản trong phần Example. Ngoài ra
người sử dụng có thể khai báo những thanh gi khác mà không có sẵn trong file thư
viện để sử dụng cho những ứng dụng khác.
Ở đây chúng ta sử dụng Raisonance Tools để lập trình cho LPC2103.
GIAO DIỆN VÀ LẬP TRÌNH CƠ BẢN VỚI “RAISONANCE TOOLS”
Biểu tượng Raisonance Tools
_____________________________________________________________________________
GVHD : Th.S Hà Ngọc Nguyên
5
Đồ Án Kỹ Thuật Lập Trình
- Giao diện chính:
Các bước lập trình cho LPC2103 bằng Ride7 như sau:
_____________________________________________________________________________
GVHD : Th.S Hà Ngọc Nguyên

×