Nghiên cứu hệ thống nhúng trên sopc builder và ứng dụng

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

pdf91 trang | Chia sẻ: lvcdongnoi | Lượt xem: 2725 | Lượt tải: 1download
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:

  • pdfNghiên cứu hệ thống nhúng trên SOPC BUILDER và ứng dụng.pdf