Mục lục
Chương I 3
Giới Thiệu Về Phần Mềm .3
I.1. Phần Mềm Quartus II 3
I.2. SOPC BUILDER . 11
I.2.1 Khái niệm về SOPC: 11
I.2.2 Thiết Kế SOPC Builder Dùng Mã Verilog 15
I.3 Phần Mềm NIOS II IDE 21
I.3.1 Tổng quan các tính năng của bộ vi xử lý NIOS II: 22
I.3.2 Cấu Trúc Thanh Ghi . 23
I.3.3. Truy Xuất Bộ Nhớ Và Thiết Bị I/O 26
I.3.4. Địa Chỉ . 27
I.3.5. Tập Lệnh . 28
I.4 Board DE2 29
I.4.1. Tính năng của mạch DE2 29
I.4.2. Thông số kỹ thuật 30
I.4.3. Những Ví Dụ Về Những ứng Dụng Cao Cấp . 34
Chương II 36
Audio Codec W8731/L .36
II.1 Giới Thiệu Về AUDIO CODEC W8731/L . 36
II.1.1 Đường Dẫn Line Input . 38
II.1.2 Ngõ Vào Microphone . 41
II.1.3 MICROPHONE BIAS 41
II.1.4 Bộ Lọc ADC 41
II.1.5 Bộ Lọc DAC 43
II.1.6 Line Ngõ Ra. . 44
II.1.7 HEADPHONE AMPLIFIER 45
II.2 Các Chế Độ Hoạt Động 47
II.2.1 SYPASS MODE 47
II.2.2 SIDETONE MODE 49
II.3 Hoạt Động Của Thiết Bị 50
II.3.1 Cài Đặt Lại Thiết Bị . 50
II.3.2 Lược Đồ CLOCKING . 50
II.3.3 LÕI XUNG CLOCK. 51
II.3.4 Máy Tạo Dao Động CRYSTAL 51
II.3.5 CLOCKOUT . 52
II.3.6 Giao Diện Phần Mềm . 53
II.3.7 Chế Độ Năng Lượng . 55
II.3.8 Bản Đồ Thanh Ghi . 59
II.3.9 Nét Đặc Trưng Của Đầu Lọc Kỹ Thuật Số . 59
II.3.10 Sự Hoạt Động Ở Chế Độ Master/Slave. 61
II.4 Mô tả tổng quát về SD CARD . 62
II.4.1 Tính Năng . 63
II.4.2 Ứng dụng 63
II.4.3 Mô Tả Port Của SD Card . 63
II.5 Định Dạng FAT 64
II.6 Khái Niệm Về Tập Tin Wave 68
Chương 3 Hệ Thống Tổng Quát 70
III.1 Thiết Kế Mô Hình SD Music Player. 70
III.2 Chương Trình Demo . 71
III.2.1 Các Định Nghĩa Thiết Lập . 71
III.2.2 Các Chương Trình Con Và Các Hàm Con 73
III.2.3 Chương Trình Chính 85
Tài liệu tham khảo 89
Phụ Lục 90
91 trang |
Chia sẻ: lvcdongnoi | Lượt xem: 2725 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Nghiên cứu hệ thống nhúng trên sopc builder và ứng dụng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
với đường dẫn 1Vrms tín hiệu BYBASS, kết quả của tín hiệu LINEOP sẽ bị chia
cắt.
Register
address Bit Nhãn Mặc Định Phần Mô Tả
0000100
Analogue
Audio path
Control
3 BYPASS 1 Bypass Swich (analogue)
1 = enable Bypass
0 = disable Bypass
Bảng 10 Điều Khiển Phần Mềm Trong Chế Độ Bypass
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 48
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
II.2.2 SIDETONE MODE
WM8731/L cũng bao gồm chế độ cạnh tín hiệu số nơi mà ngõ vào tai nghe
được định hướng đến đường dẫn và ngõ ra tai nghe. Hình ảnh được thể hịên ở hình 24.
Chến độ Sidetone cho phép ngõ vào microphone bị yếu đi đến ngõ ra cho ứng dụng
telephone và headset.
Hình 2.2.2 Lược Đồ Chế Độ Sidetone
Register
address Bit Nhãn Mặc Định Phần Mô Tả
5 SIDETONE 0 Sidetone Swich (analogue)
1 = enable Side Tone
0 = disable Side Tone
0000100
Analogue
Audio path
Control 7:6 SIDEATT 00 Side Tone Attenuation
11= -15 dB
10 = -12dB
01= -9 dB
00= - 6 dB
Bảng 11 Chế Độ Sidetone
Chế độ cạnh tín hiệu số và sự suy giảm được chọn dưới sự điều khiển của phần
mềm sử dụng bit SIDETONE được thể hiện ở bảng 10.Tín hiệu cạnh ngõ ra từ DAC
và Line ngõ vào (BYBASS) không nên chọn từ khối Line ngõ ra. Tuy nhiên, điều này
cũng có thể được sử dụng để tổng hợp ngõ ra DAC, đường dẫn ngõ vào và ngõ vào
microphone lại với nhau. Điều khiển microphone boost gain và điều khiển âm lượng
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 49
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
và mute ngõ ra headphone vẫn hoạt động ở chế độ tín hiệu cạnh. Tín hiệu lớn nhất tại
bất kì điểm nào trong đường dẫn tín hiệu cạnh phải không lớn hơn 1.0Vrms tại
VDD=3.3V, để tránh sự không chính xác. Biên độ này phải kiểm tra ngay lệp tức với
AVDD.
II.3 Hoạt Động Của Thiết Bị
II.3.1 Cài Đặt Lại Thiết Bị
WM8731/L chứa đựng năng lượng trên mạch xác lập lại mà xác lập lại trạng
thái của thiết bị bên trong. Năng lượng xác lập lại được ứng dụng như là năng lượng
DCVDD và phóng điện chỉ sau khi mức độ địên thế của DCVDD giao với ngưỡng
thấp nhất. Nếu sau đó DCVDD rơi thấp hơn ngưỡng điện thế nhỏ nhất sau đó năng
lượng được xác lập lại được ứng dụng lại. Ngưỡng địên thế và kết hợp hiện tượng trễ
được thể hiện trong bảng Electrical Characteristics. Người sử dụng cũng có khả năng
xác lập lại thiết bị để biết tình trạng bằng cách điều khiển phần mềm được thể hiện ở
hình bên dưới.
Register address Bit Nhãn Mặc Định Phần Mô Tả
0001111
Reset Register
8:0 RESET Not reset Reset Register
Writing 00000000 to register
resets device
Bảng 12 Điều khiển phần mềm của reset.
Khi sử dụng xác lập lại phần mềm trong chế độ 3-wire, sự xác lập lại được ứng
dụng trên sự gia tăng tuổi của CSB và released trên sự gia tăng tuổi tiếp theo của
SCLK.In 2-wire mode, sự xác lập lại được ứng dụng trong khoảng thời gian của tín
hiệu ACK (khoảng 1 SCLK thời gian)
II.3.2 Lược Đồ CLOCKING
Trong đặc trưng hệ thống kĩ thuật số audio, chỉ có một nguồn xung clock trung
tâm sản xuất xung clock tham chiếu mà tất cả dữ liệu audio đựơc đồng bộ hoá. Xung
clock này thường liên hệ với hệ thống xung clock chủ. cho phép WM8731/L sử dụng
trong hệ thống khoá trung tâm, WM8731/L có khả năng phát sinh hệ thông khoá này
hoặc nhận nó từ nguồn bên ngoài.
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 50
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
Trong ứng dụng này, WM8671/L được mong muốn là hệ thống xung clock
nguồn, sau đó xung clock trung tâm được tiến hành trong quá trình sử dụng tinh thể
phù hợp được kết nối giữa ngõ vào XTI/MCLK và ngõ ra pin XTO
Trong ứng dụng này, những tính năng khác hơn hẳn WM8731/L sẽ được tạo ra
ở xung clock tham chiếu, hệ thống bên ngoài có thể được ứng dụng cụ thể trong ngõ
vào XTI/MCLK pin mà không cần sự điều khiển của phần mềm. Chú ý rằng trong tình
huống này, máy tạo giao động mạch của WM8731/L giảm năng lượng an toàn để bảo
toàn năng lượng.
II.3.3 LÕI XUNG CLOCK.
Lõi WM8731/L DSP có thể có 1 xung clock MCLK hoặc 2 xung MCLK riêng
biệt. Được điều khiễn bởi phần mềm trong bảng 12.
Register
address Bit Nhãn Mặc Định Phần Mô Tả
0001000
Sampling
Control
6 CLKIDIV2 0 Core Clock Divider Select
1= Core Clock Is MCLK Divied
By 2
0 = Core Clock is MCLK
Bảng 13 Điều Khiển Phần Mềm Của Lõi Clock.
Có 1 MCLK chia rẽ có thể lập trình được cho phép thiết bị được dùng trong
những ứng dụng xung clock chủ tần số cao có sẵn. Ví dụ thiết bị có thể hỗ trợ xung
clock chủ 512fs trong khi hoạt động cơ bản ở chế độ 256fs.
II.3.4 Máy Tạo Dao Động CRYSTAL
WM8731/L bao gồm một mạch tạo dao động Crystal cho phép xung clock tham
chiếu đến hệ thống audio được khởi tạo trên thiết bị. Điều này có sẵn dựa trên hệ thống
audio trong bộ nhớ đệm tạo thành CLKOUT. Máy tạo dao động Crystal là một kiểu
nhiệt thấp, được thiết kế cho EMI thấp.
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 51
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
Hình 2.3.1 Mạch Ứng Dụng Máy Tạo Dao Động Crystal.
Miền tần số của Crystal là 12MHz, Cp đề nghị là 10pF. Miền tần số của Crystal
là 18MHz, Cp đề nghị là 15pF. Máy tạo dao động Crystal của WM8731/L cung cấp
nguồn xung clock thấp cực độ. Nguồn xung clock thấp là một nhu câu cho ADC và
DAC audio chất lượng cao không quan tâm cấu trúc máy chuyển đổi. Cấu trúc máy
WM8731/L ít bị ảnh hưởng bởi kỹ thuật của máy chuyển đổi hơn tuy nhiên vẫn đòi
hỏi các xung điện với tốc độ ít hơn tương đương 1ns dao động để duy trì chương trình.
Trong ứng dụng có nhiều hơn một nguồn xung clock master, nó được đề nghị rằng một
xung Clock được khởi tạo bởi WM8731/L để giảm rủi ro tới mức tối thiểu.
II.3.5 CLOCKOUT
Lõi xung clock là bộ nhớ đệm bên trong và được làm sẵn bên ngoài đến một hệ
thống audio trên chân ngõ ra CLKOUT. CLKOUT cung cấp mô hình của Core Clock,
nhưng bộ nhớ đệm phù hợp cho đường dẫn bên ngoài nhập vào.
Không có đảo pha giữa XTI/MCLK, Core Clock và CLOLKOUT nhưng ở đó chắc
chắn sẽ bị trễ. Việc delay sẽ phụ thuộc vào việc đưa vào CLOCKOUT.
CLKOUT cũng có thể bị chia cắt bởi 2 điều khiển phần mềm bên dưới. Đề cập
trong bản 12. Chú ý rằng nếu CLKOUT không yêu cầu khi đó bộ nhớ đệm CLKOUT
trên WM8731/L có thể giảm năng lượng an toàn để bảo tồn điện năng. Nếu cấu trúc hệ
thống có chọn lựa giữa sử dụng FCLKOUT=FMCLK hoặc FCLKOUT=FMCLK/2 trong giao
diện, sau cùng đề nghị để bảo toàn năng lượng. Khi hai lựa chọn CLKOUT thay đổi
trên tác động cạnh lên của MCLK, phải đề cập đến thông tin timing.
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 52
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
Register
address Bit Nhãn Mặc Định Phần Mô Tả
0001000
Sampling
Control
7 CLKODIV2 0 CLKOUT Divider Select
1= CLOCKOUT Is Core Clock
Divied By 2
0 = CLOCKOUT is Core Clock
Bảng 14 Lập Trình Của CLKOUT
II.3.6 Giao Diện Phần Mềm
Giao diện phần mềm có thể được sử dụng hoặc 3-wire (tương thích SPI) hoặc là
2- wire giao diện MPU. Lựa chọn định dạng giao diện được thực hiện bằng cách thiết
lập trạng thái của pin MODE. Trong chế độ 3-wire, SDIN được sử dụng cho dữ liệu
của chương trình, SCLK được dùng cho clock trong dữ liệu chương trình và CSB được
dùng khóa rập ngoài dữ liệu chương trình. Trong chế độ 2-wire SDIN được sử dụng
cho dữ liệu serial và SCLK được sử dụng cho clock serial, trong chế độ 2-wire, trạng
thái của pin CSB cho phép người dùng lựa chọn 1 trong 2 địa chỉ.
II.3.6.1 Sự Lựa Chọn Chế Độ Điều Khiển Serial.
Giao diện serial co thể được lựa chọn để họat động trong chế độ 2 hoặc 3-wire.
Điều này được thực hiện bằng cách thiết lập trạng thái của pin MODE.
MODE Định Dạng Giao Diện
0 2 wire
1 3 wire
Bảng 15 Giao Diện Lựa Chọn MODE
II.3..6.2 Chế Độ Điều Khiển Serial 3-Wire (Tương Thích SPI)
WM8731/L có thể điều khiển dùng giao diện serial 3 wire. SDIN được sử dụng
cho dữ liệu chương trình, SCLK được sử dụng để clock dữ liệu chương trình và CSB
được dùng khóa rập ngoài dữ liệu chương trình.
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 53
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
Hình 2.3.2 Giao Diện Serial 3-Wire
Chú ý:
¾ B[15:9] là các bit điều khiển địa chỉ.
¾ B[8:0] là bit điều khiển dữ liệu.
¾ CSB là tích cực cạnh không có cấp độ tích cực. Dữ liệu được hiểu trên cạnh
lên của CSB.
II.3.6.3 Chế Độ Điều Khiển Serial 2-Wire.
WM8731/L hỗ trợ một giao diện serial MPU. Thiết bị hoạt động chỉ như một thiết
bị Slave. WM8731/L có một trong hai địa chỉ slave mà được lựa chọn bằng cách thiết
lập trạng thái của pin 15, (CSB).
Hình 2.3.4 Giao Diện Serial 2 - wire
¾ B[15:9] là các bit điều khiển địa chỉ.
¾ B[8:0] là bit điều khiển dữ liệu.
Trạng Thái CSB Địa Chỉ
0 0011010
1 0011011
Bảng 16 Lựa Chọn Địa Chỉ Giao Diện MPU 2 – Wire
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 54
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
Để điều khiển WM8731/L trên bus 2-wire thiết bị điều khiển master cần phải
chuyển đổi dữ liệu bằng cách thiết lập điều kiện bắt đầu, định nghĩa bởi chuyển tiếp
cao hoặc thấp trên SDIN trong khi SCLK còn lại cao. Một địa chỉ và một dữ liệu
chuyển đổi sẽ theo sau. Tất cả ngoại vi trên bus 2-wire đáp ứng điều kiện bắt đầu và
dịch vào trong 8 bit kế tiếp (7 bit dữ liệu + bit R/W). Chuyển bit MSB trước tiên. 7 bit
địa chỉ bao gồm 6 bit địa chỉ cơ bản + 1 bit đơn có thể lập trình để lựa chọn 1 trong 2
thiết bị sẵn sàng cho thiết bị này. Nếu địa chỉ chính xác được nhận và bit R/W là “0”,
biểu thị là ghi, sau đó WM8731/L sẽ đáp ứng bằng cách kéo SDIN xuống thấp trên
xung clock kế tiếp (ACK). WM8731/L chỉ ghi vào thiết bị và sẽ chỉ đáp ứng lại khi bit
R/W biểu thị ghi. Nếu địa chỉ không được chấp nhận thiết bị sẽ trả về điều kiện vô ích
và chờ một điều kiện bắt đầu mới và một địa chỉ vững chắc.
Mỗi lần WM8731/L thừa nhận một địa chỉ đúng, bộ điều khiển sẽ gởi 8 bit dữ
liệu(bit B15-B8). WM8731/L sau đó sẽ thừa nhận dữ liệu đã gởi bằng cách kéo SDIN
xuống thấp cho một xung clock. Bộ điều khiển sau đó sẽ gửi 8 bit dữ liệu còn lại (bit
B7-B0) và WM8731/L sẽ xác nhận một lần nữa bằng cách kéo SDIN xuống mức thấp.
Điều kiện dừng được định nghĩa khi có một chuyển tiếp từ thấp đến cao trên
SDIN trong khi SCLK ở mức cao. Nếu điều kiện bắt đầu hoặc kết thúc được phát hiện
ra bên ngoài của bất kì điểm nào trong dữ liệu chuyển đổi sau đó thiết bị sẽ nhảy đến
điều kiện không hiệu quả.
Sau khi nhận được một địa chỉ hoàn tất và dữ liệu liên tiếp WM8731/L sẽ quay
lại trạng thái không hiệu quả và chờ một điều kiện bắt đầu khác, địa chỉ thiết bị và và
bit R/W theo sau bởi 16 bit thanh ghi địa chỉ và dữ liệu.
II.3.7 Chế Độ Năng Lượng
WM8731/L chứa chế độ bảo toàn năng lượng trong khối mạch khác nhau có thể
hạ năng lượng xuống một cách an toàn trong mức bảo tồn năng lượng.
Register address Bit Nhãn Mặc định Phần Mô Tả
0000110
Power Down
Control
0 LINEINPD 1 Line Input Power Down
1= Enable Power Down
0 = Disable Power Down
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 55
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
1 MICPD 1 Microphone Input An Bias
Power Down
1= Enable Power Down
0= Disable Power Down
2 ADCPD 1 Adc Power Down
1= Enable Power Down
0= Disable Power Down
3 DACPD 1 DAC Power Down
1= Enable Power Down
0 = Disable Power Down
4 OUTPD 1 Line Output Power Down
1= Enable Power Down
0= Disable Power Down
5 OSCPD 0 Oscillator Power Down
1= Enable Power Down
0= Disable Power Down
6 CLKOUTPD 0 CLKOUT Power Down
1= Enable Power Down
0= Disable Power Down
7 POWEROFF 1 Power Off Device
1= Device Power Off
0 = Device Power On
Bảng 17 Điều Khiển Phần Mềm Chế Độ Bảo Tồn Năng Lượng
Điều khiển năng lượng hạ xuống có thể được sử dụng hoặc để Cố định chức
năng disable khi không có yêu cầu trong ứng dụng nào đó. Hoặc để linh động chức
năng tăng và hạ năng lượng phụ thuộc vào chế độ họat động ví dụ trong lúc nghe lại
hay ghi âm.
LINEINPD : đồng thời hạ năng lượng cả 2 line ngõ vào. Điều này có thể thực
hiện linh động không cần bất cứ kết quả có thể nghe thấy nào hoặc trên ADC hoặc trên
Line ngõ ra trong chế độ Bypass. Điều này được dùng khi thiết bị nhập vào chế độ
PlayBack, Pause hoặc Stop hoặc ngõ vào Microphone được chọn.
MICPD: đồng thời hạ năng lượng cả hai ngõ vào Microphone và Microphone
Bias. Nếu điều này thực hiện linh động, có thể nghe tiếng pop do ADC mang lại. điều
này chỉ có thể nghe thấy nếu ngõ ra Microphone được chọn đến ADC vào thời điểm.
Nếu trạng thái của MICPD bị thay đổi sau đó việc điều khiển DSP hoặc vi xử lý sẽ
chuyển đến chọn Line ngõ ra như ngõ ra đến ADC (INSEL) trước khi thay đổi
MICPD. Điều này dùng khi thiết bị nhập vào chế độ PlayBack, Pause, hoặc Stop hoặc
ngõ vào Microphone không được chọn.
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 56
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
ADCPD: hạ năng lượng ADC và bộ lọc ADC. Nếu điều này thực hiện linh hoạt
sau đó tiếng pop có thể nghe được sẽ cho kết quả bất kỳ tín hiệu ở hiện tại qua ADC.
Để khắc phục điều này bất cứ khi nào ADC bị hạ năng lượng, hoặc mute ngõ vào
Microphone hoặc MUTELINEIN, sau đó thay đổi ADCPD. Điều này dùng khi thiết bị
nhập vào chế độ PlayBack, Pause, Stop không kể là Microphone hay Line ngõ vào
được chọn.
DACPD: hạ năng lượng DAC và bộ lọc DAC. Nếu điều này thực hiện linh hoạt
sau đó tiếng pop có thể nghe được sẽ cho kết quả trừ khi những nguyên tắc sau đây
xảy ra. Mục đích để ngăn ngừa tiếng pop, DAC sẽ bị soft-mute trước (DACMU), ngỏ
ra sau đó từ line và ngõ ra headphone (DACSEL), sau đó DAC sẽ bị hạ năng lượng.
Điều này dùng khi thiết bị nhập vào chế độ ghi âm, Pause, Stop hoặc chế độ Bypass.
OUTPD: hạ năng lượng Line ngõ ra và ngõ ra headphone. Nếu điều này thực
hiện linh hoạt sau đó tiếng pop có thể nghe được sẽ cho kết quả trừ khi DAC bị soft-
mute trước (DACMU). Điều này dùng khi thiết bị nhập vào chế độ ghi âm, Pause,
hoặc Stop.
OSCPD: tắt năng lượng trên board máy tạo dao động crystal. Ngõ vào MCLK
sẽ họat động không phụ thuộc máy tạo dao động bị hạ năng lượng.
CLKOUTPD: hạ năng lượng pin CLOCKOUT. Điều này bảo toàn năng lượng,
làm giảm âm thanh số và sự phát ra của RF nếu không được yêu cầu. CLKOUT được
giữ ở mức thấp khi năng lược hạ. Thiết bị có thể được đặt trong chế độ standby
(STANDBY) bằng cách hạ năng lượng tất cả mạch audio dưới dạng điều khiển phần
mềm. Nếu máy tạo dao động Crystal and/or pin CLOCKOUT sử dụng sẽ nhận được từ
hệ thống clock master, điều này sẽ có thể không bao giờ bị tắt năng lượng trong chế độ
standby.
PO
W
ER
O
FF
C
LO
C
K
O
U
TP
D
O
SC
PD
O
U
TP
D
D
A
C
PD
A
D
C
PD
M
IC
PD
LI
N
EI
N
PD
Mô Tả
0 0 0 1 1 1 1 1 Standby, nhưng với máy tạo dao động crystal
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 57
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
OS và CLOCKOUT sẵn sàng
0 1 0 1 1 1 1 1
Standby, nhưng với máy tạo dao động crystal
OS sẵn sàng và CLOCKOUT không sẵn sàng
0 1 1 1 1 1 1 1
Standby, nhưng với máy tạo dao động crystal
OS và CLOCKOUT không sẵn sàng
Bảng 18 Chế Độ Stanby
Trong chế độ stanby giao diện điều khiển, một phần nhỏ của kỹ thuật số và
vùng mạch tương tự tích cực còn lại. Tín hiệu tương tự tích cực bao gồm tín hiệu
tương tự VMID chuyển đến vì thế mà Line ngõ vào tương tự, line ngõ ra và ngõ ra
headphone vẫn hướng đến VMID. Việc làm giảm này bất cứ kết quả có thể nghe được
nguyên nhân bởi glitches DC khi nhập vào hay rời bỏ chế độ standby. Thiết bị có thể
bị tắt năng lượng bằng cách ghi đến bit POWEROFF của thanh ghi POWER DOWN.
Trong chế độ tắt năng lượng Giao diện và một phần nhỏ của kỹ thật số tích cực còn lại.
Tín hiệu tương tự VMID bị disable. Như trong chế độ Standby máy tạo dao động
crystal and/or pin CLKOUT có thể không phụ thuộc vào điều khiển.
PO
W
ER
O
FF
C
LO
C
K
O
U
TP
D
O
SC
PD
O
U
TP
D
D
A
C
PD
A
D
C
PD
M
IC
PD
LI
N
EI
N
PD
Mô Tả
1 0 0 x x x x x
Power off, nhưng với máy tạo dao động
crystal OS và CLKOUT sẵn sàng
1 1 0 x x x x x
Power off, nhưng với máy tạo dao động
crystal OS sẵn sàng và CLKOUT không
sẵn sàng
1 1 1 x x x x x
Power off, nhưng với máy tạo dao động
crystal OS và CLKOUT không sẵn sàng
Bảng 19 Chế Độ Poweroff
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 58
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
II.3.8 Bản Đồ Thanh Ghi
Có 11 thanh ghi, mỗi thanh ghi 16 bit (7 bit địa chỉ, 9 bit dữ liệu). Điều này có
thể điều khiển dùng giao diện hoặc 2 wire hoặc 3 wire.
REGISTER
B
15
B
14
B
13
B
12
B
11
B
10
B
9
B8 B7 B6 B5 B4 B3 B2 B1 B1
R0(00h) 0 0 0 0 0 0 0
LRIN
BOTH
LIN
MUTE
0 0 LINVOL
R1(02h) 0 0 0 0 0 0 1
RLIN
BOTH
RIN
MUTE
RINVOL
R2(04h) 0 0 0 0 0 1 0
LRHP
BOTH
LZCEN LHPVOL
R3(06h) 0 0 0 0 0 1 1
RLHP
BOTH
RZCE
N
RHPVOL
R4(08h) 0 0 0 0 1 0 0 0 SIDEATT
SIDE
TONE
DACS
EL
BYPA
SS
INS
EL
MUT
EMIC
MIC
BOOS
T
R5(0Ah) 0 0 0 0 1 0 1 0 0 0 0 HPQR
DAC
MU
DEEMPH
ADC
HPD
R6(0Ch) 0 0 0 0 1 1 0 0
PWR
OFF
CLKOU
TPD
OSCP
D
OUTP
D
DACP
D
AD
CPD
MICP
D
LINEI
NPD
R7(0Eh) 0 0 0 1 1 1 0
BCLK
INV
MS
LRS
WAP
LRP IWL FORMAT
R8(10h) 0 0 0 1 0 0 0 0
CLKO
DIV2
CLKI
DIV2
SR BOSR
USB/
NOM
AL
R9(12h) 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0
ACTI
VE
R15(1Eh) 0 0 0 1 1 1 1 RESET
ĐỊA CHỈ DỮ LIỆU
Bảng 20Bản Đồ Thanh Ghi Chương Trình
II.3.9 Nét Đặc Trưng Của Đầu Lọc Kỹ Thuật Số
Bộ lọc số ADC và DAC làm việc khác nhau. Bộ lọc kỹ thuật số có 4 kiểu, được
gọi là kiểu 0,1,2 và kiểu 3.
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 59
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
Tham Số Kiểm Tra Điều Kiện Min TYP Max Đơn Vị
Bộ Lọc Số ADC Loại 1 (chế độ USB, tần số họat động 250fs)
+/-0.05dB 0 0.416fs
Passband
-6dB 0.5fs
Passband Ripple +/-0.05 dB
Stopband 0.584fs
Làm Giảm Stopband f>0.584fs -60 dB
Bộ Lọc Số ADC Loại 1 (chế độ USB, 272fs hoặc hoạt động chế độ Normal)
+/- 0.05 dB 0 0.4535fs
Passband
-6dB 0.5fs
Passband Ripple +/- 0.05 dB
Stopband 0.5465fs
Làm Giảm Stopband f > 0.5465fs -60 dB
-3dB 3.7
-0.5dB 10.4
High Pass Filter Corner
Frequency
-0.1dB 21.6
Hz
Bộ Lọc Số DAC Loại 0(chế độ USB, 250fs)
+/- 0.03 dB 0 0.416
Passband
-6dB 0.5fs
Passband Ripple +/-0.03 dB
Stopband 0.584fs
Làm Giảm Stopband f> 0.584fs -50 dB
Bộ Lọc Số DAC Loại 1 (chế độ USB, 272fs hoặc hoạt động chế độ Normal)
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 60
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
+/- 0.03 dB 0 0.4535
Passband
-6dB 0.5fs
Passband Ripple +/- 0.03 dB
Stopband 0.5465fs
Làm Giảm Stopband f > 0.5465 fs -50 dB
Bảng 21 Đặt Tính Của Bộ Lọc Số
II.3.10 Sự Hoạt Động Ở Chế Độ Master/Slave.
WM8731/L có thể được cấu hình như là chia ra 2 chế độ master hoặc slave. Khi
thiết bị ở chế độ Master WM8371/L kiểm soát sự sắp xếp theo thứ tự của dữ liệu và
xung clock trên giao diện kỹ thuật số. Khi thiết bị Slave ở chế độ WM8731/L trả lời từ
dữ liệu tới xung clock, nó sẽ nhận được giao diện kỹ thuật số. Chế độ này được lập ra
với bit MSB của thanh ghi điều khiển.
Register
address
Bit Nhãn Mặc định Phần Mô Tả
0000111
Digital Audio
interface format
6 MS 0 Master Slave Mode Control
1 = Enable Master Mode
0= Enable Slave Mode
Bảng 22 Lập Trình Chế Độ Master/Slave
Khi thiết bị ở chế độ Master WM8731/L điều khiển sự sắp xếp của dữ liệu
chuyển đổi (ADCDAT, DACDAT) và xung clock ngõ ra (BCLK, SDCLRC,
DACLRC) trên giao dịên kỹ thuật số. Nó sử dụng quy trình tạo ra xung clock hoạt
động từ mạch hoặc ngõ vào MCLK khi tham chiếu xung clock và trạng thái của dữ
liệu. ADCDAT luôn luôn là ngõ ra và DACDAT luôn luôn là ngõ vào. Chế độ master
hoặc slave không phụ thuộc vào WM8731/L
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 61
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
Hình 2.3.5 Chế Độ Master.
Khi thiết bị ở chế độ slave WM8731/L biểu diễn sự thay đổi dữ liệu
(ADCDAT, DACDAT) trên giao diện kỹ thụât số thông tin ra bên ngoài được áp dụng
cho xung clock (BCLK, SDCLRC, DACLRC).
Chú ý rằng WM8731/L dựa vào mối quan hệ điều khiển giữa giao diên audio
ACLK, DACLRC và master MCLK hoặc CLKOUT.
Hình 2.3.6 Chế Độ Slave.
II.4 Mô tả tổng quát về SD CARD
Lõi SD Bus với giao diện Avalon cho phép truy xuất dễ dàng của hệ thống
SOPC Builder đến thiết bị Secure Digital Card chuẩn ( SD Card). Lõi SD Bus dễ dàng
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 62
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
hợp nhất với bất kỳ hệ thống SOPC builder nào được tạo ra. Đễ xử lý Nios II, EL
Camino cung cấp driver mức thấp cố định với lõi SD Bus. Driver cung cấp truy xuất
phổ biến cho thiết bị nhớ SD. Vì thế không cần phải viết thêm bất kỳ code để đọc hoặc
ghi dữ liệu từ hoặc đến SD card.
II.4.1 Tính Năng
¾ Hỗ trợ SD card trong chế độ SD Bus (4 bit hay 1 bit).
¾ Hỗ trợ SD Card bộ nhớ năng suất cao (SDHC).
¾ Hỗ trợ chế độ tốc độ cao lên đến tốc độ xung clock là 50 MHz.
¾ Bao gồm driver mức thấp.
¾ File hệ thống có sẵn tuy chọn FAT12/FAT16/FAT32.
¾ Ứng dụng Window cho phép đọc/ghi truy xuất dữ liệu trên nền PC.
¾ Bộ tương thích đầu tiên cho board phát triển Altera và El Camino Nios II .
II.4.2 Ứng dụng
Lõi SD Bus ứng dụng cho các thiết bị lưu động, chuẩn và có thể trao đổi, lưu
trữ truyền thông phụ thuộc vào ứng dụng NIOS II. Khác với ứng dụng cung cấp cho
window nó dễ dàng chuyển đổi dữ liệu giữa ứng dụng Nios II và nền PC.
II.4.3 Mô Tả Port Của SD Card
Thẻ nhớ SD card gồm một số port chính sau :
¾ SD_CLK (ngõ ra) : tín hiệu xung clock đến thẻ nhớ SD card. Xung clock này
nhận từ xung hệ thống bởi tham số xung clock phân chia ra. Tần số xác định tốc
độ dữ liệu và thiết lập tự động bởi phần mềm driver. Gán vào pin 5 của SD
Card.
¾ SD_CMD (ngõ vào/ngõ ra) : tín hiệu 2 chiều câu lệnh/ trã lời. gán vào pin 2 của
SD Card.
¾ SD_DAT[3 : 0] (ngõ vào/ ngõ ra): tín hiệu dữ liệu 2 chiều. SD_DAT3 gán vào
pin 1. SD_DAT2 gán vào pin 9. SD_DAT1 gán vào pin 8. SD_DAT0 gán vào
pin 7.
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 63
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
II.5 Định Dạng FAT
FAT (File Allocation Table) là hệ thống file được giới thiệu lần đầu tiên vào
năm 1981 cùng với sự ra đời của MS-DOS . Mục đích của FAT là cung cấp một bản
đồ giữa những Cluster - nó là đơn vị cơ bản của lưu trữ logic trên đĩa với mức độ hệ
điều hành , và vị trí vật lí của dữ liệu được xác định bởi Cylinder , Track và Sector
được dùng cho đối với phần cứng điều khiển ổ đĩa .
Hình 2.5.1 sơ đồ FAT
FAT bao gồm đầu vào mọi File được lưu trữ trên phân vùng ổ cứng và là địa chỉ bắt
đầu Cluster của File. Mỗi Cluster bao gồm nội dung của File và chỉ tới Cluster tiếp
theo chứa nội dung File hoặc thông báo kết thúc File: End-Of-File ( 0xFFFF ) để thông
báo Cluster đó là điểm cuối của File .
Ví dụ dưới đây có 03 File : File1.txt dùng 03 Cluster . File2.txt là file bị phân
mảnh cũng có 03 Cluster ( 5,6 và 8 ) , và File3.txt vừa trong một Cluster (7) .
Hình 2.5.2 phân mãnh trong Fat
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 64
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
Độ dài của mỗi phần tử của FAT được tính bằng số bit. Độ dài này biểu thị khả
năng chỉ thị số đếm của phần tử FAT. Với các đĩa mềm số lượng các cluster là nhỏ nên
chỉ cần 12 bit đủ để chỉ thị số đếm này, vì vậy các đĩa mềm dùng FAT 12 bit. Với đĩa
cứng có dung lượng từ 1GB trở lại để chỉ thị số Cluster lớn nhất thì phải dùng tới con
số có độ dài 16 bit, vì thế hình thành FAT 16 bit. Với các đĩa cứng có dung lượng từ
vài GB trở lên, số lượng các sector trên đĩa rất lớn, đồng thời để hạn chế các sector bỏ
trống trong mỗi cluster thì người ta qui định số sector trong mỗi cluster ít đi, do đó số
lượng Cluster của cả đĩa sẽ rất lớn. Khi ấy phải dùng tới con số có độ dài 32 bit để chỉ
thị số đếm này. Đây là lí do hình thành FAT 32 bit.
Hiện thân của FAT đầu tiên là FAT12 mà hỗ trợ kích thước Partition lớn nhất là
8MB. Nó bị thay thế bằng FAT16 vào năm 1984 và tăng kích thước của Partition lên
2GB. FAT16 đã trải qua nhiều năm nó cho phép điều khiển tên file dài hơn phiên bản
đầu tiên là 8.3 kí tự. Một điểm giới hạn của FAT16 là số Cluster lớn nhất trong một
Partition là cố định nên ổ cứng có dung lượng càng lớn thì càng có nhiều khoảng trống
không được dùng đến. Một điều thuận lợi của FAT16 là nó hỗ trợ nhiều hệ điều hành
khác nhau Windows 95/98/Me, OS/2, Linux và một vài Version của Unix.
Phiên bản Windows 95 OEM Service Release 2 (OSR2) hỗ trợ cả FAT16 và
FAT32 .
FAT32 chia sẻ những giới hạn của FAT16 nhưng lại có một điều những hệ
điều hành tương thích với FAT16 lại không làm việc với FAT32. Đối với máy tính
chạy 02 hệ điều hành ví dụ Windows NT và một hệ điều hành dùng FAT32 thì
Windows NT lại không đọc được trực tiếp FAT32, nhưng vấn đề sẽ được giải quyết
thông qua mạng .
Cùng với sự xuất hiện của WinXP vào tháng 10 năm 2001 bao gồm cả NTFS .
NTFS hoàn toàn khác với hệ thống File của FAT, nó có thiết lập bảo vệ cao, tiết
kiệm được khoảng trống trên đĩa đồng thời địa chỉ hoá được nhiều Cluster.
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 65
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
Sau đây chúng ta sẽ tìm hiểu rõ hơn về các phiên bản của FAT12, FAT16 và
FAT32.
¾ FAT12 (File Allocation Table, 12-bit): được dùng cho ổ đĩa mềm, ổ đĩa có dung
lượng từ 32MB trở xuống. FAT12 sử dụng 12 bit để đếm nên chỉ có khả năng
quản lý các ổ đĩa có dung lượng thấp hơn 32Mb với số lượng cluster thấp.
¾ FAT16 (File Allocation Table, 16-bit): hổ trợ những hệ điều hành DOS,
Windows 9x/Me. Với FAT này chỉ hổ trợ những tên tập tin có độ dài là 11 ký
tự (8 ký tự dành cho tên tập tin và 3 ký tự dành cho phần mở rộng.) và hổ trợ
những HDD hoặc những phân vùng (partition) có dung lượng tối đa là 2 GB, hệ
thống tập tin FAT (FAT16 – để phân biệt với FAT32) được công bố vào năm
1981 đưa ra một cách thức mới về việc tổ chức và quản lý tập tin trên đĩa cứng,
đĩa mềm. Tuy nhiên, khi dung lượng đĩa cứng ngày càng tăng nhanh, FAT16 đã
bộc lộ nhiều hạn chế. Với không gian địa chỉ 16bit, FAT16 chỉ hỗ trợ đến
65.536 liên cung (clusters) trên một partition, gây ra sự lãng phí dung lượng
đáng kể (đến 50% dung lượng đối với những ổ đĩa cứng trên 2 GB).
¾ FAT32 (File Allocation Table, 32-bit) : được giới thiệu trong phiên bản
Windows 95 Service Pack 2 (OSR 2), được xem là phiên bản mở rộng của
FAT16. Do sử dụng không gian địa chỉ 32 bit nên FAT32 hỗ trợ nhiều cluster
trên một partition hơn, do vậy không gian đĩa cứng được tận dụng nhiều hơn.
Ngoài ra với khả năng hỗ trợ kích thước của phân vùng từ 2GB lên 2TB và
chiều dài tối đa của tên tập tin được mở rộng đến 255 ký tự đã làm cho FAT16
nhanh chóng bị lãng quên. Tuy nhiên, FAT 32 có 1 số nhượcc điểm sau:
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 66
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
FAT32 là tính bảo mật và khả năng chịu lỗi (Fault Tolerance) không cao:
FAT32 không hỗ trợ các tính năng bảo mật như phân quyền quản lý, mã
hoá..
FAT32 có khả năng phục hồi và chịu lỗi rất kém.
FAT32 vẫn còn tỏ ra hữu dụng trên các máy tính cấu hình quá yếu, chỉ
có thể chạy được Windows 98. Tuy nhiênFAT16 và FAT32 vẫn được
dùng để định dạng cho các loại thẻ nhớ, vì các thiết bị chấp nhận thẻ nhớ
như máy ảnh số, máy nghe nhạc vẫn chưa thấy loại nào tương thích với
NTFS cả. FAT16 luôn là lựa chọn hàng đầu khi bạn muốn copy dữ liệu
của mình từ một máy tính chạy Windows sang máy chạy hệ điều hành
khác như Mac chẳng hạn. Hầu hết các máy Mac hiện nay đều không thể
nhận dạng các thẻ nhớ USB được định dạng bằng FAT 32.
Bảng so sánh sau đây sẽ giúp chúng ta nhìn rõ hơn những ưu nhược điểm của
phiên bản FAT12, FAT16 và FAT32.
FAT 12 FAT 16 FAT 32
Nhà phát triễn Microsoft
Tên đầy đủ Phiên bản 12 bit Phiên bản 16 bit Phiên bản 32 bit
Cấu trúc
Cấu trúc thư mục Bảng
Định dạng tập tin Danh sách liên kết
Giới hạn
Kích thước tập tin
tối đa
2MB 2GB 4GB
Số lượng các tập 4096 65536 268,435,437
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 67
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
tin tối đa
Độ dài tên tập tin
tối đa
8.3 hoặc 255 ký tự tùy hệ điều hành
Kích thước phân
vùng tối đa
32MB 2GB đến 4GB 2TiB
Bảng 23. Bảng so sánh các định dạng FAT
II.6 Khái Niệm Về Tập Tin Wave
Tập tin wave là một dạng tập tin dùng để lưu trữ dữ liệu âm thanh số (dạng
sóng) và nó là một trong những định dạng phổ biến nhất của hệ điều hành Windows.
Tập tin wave thuộc chuẩn RIFF ( Resource Interchange File Format- dạng tập tin tài
nguyên có thể trao đổi) và đặc điểm của những tập tin thuộc chuẩn RIFF đó là nó sẽ
nhóm nội dung của tập tin thành các khối riêng biệt và mỗi một khối sẽ gồm một
header (dùng để qui định kiểu và kích thước của khối ) và các byte dữ liệu. Tập tin
wave có 2 dạng là dạng nén và dạng không nén (dạng chuẩn) vì thế trong đề tài này tôi
chỉ đề cập đến dạng chuẩn của tập tin wave tức là dạng không nén.
Cấu trúc file wave gồm 3 khối: khối mô tả dạng RIFF,khối thuộc tính “fmt “ và
khối dữ liệu “data” trong đó khối thuộc tính “fmt” và khối dữ liệu “data” là 2 khối con
của khối mô tả dạng RIFF.
Khối mô tả dạng RIFF: Khối này xác định dạng RIFF và có kích thước là 12
byte gồm các trường:
ChunkID: Kích thước: 4 byte. Chức năng: chứa chuỗi “RIFF” dưới dạng
mã ASCII
ChunkSize: Kích thước: 4 byte. Chức năng: cho biết tổng kích thước của
các trường sau nó.( ChunkSize=4 + ( 8 + Subchunk1Size ) + ( 8 +
Subchunk2Size)).
Format: Kích thước: 4 byte Chức năng: chứa chuỗi “WAVE”.
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 68
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
Khối thuộc tính “fmt ”: Khối này xác định các thuộc tính của dữ liệu âm thanh
và có kích thước là 24 byte gồm các trường:
Subchunk1ID: Kích thước: 4 byte. Chức năng: chứa chuỗi “fmt ”.
Subchunk1Size: Kích thước: 4 byte. Chức năng:cho biết tổng kích thước
của các trường thuộc khối thuộc tính đứng phía sau trường này. (đối với
tập tin wave không nén thì Subchunk1Size bằng 16).
AudioFormat: Kích thước: 2 byte. Chức năng : cho ta biết dạng nén của
dữ liệu trong tập tin wave.
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 69
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
Chương 3 Hệ Thống Tổng Quát
III.1 Thiết Kế Mô Hình SD Music Player.
Nhiều thiết bị nghe nhạc sử dụng thiết bị lưu trữ bên ngoài , chẳng hạn như là
SD card… để chứa các file nhạc. Nhiều thiết bị nghe nhạc có chứa bộ lọc số DAC có
thể tạo ra âm thanh chất lượng cao. Board DE2 cung cấp phần cứng và phần mềm cần
thiết chuyên thực hiện truy xuất audio trên SD card.
Trong phần demo chúng ta sẽ thực hiện một thiết bị nghe nhạc SD card trên
board DE2, file nhạc sẽ đựợc lấy từ SD card. Chúng ta sẽ dùng bộ xử lý NIOS II để
đọc dữ liệu từ SD card và dùng audio codec WM8731 để chạy file nhạc.
Thiết bị Audio Codec WM8731 được cấu hình ở chế độ slave, mạch bên ngòai cung
cấp serial ADC/DAC, bit clock và kênh clock trái phải (LRCK) đến thiết bị Audio
codec.
Hình 3.1 sơ đồ khối của thiết kế SD music player.
Để thực thi mạch thiết kế, chúng ta cần cung cấp một bộ điều khiển Audio DAC
để hoàn tất khởi tạo xung clock và điều khiển dòng dữ liệu. Bộ điều khiển Audio DAC
được tích hợp vào trong cấu trúc Avalon bus vì thế bộ xử lý Nios II có thể điều khiển
ứng dụng. Khi bộ xử lý Nios II hoạt động nó sẽ kiểm tra nếu bộ nhớ FIFO của bộ điều
khiển Audio DAC bị đầy. Nếu bộ nhớ FIFO còn trống, bộ xử lý sẽ đọc 512-byte sector
và gởi dữ liệu đến FIFO của bộ điều khiển Audio DAC qua đường Avalon bus. Bộ
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 70
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
điều khiển Audio DAC dùng tốc độ lấy mẫu là 48kHz để gởi dữ liệu và tín hiệu clock
đến thiết bị Audio Codec.
Để nghe file nhạc trong thiết kế này, file phải sử dụng tốc độ lấy mẫu là 48kHz
và định dạng WAV độ phân giải 16 bit.
III.2 Chương Trình Demo.
III.2.1 Các Định Nghĩa Thiết Lập
III.2.1.1 Cho Ngõ Vào Và Ngõ Ra
#ifndef __SD_Card_H__
#define __SD_Card_H__
#define SD_CMD_IN IOWR(SD_CMD_BASE, 1, 0)
#define SD_CMD_OUT IOWR(SD_CMD_BASE, 1, 1)
#define SD_DAT_IN IOWR(SD_DAT_BASE, 1, 0)
#define SD_DAT_OUT IOWR(SD_DAT_BASE, 1, 1
Các ngõ vào và ngõ ra của SD card được đặt tên là SD_CMD_IN,
SD_CMD_OUT, SD_DAT_IN, SD_DAT_OUT. Các ngõ này được thiết lập là ngõ
vào hay ngõ ra bằng cách ghi vào địa chỉ cơ bản của nó giá trị là bit 1 hoặc bit 0. Nếu
giá trị ghi vào là 0 thì có nghĩa là nhập vào, còn giá trị ngõ vào là 1 có nghĩa là xuất ra.
III.2.1.2 Định Nghĩa Ngõ Ra SD Card Cao/ Thấp
#define SD_CMD_LOW IOWR(SD_CMD_BASE, 0, 0)
#define SD_CMD_HIGH IOWR(SD_CMD_BASE, 0, 1)
#define SD_DAT_LOW IOWR(SD_DAT_BASE, 0, 0)
#define SD_DAT_HIGH IOWR(SD_DAT_BASE, 0, 1)
#define SD_CLK_LOW IOWR(SD_CLK_BASE, 0, 0)
#define SD_CLK_HIGH IOWR(SD_CLK_BASE, 0, 1)
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 71
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
Các ngõ ra của SD card được định nghĩa cao hay thấp phụ thuộc vào giá trị ghi
vào địa chỉ của nó là 1 hay 0. Nếu giá trị ghi vào địa chỉ là 0 tức là ở mức thấp và nếu
giá trị là 1 thì ở mức cao.
III.2.1.3 Đọc Ngõ Vào SD Card
#define SD_TEST_CMD IORD(SD_CMD_BASE, 0)
#define SD_TEST_DAT IORD(SD_DAT_BASE, 0)
Để đọc ngõ vào SD card ta đọc trong địa chỉ thanh ghi của chúng nếu đọc trong
thanh ghi SD_CMD_BASE là đọc ra câu lệnh còn đọc trong địa chỉ SD_DAT_BASE
thì đọc dữ liệu.
III.2.1.4 Các Định Nghĩa Khác.
#define BYTE unsigned char
#define UINT16 unsigned int
#define UINT32 unsigned long
Định nghĩa BYTE là theo kiểu chuổi. UINIT16 định nghĩa theo kiểu int.
UINT32 định nghĩa theo kiểu long.
void Ncr(void)
void Ncc(void);
BYTE response_R(BYTE);
BYTE send_cmd(BYTE *);
BYTE SD_read_lba(BYTE *,UINT32,UINT32);
BYTE SD_card_init(void);
BYTE read_status;
BYTE response_buffer[20];
BYTE RCA[2];
BYTE cmd_buffer[5];
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 72
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
const BYTE cmd0[5] = {0x40,0x00,0x00,0x00,0x00};
const BYTE cmd55[5] = {0x77,0x00,0x00,0x00,0x00};
const BYTE cmd2[5] = {0x42,0x00,0x00,0x00,0x00};
const BYTE cmd3[5] = {0x43,0x00,0x00,0x00,0x00};
const BYTE cmd7[5] = {0x47,0x00,0x00,0x00,0x00};
const BYTE cmd9[5] = {0x49,0x00,0x00,0x00,0x00};
const BYTE cmd16[5] = {0x50,0x00,0x00,0x02,0x00};
const BYTE cmd17[5] = {0x51,0x00,0x00,0x00,0x00};
const BYTE acmd6[5] = {0x46,0x00,0x00,0x00,0x02};
const BYTE acmd41[5] = {0x69,0x0f,0xf0,0x00,0x00};
const BYTE acmd51[5] = {0x73,0x00,0x00,0x00,0x00};
Định nghĩa các hàm con trong chương trình như hàm Ncr(void), Ncc(void),
response_R(BYTE), send_cmd(BYTE *), SD_read_lba(BYTE *, UINT32, UINT32 ),
SD_card_init(void), read_status, response_buffer[20], RCA[2], cmd_buffer[5]. Các
giá trị địa chỉ cố định của các lệnh như cmd0[5] = {0x40,0x00,0x00,0x00,0x00} ….
III.2.2 Các Chương Trình Con Và Các Hàm Con.
III.2.2.1 chương trình void Ncr(void)
void Ncr(void)
{
SD_CMD_IN;
SD_CLK_LOW;
SD_CLK_HIGH;
SD_CLK_LOW;
SD_CLK_HIGH;
}
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 73
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
Hàm đưa câu lệnh vào thanh ghi địa chỉ của SD_CMD_BASE sau đó đưa xung
clock vào. Trong này có sự thay đổi giá trị xung clock.
III.2.2.2 chương trình void Ncc (void)
void Ncc(void)
{
int i;
for(i=0;i<8;i++)
{
SD_CLK_LOW;
SD_CLK_HIGH;
}
}
Hàm Void Ncc(void) chủ yếu dung để đưa xung clock vào.
III.2.2.3 Hàm Khởi Tạo SD Card
BYTE SD_card_init(void)
{
BYTE x,y;
SD_CMD_OUT;
SD_DAT_IN;
SD_CLK_HIGH;
SD_CMD_HIGH;
SD_DAT_LOW;
read_status=0;
for(x=0;x<40;x++)
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 74
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
Ncr();
for(x=0;x<5;x++)
cmd_buffer[x]=cmd0[x];
y = send_cmd(cmd_buffer);
do
{
for(x=0;x<40;x++);
Ncc();
for(x=0;x<5;x++)
cmd_buffer[x]=cmd55[x];
y = send_cmd(cmd_buffer);
Ncr();
if(response_R(1)>1) //response too long or crc error
return 1;
Ncc();
for(x=0;x<5;x++)
cmd_buffer[x]=acmd41[x];
y = send_cmd(cmd_buffer);
Ncr();
} while(response_R(3)==1);
Ncc();
for(x=0;x<5;x++)
cmd_buffer[x]=cmd2[x];
y = send_cmd(cmd_buffer);
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 75
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
Ncr();
if(response_R(2)>1)
return 1;
Ncc();
for(x=0;x<5;x++)
cmd_buffer[x]=cmd3[x];
y = send_cmd(cmd_buffer);
Ncr();
if(response_R(6)>1)
return 1;
RCA[0]=response_buffer[1];
RCA[1]=response_buffer[2];
Ncc();
for(x=0;x<5;x++)
cmd_buffer[x]=cmd9[x];
cmd_buffer[1] = RCA[0];
cmd_buffer[2] = RCA[1];
y = send_cmd(cmd_buffer);
Ncr();
if(response_R(2)>1)
return 1;
Ncc();
for(x=0;x<5;x++)
cmd_buffer[x]=cmd7[x];
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 76
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
cmd_buffer[1] = RCA[0];
cmd_buffer[2] = RCA[1];
y = send_cmd(cmd_buffer);
Ncr();
if(response_R(1)>1)
return 1;
Ncc();
for(x=0;x<5;x++)
cmd_buffer[x]=cmd16[x];
y = send_cmd(cmd_buffer);
Ncr();
if(response_R(1)>1)
return 1;
read_status =1; //sd card ready
return 0;
}
Khởi tạo một hệ thống SD card gồm các dữ liệu vào, xuất câu lệnh, xung
clock…
III.2.2.4 Hàm Đọc SD Card
BYTE SD_read_lba(BYTE *buff,UINT32 lba,UINT32 seccnt)
{
BYTE c=0;
UINT32 i,j;
lba+=101;
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 77
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
for(j=0;j<seccnt;j++)
{
{
Ncc();
cmd_buffer[0] = cmd17[0];
cmd_buffer[1] = (lba>>15)&0xff;
cmd_buffer[2] = (lba>>7)&0xff;
cmd_buffer[3] = (lba<<1)&0xff;
cmd_buffer[4] = 0;
lba++;
send_cmd(cmd_buffer);
Ncr();
}
while(1)
{
SD_CLK_LOW;
SD_CLK_HIGH;
if(!(SD_TEST_DAT))
break;
}
for(i=0;i<512;i++)
{
BYTE j;
for(j=0;j<8;j++)
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 78
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
{
SD_CLK_LOW;
SD_CLK_HIGH;
c <<= 1;
if(SD_TEST_DAT)
c |= 0x01;
}
*buff=c;
buff++;
}
for(i=0; i<16; i++)
{
SD_CLK_LOW;
SD_CLK_HIGH;
}
}
read_status = 1; //SD data next in
return 0;
}
III.2.2.5 Hàm Response
BYTE response_R(BYTE s)
{
BYTE a=0,b=0,c=0,r=0,crc=0;
BYTE i,j=6,k;
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 79
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
while(1)
{
SD_CLK_LOW;
SD_CLK_HIGH;
if(!(SD_TEST_CMD))
break;
if(crc++ >100)
return 2;
}
crc =0;
if(s == 2)
j = 17;
for(k=0; k<j; k++)
{
c = 0;
if(k > 0) //for crc culcar
b = response_buffer[k-1];
for(i=0; i<8; i++)
{
SD_CLK_LOW;
if(a > 0)
c <<= 1;
else
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 80
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
i++;
a++;
SD_CLK_HIGH;
if(SD_TEST_CMD)
c |= 0x01;
if(k > 0)
{
crc <<= 1;
if((crc ^ b) & 0x80)
crc ^= 0x09;
b <<= 1;
crc &= 0x7f;
}
}
if(s==3)
{
if( k==1 &&(!(c&0x80)))
r=1;
}
response_buffer[k] = c;
}
if(s==1 || s==6)
{
if(c != ((crc<<1)+1))
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 81
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
r=2;
}
return r;
}
III.2.2.6 Hàm Gửi Đi Câu Lệnh.
BYTE send_cmd(BYTE *in)
{
int i,j;
BYTE b,crc=0;
SD_CMD_OUT;
for(i=0; i < 5; i++)
{
b = in[i];
for(j=0; j<8; j++)
{
SD_CLK_LOW;
if(b&0x80)
SD_CMD_HIGH;
else
SD_CMD_LOW;
crc <<= 1;
SD_CLK_HIGH;
if((crc ^ b) & 0x80)
crc ^= 0x09;
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 82
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
b<<=1;
}
crc &= 0x7f;
}
crc =((crc<<1)|0x01);
b = crc;
for(j=0; j<8; j++)
{
SD_CLK_LOW;
if(crc&0x80)
SD_CMD_HIGH;
else
SD_CMD_LOW;
SD_CLK_HIGH;
crc<<=1;
}
return b;
}
III.2.2.7 Chương Trình Khởi Tạo LCD
#include
#include
#include
#include "system.h"
#include "LCD.h"
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 83
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
void LCD_Init()
{
lcd_write_cmd(LCD_16207_0_BASE,0x38);
usleep(2000);
lcd_write_cmd(LCD_16207_0_BASE,0x0C);
usleep(2000);
lcd_write_cmd(LCD_16207_0_BASE,0x01);
usleep(2000);
lcd_write_cmd(LCD_16207_0_BASE,0x06);
usleep(2000);
lcd_write_cmd(LCD_16207_0_BASE,0x80);
usleep(2000);
}
III.2.2.8 Chương Trình Hiển Thị Text Lên Trên LCD
void LCD_Show_Text(char* Text)
{
int i;
for(i=0;i<strlen(Text);i++)
{
lcd_write_data(LCD_16207_0_BASE,Text[i]);
usleep(2000);
}
}
void LCD_Line2()
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 84
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
{
lcd_write_cmd(LCD_16207_0_BASE,0xC0);
usleep(2000);
}
void LCD_Test()
{
char Text1[16] = "Altera DE2 Board";
char Text2[16] = "SD Music Player.";
// Initial LCD
LCD_Init();
// Show Text to LCD
LCD_Show_Text(Text1);
// Change Line2
LCD_Line2();
// Show Text to LCD
LCD_Show_Text(Text2);
}
Hàm xuất chuỗi ký tự lên màn hình LCD. Khởi tạo một LCD sau đó xuất ra
chuổi Text1 và Text2 lên màn hình LCD của board DE2. Khai báo hai biến là Text1 và
Text2. Ghi từng ký tự của chuỗi lên địa chỉ thanh ghi của LCD.
III.2.3 Chương Trình Chính
#include "basic_io.h"
#include "LCD.h"
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 85
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
#include "SD_Card.h"
int main(void)
{
UINT16 i=0,Tmp1=0,Tmp2=0;
UINT32 j=720;
BYTE Buffer[512]={0};
while(SD_card_init())
usleep(500000);
LCD_Test();
while(1)
{
SD_read_lba(Buffer,j,1);
while(i<512)
{
if(!IORD(AUDIO_0_BASE,0))
{
Tmp1=(Buffer[i+1]<<8)|Buffer[i];
IOWR(AUDIO_0_BASE,0,Tmp1);
i+=2;
}
}
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 86
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
if(j%64==0)
{
Tmp2=Tmp1*Tmp1;
IOWR(LED_RED_BASE,0,Tmp2);
IOWR(LED_GREEN_BASE,0,Tmp1);
}
IOWR(SEG7_DISPLAY_BASE,0,j);
j++;
i=0;
}
return 0;
}
Khởi tạo SD card. Xuất ký tự lên LCD. Đọc SD card từ bộ nhớ đệm buffer. Khi
I nhỏ hơn 512. Nếu không đọc được dữ liệu từ thanh ghi AUDIO_0_BASE. Đặt biến
Tmp1 là dịch trái 8 bit buffer or với buffer [i]. Ghi Tmp1 vào thanh ghi
AUDIO_0_BASE. Tăng i lên 2. Nếu j chia hết cho 64 Tmp2 = Tmp1* Tmp1. Ghi
Tmp2 vào thanh ghi LED_RED_BASE. Ghi Tmp1 vào thanh ghi
LED_GREEN_BASE. Ghi j vào thanh ghi SEG7_DISPLAY_BASE.
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 87
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
Kết luận :
Lập trình hệ thống nhúng ngày nay rất phổ biến và ngày càng phát triễn mạnh
mẽ. Đề tài tập trung nghiên cứu xây dụng hệ thống SD Music Player. Hệ thống có thể
áp dụng cho các thiết bị nghe nhạc phổ biến hiện nay như máy nghe nhạc MP3, hay
tích hợp vào trong điện thoại di động.
Các ứng dụng của SOPC Builder rất rộng. SOPC Builder có thể được sử dụng
để tạo ra nhiều hệ thống khác nhau cho những mục đích khác nhau. Tuy nhiên trong
giới hạn của đề tài chúng em chỉ có thể trình bày về một phần trong các ứng dụng của
SOPC.
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 88
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
Tài liệu tham khảo
Các sách tham khảo
1) tut_sopc_introduction_verilogDE2.pdf CD DE2 của altera.
2) tut_nios2_introduction.pdf CD DE2 của altera.
3) WM8731.pdf CD DE2 của altera.
4) Introduction to the Altera SOPC Builder Using Verilog Design CD DE2 của
Altera.
5) Proof that C can match or beat assembly.
6) The New C Standard, Derek M. Jones, 2005
7) C Programming for Embedded Systems, Kirk Zurell
8) Tự học lập trình Visual C++ MFC qua các ví dụ, Nguyễn Đình Tê, NXB Lao
động – Xã Hội.
Các website tham khảo
1) www.altera.com
2) www.dientuvienthong.net
3)
4)
5)
6)
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 89
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
Danh sách hình
Phụ Lục
Hình 1.1.1. Hiển thị chính Quartus II. .....................................................3
Hình 1.1.2. ví dụ file menu ......................................................................4
Hình 1.1.3. Thao tác thực hiện bằng Wizard Tasks ................................5
Hình 1.1.4. Tạo một project mới. .............................................................6
Hình 1.1.5. Phần mềm Quartus II sẽ tạo ra một thư mục cho project ......6
Hình 1.1.6. Wizard có thể bao gồm file thiết kế lý thuyết. ......................7
Hình 1.1.7. Chọn một họ thiết bị và một thiết bị cụ thể ...........................8
Hình 1.1.8. Công cụ EDA khác ...............................................................9
Hình 1.1.9. Tóm tắt của việc cài đặt project. .........................................10
Hình 1.1.10. Quartus II sau khi project được tạo ...................................11
Hình 1.2.1: Sơ đồ hệ thống SOPC tích hợp trên PLD của Altera ..........12
Hình 1.2.2: Các thành phần trong nhãn system contents .......................13
Hình 1.2.3. tạo mới một SOPC Builder. ................................................15
Hình 1.2.4. add cpu_0 vào để tạo kết nối. ..............................................16
Hình 1.2.5. thiết kế module cpu_0. ........................................................17
Hình 1.2.6. add các module cần thiết .....................................................17
Hình 1.2.7. liên kết cpu_0 với onchip_memory2_0 ...............................18
Hình 1.2.8. biên dịch thành công ...........................................................19
Hình 1.2.9. Gán pin ................................................................................19
Hình 1.2.10. Quartus II biên dịch thành công ........................................20
Hình 1.2.11. lập trình Nios II IDE .........................................................21
Hình 1.3.1 Tổ Chức Bộ Nhớ Và I/O ......................................................27
Hình 1.3.2 các định dạng của các tập lệnh NIOS II ...............................29
Hình 1.4.1 Board DE2 ...........................................................................30
Hình 1.4.2 Biểu Đồ Khối Của Board DE2 .............................................31
Hình 1.4.2. Board DE2 của Altera .........................................................32
Hình 1.4.3 Ứng Dụng TV Box ...............................................................34
Hình 1.4.5 Karaoke Machine và SD Music Player ................................35
Hình 2.1.1 Sơ Đồ Khối Chức Năng WM8731/L ...................................38
Hình 2.1.2 Lược Đồ Line Ngõ Vào. ......................................................39
Hình 2.2.1 Định Tuyến Tín Hiệu Trong Chế Độ Bypass .......................48
Hình 2.2.2 Lược Đồ Chế Độ Sidetone ...................................................49
Hình 2.3.1 Mạch Ứng Dụng Máy Tạo Dao Động Crystal. ....................52
Hình 2.5.1 sơ đồ FAT ............................................................................64
Hình 2.5.2 phân mãnh trong Fat ............................................................64
Hình 3.1 sơ đồ khối của thiết kế SD music player. ................................70
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 90
ĐỒ ÁN TỐT NGHIỆP GVHD : Th.S HUỲNH HỮU THUẬN
Danh sách bảng
Bảng 1 Các Thanh Ghi Đa Năng ...........................................................25
Bảng 2 Thanh Ghi Điều Khiển .............................................................. 26
Bảng 3 Điều Khiển Phần Mềm Line Ngõ Vào .......................................40
Bảng 4 Điều Khiển Phần Mềm Ngõ Vào Microphone. .........................41
Bảng 5 Điều Khiển Phần Mềm ADC .....................................................42
Bảng 6 Điều Khiển Phần Mềm ADC .....................................................43
Bảng 7 Điều Khiển Phần Mềm DAC..................................................... 44
Bảng 8 Điều Khiển Phần Mềm Line Output. .........................................45
Bảng 9 Điều Khiển Phần Mềm Ngõ Ra Headphone ..............................47
Bảng 10 Điều Khiển Phần Mềm Trong Chế Độ Bypass ........................48
Bảng 11 Chế Độ Sidetone ......................................................................49
Bảng 12 Điều khiển phần mềm của reset. ..............................................50
Bảng 13 Điều Khiển Phần Mềm Của Lõi Clock. ...................................51
Bảng 14 Lập Trình Của CLKOUT ........................................................53
Bảng 15 Giao Diện Lựa Chọn MODE ...................................................53
Bảng 16 Lựa Chọn Địa Chỉ Giao Diện MPU 2 – Wire ..........................54
Bảng 17 Điều Khiển Phần Mềm Chế Độ Bảo Tồn Năng Lượng ...........56
Bảng 18 Chế Độ Stanby .........................................................................58
Bảng 19 Chế Độ Poweroff .....................................................................58
Bảng 20Bản Đồ Thanh Ghi Chương Trình ............................................59
Bảng 21 Đặt Tính Của Bộ Lọc Số .........................................................61
Bảng 22 Lập Trình Chế Độ Master/Slave ..............................................61
Bảng 23. Bảng so sánh các định dạng FAT ...........................................68
SVTH: NGUYỄN MINH HIẾU – HUỲNH CÔNG PHÚ Trang 91
Các file đính kèm theo tài liệu này:
- Nghiên cứu hệ thống nhúng trên SOPC BUILDER và ứng dụng.pdf