KHÁI QUÁT CHUNG VỀ IC PSOC - Pdf 13

Khái quát chung về các IC họ PSoC
2.1. Kiến trúc cơ bản các IC họ PSoC
PSoC là một từ viết tắt của cụm từ tiếng anh Programmable system on chip,
nghĩa là hệ thống khả trình trên một chíp. Các chíp chế tạo theo công nghệ PSoC cho
phép thay đổi được cấu hình bằng cách gán chức năng cho các khối tài nguyên có sẵn
trên chíp. Hơn nữa nó có thể kết nối tương đối mềm dẻo các khối chức năng với nhau
hoặc giữa các khối chức năng với các cổng vào ra. Chính vì vậy mà PSoC có thể
thay thế cho nhiều chức năng nền của một hệ thống cơ bản chỉ bằng một chíp đơn.
Thành phần của chíp PSoC bao gồm: Các khối ngoại vi số và ngoại vi tương tự
có thể cấu hình được, một bộ vi xử lý 8 bit, bộ nhớ chương trình (EEROM) có thể lập
trình được và bộ nhớ Ram khá lớn.
Để lập trình hệ thống, người sử dụng được cung cấp một phần mềm lập trình,
ví dụ như cho các chíp PSoC của Cypress người lập trình phải có phần mềm PSoC
Designer.
Ngoài ra để cài được chương trình điều khiển vào chíp thì người lập trình phải
có một kit phát triển do hãng chế tạo chíp cung cấp (hoặc một bộ nạp).
Phần cứng thiết kế được xây dựng trên cơ sở hướng đối tượng với cấu trúc
module hoá. Mỗi một khối chức năng là một module mềm. Việc lập cấu hình cho
chíp như thế nào là tuỳ thuộc vào người lập trình thông qua một thư viện chuẩn.
Người lập trình thiết lập cấu hình trên chíp chỉ đơn giản bằng cách muốn chíp có
chức năng gì thì kéo chức năng đó và thả vào khối tài nguyên số hoặc tương tự, hoặc
cả hai tuỳ theo chức năng (phương pháp lập trình kéo thả). Việc thiết lập ngắt trên
chân nào, loại ngắt là gì, chân vào ra hoạt động ở chế độ như thế nào đều phụ thuộc
vào việc thiết lập của người lập trình khi thiết kế và lập trình cho PSoC.
Với khả năng đặt cấu hình mạnh mẽ này, một thiết bị đo lường có thể được gói
gọn trên một chíp đơn duy nhất. Chính vì lý do đó, hãng Cypress Microsystems đã
không gọi sản phẩm của mình là vi điều khiển (
µ
C) như truyền thống, mà gọi là hệ
thống có thể lập trình trên một chip và họ hi vọng rằng, với khả năng đặt cấu hình
mạnh mẽ, người sử dụng sẽ có được những thiết bị điều khiển, những thiết bị đó có

P 3
P 4
P 5
I/O Port
Global I/O
Programbale interconect
Analog output
drivers
Analog input
muxing
Clock to analog
Comparator
outputs
Plash Program
Memory

Oscillator
And PLL
SRAM
memory
MAC
Multiply
Accumlate
M8C CPU
Core
Decimator Watchdog
Sleep Timer
LVD/POR Interrupt
Controller
D

5
D
B
A
0
6
D
B
A
0
7
A
C
A
0
0
A
C
A
0
1
A
C
A
0
2
A
C
A
0

3
A
S
B
2
0
A
S
A
2
1
Array of Analog PSoC blocks
Hình 2.1. Sơ đồ khối cấu trúc của PSoC (CY8C26443)
2.1.3. Bộ nhớ linh hoạt trên chíp
- Không gian bộ nhớ chương trình Flash từ 4K đến 16K, phụ thuộc vào
từng loại chíp với chu kỳ ghi xóa cho bộ nhớ là 50.000 lần;
- Không gian bộ nhớ RAM là 256byte;
- Chíp có thể lập trình thông qua chuẩn nối tiếp (ISP);
- Bộ nhớ Flash có thể được cung cấp từng phần;
- Chế độ bảo mật đa năng tin cậy;
- Có thể tạo được không gian bộ nhớ Flash trên chíp lên tới 2.304 byte.
2.1.4. Có thể lập trình được cấu hình cho từng chân của chíp
- Các chân vào ra ba trạng thái sử dụng Trigger Schmit;
- Đầu ra logic có thể cung cấp dòng 25mA với điện trở treo cao hoặc thấp
bên trong;
- Thay đổi được ngắt trên từng chân;
- Đường ra tương tự có thể cung cấp dòng tới 40mA;
- Đường ra đa chức năng có thể từ 6 đến 44 tuỳ thuộc vào từng loại chíp.
2.1.5. Xung nhịp của chíp có thể lập trình được
- Bộ tạo xung dao động 24/48MHz ở bên trong (độ chính xác là 2,5%

F
Registers
RAM
ROM
Bank 0
256 byte
Bank 1
256 byte
Page 0
256 byte
SROM
Flash
Mx64
Byte
bloCks
IOW IOR XIO
MW MR
ID [7;0] PC [15;0]
LEGEND
M: Total number of Flash blocks in device
XIO: Register bank selection
IOR: Register Read
IOW: Register Write
MR: Memory Read
MW: Memory Write
Hình 2.2. Cấu trúc liên kết của CPU với bộ nhớ (cấu trúc Harvard)
DB [7;0] DA [15;0]

sử dụng một mã lệnh 8 bit ví dụ như RET, ASR, INC, DEC
Bảng 2.2. Dạng lệnh 1 byte
Byte 0
8-Bit Opcode
+ Lệnh 2 byte
Lệnh 2 byte là lệnh dùng duy nhất một toán hạng là dữ liệu hay địa chỉ. Lệnh 2
byte sử dụng byte đầu tiên để chứa mã lệnh, byte thứ hai để chứa dữ liệu hoặc địa chỉ
hoặc nó sử dụng 4 bit đầu cho mã lệnh và 12 bit sau cho địa chỉ.
Bảng 2.3. Dạng lệnh 2 byte
Byte 0 Byte 1
4-Bit Opcode 12 Bit relative address
8-Bit Opcode 8 Bit data
8-Bit Opcode 8 Bit address
+ Lệnh 3 byte
Lệnh loại này sử dụng 3 byte bởi vì nó được sử dụng để di chuyển dữ liệu giữa
hai địa chỉ trong không gian địa chỉ mà người sử dụng có thể truy nhập. Hoặc nó
dùng để lưu giữ một giá trị địa chỉ tuyệt đối 16 bit trong các lệnh LCALL và LJMP.
Bảng 2.4. Dạng lệnh 3 byte
Byte 0 Byte 1 Byte 2
8-Bit Opcode 16- Bit address (MSB, LSB)
8-Bit Opcode 8- Bit Data 8- Bit Data
8-Bit Opcode 8- Bit Address 8- Bit address
2.2.2. Thanh ghi ngắt
Bộ điều khiển ngắt cho phép một đoạn mã của người lập trình được thực hiện
mỗi khi có một ngắt sinh ra từ các khối chức năng trong chíp PSoC. Mỗi một khối số
có một ngắt riêng và mỗi cột khối tương tự cũng có một ngắt riêng. Mỗi một ngắt cho
nguồn cấp, chế độ ngủ, xung nhịp thay đổi, và một ngắt toàn cục cho các chân vào ra
đa chức năng.
Dẫy các sự kiện xẩy ra khi một ngắt được thi hành như sau:
- Khi một ngắt được kích hoạt, có thể là do một điều kiện ngắt được sinh ra (do

13 0034h PSOC Block DBB 11
14 0038h PSOC Block DBB 12
15 003Ch PSOC Block DBB 13
24 0060h I
2
C
25(Thấp nhất) 0064h Sleep Timer
- Chương trình sẽ thi hành vector trong bảng vector ngắt. Nhìn chung thì một
lệnh LJMP trong bảng vector ngắt sẽ chuyển sự thi hành của CPU tới trình phục vụ
ngắt của người dùng để phục vụ ngắt này.
- Trình phục vụ ngắt được thi hành. Lưu ý rằng tất cả các ngắt đều bị vô hiệu
hóa kể từ khi bit GIE = 0. Các ngắt khác có thể được mở lại trong trình phục vụ ngắt
nếu cần thiết bằng cách đặt bit GIE =1.
- Khi phục vụ ngắt kết thúc với lệnh RETI thì thanh ghi cờ (CPU_F), byte thấp
và byte cao của bộ đến chương trình được lấy ra khỏi Stack theo đúng trình tự trên.
Từ khi thanh ghi cờ (CPU_F) được khôi phục lại giá trị thì nó sẽ cho phép các ngắt
(GIE =1).
- Chương trình sẽ bắt đầu thi hành ở lệnh kế tiếp, ngay sau khi lệnh được thực
hiện trước khi xẩy ra ngắt. Tuy nhiên, nếu như có ngắt đang chờ được phục vụ thì nó
sẽ được thực hiện trước.
2.2.3. thanh ghi của các cổng vào ra đa chức năng
Cổng vào ra đa chức năng cung cấp cho CPU một giao diện với bên ngoài.
Chúng đòi hỏi một số lượng lớn thanh ghi cấu hình để hỗ trợ cho nhiều hoạt động
vào/ ra bao gồm cả số và tương tự.
Các cổng vào đa chức năng đều có độ rộng là 8 bit/1cổng. Mỗi một cổng
vào/ra bao gồm 8 khối GPIO giống hệt nhau. Mỗi một khối GPIO đều được kết nối
với bit có số thứ tự tương ứng trong địa chỉ và thanh ghi. Bởi vậy, những thanh ghi
thực sự chỉ dành cho một cổng (bao gồm 8 khối GPIO). Trong đó thì vị trí của các
bit sẽ chỉ rõ là khối GPIO nào trong 8 khối được điều khiển với cổng vào ra.
Mỗi một khối GPIO có thể được sử dụng cho những kiểu vào ra sau:

của GPIO là bất kỳ trừ chế độ cao trở.
- Vào ra tương tự
Tín hiệu tương tự có thể được truyền dẫn giữa CPU và chân của chíp thông qua
chân AOUT của khối. Chân này được nối với khối thông qua một điện trở (khoảng
300Ω). Chân vào ra đa chức năng cần phải đưa về chế độ cao trở trong trường hợp
này.
2.2.4. thanh ghi của các bộ tạo dao động
- Bộ tạo dao động chính bên trong
Đầu ra của bộ IM0 có 2 loại, một loại là SYSCLK có thể là nguồn xung nhịp
24MHz ở bên trong hay nguồn xung nhịp bên ngoài, một loại là SYSCLK2x có tần số
xung nhịp gấp đôi SYSCLK. Khi không có đầu vào chính xác cao từ bộ dao động
thạch anh 32KHz thì độ chính xác của nguồn xung nhịp 24/48MHz ở bên trong sẽ là ±
2,5% đối với giải nhiệt độ và hai mức điện áp hoạt động (3,3V± 0,3V và 5,0V± 5%).
Không cần thêm một thành phần bên ngoài nào để đạt được mức độ chính xác này.
Có một lựa chọn để chốt pha của bộ dao động bên trong này sang bộ dao động
thạch anh bên ngoài. Vì thế việc lựa chọn thạch anh và độ chính xác của nó quyết
định tính chính xác của bộ dao động ngoài. Bộ dao động thạch anh bên ngoài cần
phải ổn định trước khi chốt tần số dao động của bộ dao động chính bên trong vào
nguồn xung nhịp này.
Bộ IMO có thể được khoá khi sử dụng nguồn xung nhịp bên ngoài. Bởi vậy,
mạch nhân đôi tần số (SYSCLK2x) có thể được ngắt để tiết kiệm năng lượng cho hệ
thống. Lưu ý rằng khi sử dụng nguồn xung nhịp bên ngoài, nếu như SYSCLK2x
được cần đến thì IMO không thể bị khoá.
- Bộ dao động tốc độ thấp nội tại
ILO là bộ phát xung nhịp nội tại tốc độ thấp 32KHz. Nó có khả năng sinh ra
ngắt để đánh thức chế độ ngủ và reset lại đồng hồ Watchdog. Bộ tạo dao động này
cũng được sử dụng như là một nguồn xung nhịp cho các khối số.
Bộ ILO có thể hoạt động ở ba chế độ: Chế độ bình thường, chế độ nguồn giảm
hoặc chế độ tắt (không sử dụng). Chế độ bình thường tiêu thụ nhiều năng lượng hơn
cho độ chính xác của tần số xung nhịp. Chế độ nguồn giảm luôn luôn được dùng khi

chọn tại thời điểm kết thúc một giây nói trên. khoảng thời gian nghỉ cho phép bộ phát
xung nhịp có thời gian để ổn định trước khi nó trở thành nguồn cung cấp xung nhịp.
+ Ngắt sleep không được mở trong khi việc chuyển đổi đang diễn ra. Reset lại
Sleep Timer để đảm bảo khoảng thời gian nghỉ cần thiết (nếu như nó không giao tiếp
với bất kỳ một hệ thống thời gian thực nào). Lưu ý rằng bộ phát xung nhịp tốc độ
thấp vẫn tiếp tục chạy cho đến khi chuyển hẳn sang bộ phát xung nhịp ngoài nhờ vào
ngắt của Sleep Timer.
+ Thông thường nên đợi hết một giây để bộ phát xung nhịp ổn định rồi mới
cho phép chế độ PLL chốt tần số bộ phát xung nhịp nội tại với tần số của bộ phát
xung nhịp thạch anh 32KHz.
2.3. Hệ thống số
Hình 2.4 dưới đây mô tả cấu trúc cao nhất của hệ thống số trong PSoC.
- Liên kết số toàn cục
Bảng 2.6. Sự sắp xếp bus toàn cục tới các cổng
Global Bus Ports
GIO[7: 0], GOE[7: 0] P1, P3, P5
GIO[7: 0], GOE[7: 0] P0, P2, P4
GDI là một cấu hình kết nối trong dãy tín hiệu hỗn hợp PSoC có mật độ chung
nhất.
GID bao gồm bốn đường bus 8 bit. Hai đường bus là bus đầu vào cho phép tín
hiệu đi từ chân của chíp vào CPU những bus này được gọi là Global input Odd (GIO
[7:0]) và Global Input even (GIE [7:0]). Hai bus khác là bus đầu ra cho phép tín hiệu
đi từ CPU đến các chân của chíp. Chúng được gọi là Global output Odd (GOO[7:0])
và Global output even (GOE [7:0]). Từ “Odd” và ”Even” trong phần tên của bus chỉ
ra rằng cổng nào của chíp có thể được kết nối với bus. Những đường bus có tên
“Odd” được kết nối với tất cả các cổng được đánh số lẻ và những bus có tên “Even”
được kết nối với tất cả các cổng được đánh số chẵn. Lưu ý rằng từ Odd và Even trong
tên bus ám chỉ các cổng chứ không phải là các chân.
Digital system
Digital PSoC

Row bus
Terminal
count out
Comparator
Period
Registor
Compare
registor
Load TC
capture
count
Data
Data Counter
capture
clock
16:1
15:1
n
n
n
4
Hình 2.5. S nguyên lý b nh th iơđồ ộđị ờ
System bus
Analog Bi - Columns
To Digital
System
Digital
Clock
From Core
Analog

hoạt động liên tục và sẽ tải lại các giá trị bên trong của nó từ thanh ghi chu kỳ sau khi
đạt đến giá trị đếm kết thúc. Trong mỗi chu kỳ xung nhịp, bộ đếm sẽ so sánh giá trị
đếm hiện thời với giá trị lưu giữ trong thanh ghi so sánh.
Điều kiện so sánh là “ Less than ” hay “Less than or Equal to ” được kiểm tra
liên tục trong mỗi chu kỳ xung nhịp. Đầu ra so sánh cung cấp mức logic có thể được
dẫn tới các chân Hoặc các module khác. Một ngắt có thể được bật lên khi bộ đếm đạt
đến giá trị giới hạn hoặc khi đầu ra so sánh được xác định.
2.4. Hệ thống tương tự
Hình 2.6 dưới đây cho thấy kiến trúc của hệ thống tương tự trong PSoC
Các khối PSoC là những tài nguyên có thể cấu hình được. Các khối tương tự
trên chíp PSoC sẽ giảm thiểu sự cần thiết cho nhiều loại chíp và những thiết bị ngoại
vi bên ngoài. Các khối PSoC tương tự được cấu hình để cung cấp những chức năng
ngoại vi đa dạng. Phần mềm PSoC Desiger tích hợp với môi trường phát triển sẽ
cung cấp cho ta cấu hình tự động của các khối PSoC bằng cách lựa chọn những chức
năng mong muốn.
Mỗi một khối Analog có rất nhiều khả năng cho đầu vào và một vài đầu ra.
Những đầu vào tới những khối này bao gồm cả những tín hiệu tương tự từ những
khối khác. Nguồn điện áp tham chiếu có thể lấy từ trong chíp hay ngoài chíp tuỳ ý.
Có ba loại khối PSoC: Khối thời gian liên tục (Continues Time - CT), khối
chuyển mạch cho tụ điện (Switch Capacitior - SC) loại C và loại D. Những khối
tương tự này được tổ chức thành các cột. Có bốn cột trong dòng họ CY8C26443.
Một cột khối tương tự bao gồm 1 khối CT, 1 khối SC loại C và 1 khối SC loại D.
Những khối trong cùng một cột sẽ sử dụng nguồn xung nhịp như nhau.
Mỗi một khối tương tự có 3 đầu ra:
- Bus đầu ra tương tự (ABUS) là một đầu ra được chia sẻ với các khối trong
cùng một cột. Trong một thời điểm chỉ có duy nhất một khối được phép sử dụng bus
đầu ra này. Đây cũng là bus đầu ra tương tự duy nhất trực tiếp kích thích cho chân ra
tương tự;
- Bus so sánh là một bus số được chia sẻ với các khối trong cùng một cột. Tại
một thời điểm chỉ có duy nhất một khối được phép sử dụng bus so sánh này;

( From Digital Blocks )
Incremental Gate, One per Column
( From Digital Blocks )
INC SEL
Latch
LUT
From col ( i+1)
From col ( i -1)
PHI2
Comlumn Interupt

PHI2

BYPASS
Output to Sar
Accelerator Input Mux
Destinations
1. Comparator
Register
2. Data Inputs
For
Digital Block
3. Input to
Decimator

CMP Latch
12 khối PSoC tương tự có thể hoạt động độc lập hoặc kết hợp với các khối số để

được những chức năng thích hợp. Với điện áp tham chiếu chính xác sẽ cho phép việc
so sánh tương tự rất chính xác;

P0[5]
P0[3]
P0[1]
P2[3]
P2[1]
8 Pin Part
20 Pin Part
28 to 48 Pin Part
Array Input Configuration
Refin
Agndin
Acb00 Acb01 Acb02 Acb03
Asc10 Asd11 Asc12 Asd13

Asd20 Asc21 Asd22 Asc23
Acol1mux Acol2mux
Interface to
Digital system
Reference
Generator
Aci1[1:0] Aci2[1:0] Aci1[1:0] Aci1[1:0]
Microcontroller interface (addrees bus, data bus)
RefHI AGNDIn
RefLo RefIn
ANGD Bandgap

+Thanh ghi cấu hình vào ra tương tự AMX_IN
Thanh ghi AMX_IN là thanh ghi lựa chọn đầu vào từ chân vào ra của bộ
MUX cho các cột tương tự. Các giá trị của hai bit tương ứng sẽ cho phép lựa chọn
được 4 đầu vào tương ứng với 4 chân đã được quy định cho nó. Cột ACI1 có thêm bộ

lập được điện áp tham chiếu cho chíp trong bảng sau đây:
Bảng 2.7. Bảng thiết lập điện áp tham chiếu cho chip
agnd RefHI RefO Lưu ý
Nguồ điện Nguồn điện Nguồn điện
V
ss
vagnd
vagnd
V
refhi
V
reflow
RefHi
RefLo
Hình 2.9. Sơ đồ nguyên lý mạch tạo đất giả
n áp áp áp
000b Vcc/2 2,5V
1,65V
Vcc/2+Vbg 3,8V
2,95V
Vcc/2-Vbg 1,2V HT 5,0V
HT 3,3V
001b P2[4] 2,2V P2[4]+P2[6] 3,2V P2[4]-P2[6] 1,2V
010b Vcc/2 2,5V
1,65V
Vcc 5V
3,3V
Vss 0,0V
0,0V
HT 5,0V

∗ Độ phân giải 12bit, bù 2;
∗ Tốc độ lấy mẫu 7,8 ÷ 400 mẫu/ giây;
∗ Dải đầu vào AGND ± Vref;
∗ Hỗ trợ chế độ bình thường hoặc chế độ khử hài bậc cao;
∗ Xung nhịp bên trong hoặc bên ngoài.
ADCINC12 là một bộ biến đổi A/D 12bit, bù toàn hai dải (dải đếm từ
-2048 ÷ 2047) với nhiều dải đầu vào có thể chọn lựa. Dải điện áp đầu vào có thể được
đo bằng cách tạo ra điện áp tham chiếu và đất của analog chính xác.
ADCINC12 là một bộ ADC kiểu tích phân, nó có thể hỗ trợ để cắt bỏ những
tần số cao, loại bỏ một cách tối ưu các tần số 50/60 Hz và những bậc hai của tần số
này có thể đạt được bằng cách đặt cửa sổ lấy mẫu là 100ms (tần số lấy mẫu là 9,84
mẫu/giây).
+ ADCINC14 - 14 bit Incremental ADC
+ ADCINCVR - 7 tới 13 bit Variable Resolution Incremental ADC
+ DELSIG8- 8bit Deltal Sigma ADC
System Bus
Input
Data Clock
counter
Hình 2.11. Sơ đồ nguyên lý bộ chuyển đổi ADC 12bit
bufx
A
B
U
S
x
ACA0x
TMUx Control
Test Mux
PMuxOut

trị vào thanh ghi MUL_X và MUL_Y và các kết quả của phép tính được lưu trong
thanh ghi MUL_DH, MUL_DL. Bộ nhân tổng hoạt động khi ghi giá trị vào thanh ghi
MAC_X và MAC_Y và kết quả phép tính được lưu vào thanh ghi ACC_DR3,
ACC_DR2, ACC_DR1, ACC_DR0. A được ghi vào thanh ghi MUL_Y hoặc
MAC_Y tương tự như biến Y tới bộ nhân và bộ nhân tổng. A được viết vào thanh ghi
MAC_CL0 hoặc MAC_CL1 sẽ xoá giá trị trong 4 thanh ghi chứa. Toán tử của bộ
nhân tổng dựa trên số bị nhân vào chính xác. Giá trị đầu tiên của số bị nhân phải đặt
trên thanh ghi MUL_X hoặc MUL_Y để tránh bộ nhân tổng xử lý. Giá trị thứ hai cần
phải đặt trên thanh ghi MAC_X hoặc MAC_Y bằng cách khởi tạo giá trị của bộ nhân
tổng. MUL_X, MUL_Y, MAC_X, MAC_Y là thanh ghi 8bit (Có dấu). MUL_DL và
MUL_DH là thanh ghi 16 bit (có dấu). ACC_DR0, ACC_DR1, ACC_DR2,
ACC_DR3, là thanh ghi 32 bit (có dấu). Có nhiều lệnh cần phải được chèn vào giữa
các toán tử của MAC để tạo ra giữ chậm, nếu điều này không thực hiện thì kết quả
của bộ chứa không chính xác.
2.5.2. Bộ suy giảm tần số lấy mẫu (Decimator)
Đầu ra của bộ điều chế delta- sigma có tốc độ cao, từng bit A/D được biến đổi.
Từng bit A/D được biến đổi là một ứng dụng nhỏ cho nhiều ứng dụng khác nhau và
nhiều bit ra được chuyển đổi với tốc độ thấp. Để chuyển đổi tốc độ biến đổi bit cao
sang tốc độ biến đổi bit thấp cần bộ suy giảm tần số lấy mẫu. Bộ suy giảm tần số lẫy
32 bit
Accumlator
multiplier
Mul_X or
MAC_X
Mul_Y or
MAC_Y
Mul_DH

ACC_DR3


độ thấp hơn để nâng cao độ chính xác của dữ liệu ra.
2.5.3. Reset
Chip hỗ trợ hai kiểu reset. Khi reset được khởi động thì tất cả các thanh ghi
được phục hồi trạng thái ban đầu và các ngắt mất tác dụng.
Các kiểu reset: reset lại nguồn (POR), reset ngoài (X
Res
), reset bộ định thời (WDR).
Sự xuất hiện reset được ghi trên thanh ghi trạng thái và điều khiển (CPU_SCR). Bit
trong thanh ghi này ghi trường hợp POR hoặc WDR tương ứng. Vi chương trình sẽ
hỏi cụ thể lý do của reset.
- reset lại nguồn (POR)


Nhờ tải bản gốc
Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status