Top Banner
Hướng Dẫn Làm Quen Với eZdspF2812 Nguyễn Quốc Đính Tháng 6, năm 2009 Tóm tắt nội dung Dòng TMS320C2000 là thế hệ DSP có khả năng tính toán rất cao, được dùng phổ biến để điều khiển, đặc biệt là điều khiển dộng cơ, chuyển đổi năng lượng và các hệ cảm biến cao cấp. Đây có thể xem là một đối tượng rất lý tưởng để thực hiện hệ thống nhúng cho các thuật toán điều khiển với sự hỗ trợ các giao tiếp ngoại vi của MCU. Tuy nhiên sự tiếp cận với thế hệ này mất khá nhiều thời gian với sự tràn ngập tài liệu liên quan. Chúng tôi thực hiện bài này với mong muốn giúp đỡ các bạn rút ngắn thời gian trong việc tiếp cận với dòng DSP này. Các vấn đề thảo luận ở đây được tập trung vào board mạch eZd- spF2812 1 . Chúng tôi hoan nghênh mọi thắc mắc hay đóng góp về địa chỉ [email protected]. Mục lục 1 Cài đặt và thiết lập cấu hình cho CCS 3 1.1 Cài đặt CCS ........................................ 3 1.2 Thiết lập cấu hình cho CCS giao tiếp được với phần cứng. ............... 4 2 Phần Cứng eZdspF2812 6 2.1 Cấu tạo ........................................... 6 2.2 Thiết lập chế độ hoạt động của board mạch với các Jumper .............. 8 2.2.1 JP4, JP5 ...................................... 9 2.2.2 JP1 ......................................... 9 2.2.3 JP7, JP8, JP11, JP12: lựa chọn chế độ Boot .................. 10 2.2.4 JP9, PLL disable .................................. 10 2.3 Onboard LEDs ....................................... 11 3 Từng Bước Làm Quen Với TMS320F2000 12 3.1 Làm quen với môi trường làm việc của CCS ....................... 12 3.2 Debug chương trình .................................... 13 3.2.1 Add a Break Point ................................. 13 3.2.2 Add a Probe Point ................................. 14 3.2.3 Xem một biến ................................... 14 3.2.4 Debug từng bước .................................. 15 3.3 Xây dựng chương trình đầu tiên ............................. 16 1 Đang được sử dụng tại Bộ môn Điều Khiển Tự Động - Đại Học Bách Khoa Tp. HCM 1
43

DSPTMS320F2812Tutorial

Jun 11, 2015

Download

Documents

nqdinh
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: DSPTMS320F2812Tutorial

Hướng Dẫn Làm Quen Với eZdspF2812

Nguyễn Quốc Đính

Tháng 6, năm 2009

Tóm tắt nội dung

Dòng TMS320C2000 là thế hệ DSP có khả năng tính toán rất cao, được dùng phổ biến đểđiều khiển, đặc biệt là điều khiển dộng cơ, chuyển đổi năng lượng và các hệ cảm biến cao cấp.Đây có thể xem là một đối tượng rất lý tưởng để thực hiện hệ thống nhúng cho các thuật toánđiều khiển với sự hỗ trợ các giao tiếp ngoại vi của MCU.

Tuy nhiên sự tiếp cận với thế hệ này mất khá nhiều thời gian với sự tràn ngập tài liệu liênquan. Chúng tôi thực hiện bài này với mong muốn giúp đỡ các bạn rút ngắn thời gian trong việctiếp cận với dòng DSP này. Các vấn đề thảo luận ở đây được tập trung vào board mạch eZd-spF28121. Chúng tôi hoan nghênh mọi thắc mắc hay đóng góp về địa chỉ [email protected].

Mục lục

1 Cài đặt và thiết lập cấu hình cho CCS 3

1.1 Cài đặt CCS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.2 Thiết lập cấu hình cho CCS giao tiếp được với phần cứng. . . . . . . . . . . . . . . . 4

2 Phần Cứng eZdspF2812 6

2.1 Cấu tạo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62.2 Thiết lập chế độ hoạt động của board mạch với các Jumper . . . . . . . . . . . . . . 8

2.2.1 JP4, JP5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.2.2 JP1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.2.3 JP7, JP8, JP11, JP12: lựa chọn chế độ Boot . . . . . . . . . . . . . . . . . . 102.2.4 JP9, PLL disable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

2.3 Onboard LEDs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

3 Từng Bước Làm Quen Với TMS320F2000 12

3.1 Làm quen với môi trường làm việc của CCS . . . . . . . . . . . . . . . . . . . . . . . 123.2 Debug chương trình . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

3.2.1 Add a Break Point . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133.2.2 Add a Probe Point . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143.2.3 Xem một biến . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143.2.4 Debug từng bước . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

3.3 Xây dựng chương trình đầu tiên . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161Đang được sử dụng tại Bộ môn Điều Khiển Tự Động - Đại Học Bách Khoa Tp. HCM

1

Page 2: DSPTMS320F2812Tutorial

MỤC LỤC 2

3.3.1 Tạo một project mới . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163.3.2 Soạn thảo mã nguồn C/C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . 163.3.3 Cấu hình cho việc dịch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173.3.4 Linker Command File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183.3.5 Biên dịch chương trình . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193.3.6 Vẽ các đồ thị của các biến . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

3.4 Sử dụng các chương trình viết sẵn cho project của mình . . . . . . . . . . . . . . . . 23

4 Một số mở rộng 24

4.1 Chỉnh sửa linker, nạp chương trình vào flash . . . . . . . . . . . . . . . . . . . . . . 244.2 Giới thiệu một số thư viện . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

5 Phụ lục A 27

6 Phụ Lục B 34

7 Phụ Lục C 40

Page 3: DSPTMS320F2812Tutorial

1 Cài đặt và thiết lập cấu hình cho CCS 3

1 Cài đặt và thiết lập cấu hình cho CCS

1.1 Cài đặt CCS

CCS – Code Composer Studio là môi trường soạn thảo IDE của Texas Instrument cho các thế hệDSP cũng như MCU của TI, bao gồm việc soạn thảo mã lệnh, dịch, liên kết và debug chương trình.

Ưu điểm rất lớn của CCS là khả năng nhắc tuồng rất hiệu quả như trong môi trừng VB hayC#. Ngoài ra với khả năng kết nối với phần cứng, debug online, vẽ đồ thị thời gian thực . . . CCSlà sẽ giúp cho quá trình phát triển giải thuật cải thiện đáng kể về thời gian. Tuy nhiên để CCS kếtnối được với phần cứng khác nhau thì cần phải thiếp lập kết nối CCS với phần cứng đó, trong tàiliệu này chúng tôi sử dụng board mạch eZdspF2812 của Spectrum Digital.

Hình 1: Cài đặt Code Composer Studio

Trước tiên chúng ta sẽ cài đặt CCS trong đĩa kèm theo.Tiếp theo đó, vào trong thư mục ’Spectrum Digital’, chọn thư mục eZdsp2800, chọn setup để

cài đặt phần tiếp theo là eZdsp2800 Emulation Drivers and Target Content.

Hình 2: Cài đặt driver cho eZdspF2812

Chương trình này được xem như là một driver để CCS nhận thấy và giao tiếp được với boardmạch eZdspF2812. Cứ để thiết lập mặc định đến khi hoàn thành việc cài đặt.

Page 4: DSPTMS320F2812Tutorial

1.2 Thiết lập cấu hình cho CCS giao tiếp được với phần cứng. 4

Như vậy việc cài đặt những thành phần cơ bản đã thực hiện xong.

1.2 Thiết lập cấu hình cho CCS giao tiếp được với phần cứng.

Để bắt đầu thiết lập cấu hình để cho CCS nhận thấy và giao tiếp được với board eZdspF2812, chúngta cho chạy chương trình SdConfig. Tuy nhiên cần ghi nhớ là phải kết nối board mạch eZdspF2812với máy tính trước khi thực hiện quá trình config.

Thực hiện chọn các thông số như hình bên dưới, rồi save lại, sau đó chọn biểu tượng reset (chữR màu đỏ ), nếu không có gì trở ngại thì sẽ thấy dòng chữ ’emulator is reset’.

Hình 3: Cài đặt thông số cho bộ JTAG

Để kiểm tra thiết lập kết nối, chúng ta vào lệnh ’Emulator Test’, nếu thiết lập đúng thì sẽ hiệnra thông báo là đã kết nối được với JTAG như hình bên. Nếu chương trình báo lỗi thì hãy làm lạiquá trình trên, chọn lại thông số kết nối.

Tiếp theo chạy chương trình SetupCCStudio, mục đích là để install driver vừa cài đặt vào CCS.Chúng ta làm như hình vẽ sau:

∙ Chọn board F2812 eZdsp.

∙ Chọn Add.

Page 5: DSPTMS320F2812Tutorial

TÀI LIỆU 5

∙ Save & Quit.

Hình 4: Chọn kết nối CCS với eZdspF2812

Như vậy là chúng ta đã kết nối được CCS với board mạch eZdspF2812. Phần tiếp theo chúngta sẽ bắt đầu viết chương trình đâu tiên với họ DSP TMS320C2000, nhưng trước đó chúng ta sẽlàm quen với phần cứng của board mạch eZdspF2812 trước đã.

Tài liệu

[1] eZdsp for the TMS320C2812, Quick Start Guide. Spectrum Digital.

Page 6: DSPTMS320F2812Tutorial

2 Phần Cứng eZdspF2812 6

2 Phần Cứng eZdspF2812

2.1 Cấu tạo

The eZdspTM F2812 has the following features:

∙ TMS320F2812 Digital Signal Processor

∙ 150 MIPS operating speed

∙ 18K words on-chip RAM

∙ 128K words on-chip Flash memory

∙ 64K words off-chip SRAM memory

∙ 30 MHz. Clock

∙ 2 Expansion Connectors (analog, I/O)

∙ Onboard IEEE 1149.1 JTAG Controller

∙ 5-volt only operation with supplied AC adapter

∙ TI F28xx Code Composer Studio tools driver

∙ On board IEEE 1149.1 JTAG emulation connector

Sơ đồ nguyên lý bằng OrCAD có thể tìm thấy ở phụ lục A, sơ đồ tổng quát của board mạchnhư sau (chú ý đến những thành phần được mô tả ở trên):

Hình 5: Block Diagram eZdspF2812

Hình dạng bên ngoài của board mạch với với những chú thích tương ứng với các thành phầncủa mạch:

Page 7: DSPTMS320F2812Tutorial

2.1 Cấu tạo 7

Hình 6: Hình dạng của board mạch

Và kết nối của board mạch với PC thông qua bộ JTAG có sẵn (kết nối qua cổng song song):

Hình 7: Kết nối board với PC

Có thể nhận thấy rằng board mạch eZdspF2812 chỉ chứa phần ’nhân’ tức là phần xử lý, bộnhớ ngoài, và kết nối JTAG qua cổng máy in mà chưa có các thành phần khác. Tuy nhiên các IOEXPANTION từ 𝑃1 → 𝑃9 cộng với các giao thức như SPI, SCI, I2C, CAN, McBSP và các GPIOchúng ta có thể mở rộng giao tiếp với nhiều thiết bị khác nhau.

Về chi tiết các IO EXPANTION này, vui lòng xem chi tiết tại [1].Sau đây là một ví dụ về giao tiếp của board mạch eZdspF2812 với các thiết bị bên ngoài khác

thông qua các cổng mở rộng.

Page 8: DSPTMS320F2812Tutorial

2.2 Thiết lập chế độ hoạt động của board mạch với các Jumper 8

Hình 8: Một ví dụ về mạch mở rộng của eZdspF2812 - Zwickau Adapter Board

Board này được miêu tả như sau:

∙ 8 LED’s for digital output (GPIO B7. . . B0).

∙ 8 switches (GPIO B15. . . B8) and 2 push buttons (GPIO D1, D6) for digital input.

∙ 2 potentiometers (ADCINA0, ADCINB0) for analog input.

∙ 1 loudspeaker for analogue output via PWM - Digisound F/PWC04A.

∙ 1 dual SPI Digital to Analogue Converter (DAC) - Texas Instruments TLV5617A.

∙ 1 SPI EEPROM 1024 x 8 Bit - ST Microelectronics M95080.

∙ 1 CAN Transceiver - Texas Instruments SN 65HVD230 (high speed).

∙ 1 CAN Transceiver - Philips TJA 1054 (low speed).

∙ 1 I2C – Temperature Sensor Dallas Semiconductor DS1621.

∙ 1 SCI-A RS 232 Transceiver – Texas Instruments MAX232D.

∙ 2 dual OpAmp’s Texas Instruments TLV 2462 – analogue inputs.

Sơ đồ nguyên lý của Zwickau Adapter Board có thể được tìm thấy ở phần phụ lục B. Đây cóthể là một tham khảo tốt khi bạn muốn thiết kế riêng cho mình để mở rộng giao tiếp board mạch.

2.2 Thiết lập chế độ hoạt động của board mạch với các Jumper

Bên cạnh các Expantion để kết nối thêm các ngoại vi khác, trên board eZdspF2812 có một sốjumper để người dùng có thể thiết lập các chế độ hoạt động thích hợp cho DSP.

Page 9: DSPTMS320F2812Tutorial

2.2 Thiết lập chế độ hoạt động của board mạch với các Jumper 9

Ngoại trừ JP4 và JP5, tất cả các Jumper còn lại phải được kết nối hoặc ở vị trí 1 – 2hoặc 2 - 3

Vị trí của các Jumper trên board mạch như hình vẽ bên dưới:

Hình 9: Vị trí của các Jumper trên eZdspF2812

2.2.1 JP4, JP5

Mục đích của các Jumper P4, P5 này là để cung cấp nguồn +3.3V/5V ra các cổng mở rộng P8-P4và P2 tương ứng.

Tuy nhiên nhà sản xuất chưa gắn Jumper này vào, nếu người sử dụng muốn đưa nguồn ra ngoàiđể sử dụng thì cần phải hàn jumper này vào. Cần phải xem xét khả năng cung cấp công suất củanguồn ổn áp trong mạch eZdspF2812 với yêu cầu của tải bên ngoài. Theo ý kiến của chúng tôi thìchúng ta không nên sử dụng những nguồn này mà nên cung cấp nguồn riêng khi mở rộng giao tiếpbên ngoài.

Chúng ta phải chú ý là khi giao tiếp với các port của DSP TMS320C2000, thì mức điệnáp không được vượt ra khỏi tầm 0-3.3V. Tuyệt đối không cung cấp nguồn 5V trực tiếpvào các pin của DSP.

2.2.2 JP1

Lựa chọn chế độ hoạt động cho DSP:

Page 10: DSPTMS320F2812Tutorial

2.2 Thiết lập chế độ hoạt động của board mạch với các Jumper 10

Đặt Jumper ở vị trí 2 – 3 để chọn chế độ Microcomputer.

2.2.3 JP7, JP8, JP11, JP12: lựa chọn chế độ Boot

Các Jumper JP7, 8,11 & 12 được dùng để xác định chế độ mà DSP sẽ khởi động sau khi cung cấpnguồn. Để có tín hiệu ’High’, đặt jumper ở vị trí 1 – 2, còn trạng thái ’Low’ sẽ đạt được khi đặtjumper ở vị trí 2 – 3.

Thông thường chúng tôi đặt chế độ boot ở trạng thái ’FLASH’ hoặc ’H0’:

∙ Ở chế độ FLASH, chương trình được nạp vào bộ nhớ Flash (ở dòng F) hoặc Rom (ở dòngC), chúng ta chỉ nên đặt boot ở chế độ Flash khi chương trình đã hoàn thiện hoặc muốn chohệ thống chạy ở chế độ ’Stand Alone’.

∙ Ở chế độ H0, chương trình được đổ vào bộ nhớ RAM nội hoặc ngoại của board mạch eZd-spF2812, chế độ này thích hợp cho việc phát triển chương trình. Tuy nhiên khi khởi động lên,chương trình phải được nạp từ Host (tức là PC) vì bộ nhớ RAM không lưu giữ được dữ liệukhi nguồn mất đi.

Ưu điểm của chế độ boot từ H0 là hệ thống hoạt động ở tốc độ cao nhất (khoảng 150MIPS),so với chế độ Flash (khoảng 120 – 130MISP).

Vấn đề chọn chế độ boot khá quan trọng, nên sẽ được đề cập đến trong các phần sau nữa.

2.2.4 JP9, PLL disable

JP9 cho phép / không cho phép mức logic PLL trong DSP.

Page 11: DSPTMS320F2812Tutorial

2.3 Onboard LEDs 11

Nếu chế độ PLL không được chọn, DSP sẽ hoạt động với tần số bằng tần số thạch anh bênngoài, là 30Mhz. Trường hợp chế độ PLL được chọn, tần số DSP hoạt động phụ thuộc vào cài đặtPLL ở chương trình, nhưng không được vượt quá 150Mhz.

Theo mặc định, chúng ta sẽ chọn chế độ cho phép PLL.Như vậy trước khi thực hiện chương trình trên board mạch, chúng ta phải chú ý đến việc thiết

lập Jumper trước tiên. Việc thiết lập jumper sai có thể dẫn đến chương trình chạy không đúngmục đích.

2.3 Onboard LEDs

Board eZdspF2812 có sẵn hai LED.

∙ LED DS1 được dùng để báo trạng thái của nguồn, thường được phát sáng khi cung cấp nguồncho mạch.

∙ LED DS2 được điều khiển bởi chương trình, được gắn với chân XF (GPIOF14). Chúng ta cóthể dùng DS2 để debug chương trình.

Trong phần tới chúng ta sẽ sử dụng DS2 để bắt đầu chương trình đầu tiên là chớp đèn LED.Ở đây chúng tôi chỉ giới thiệu rất cơ bản những phần có liên quan đến các chương kế tiếp.

Để hiểu rõ hơn hơn về board mạch này, chúng tôi đề nghị các bạn đọc các tài liệu liên quan củaSpectrum Digital, ví dụ như [1]. Đây là tài liệu rất đầy đủ miêu về eZdspF2812, tài liệu này có thểtải trên internet hoặc trong CD kèm theo board mạch.

Tài liệu

[1] eZdspTM F2812 Technical Reference. Rev. F. September 2003. Spectrum Digital.

Page 12: DSPTMS320F2812Tutorial

3 Từng Bước Làm Quen Với TMS320F2000 12

3 Từng Bước Làm Quen Với TMS320F2000

Mục tiêu của chương này là để giúp bạn làm quen với môi trường CCS, từ đó bắt đầu một projectđơn giản. Phần này cũng sẽ giúp bạn bắt nhịp với các phương thức debug của CCS, đồng thời cáccách thức phát triển chương trình trực quan như vẽ đồ thị, hay lưu trữ các giá trị thời gian thựcvào file trên máy tính để phân tích hay lưu trữ cũng sẽ được bàn đến.

3.1 Làm quen với môi trường làm việc của CCS

CCS là một IDE phát triển riêng để phát triển các chương trình cho họ DSP và MCU của TI.Việc làm quen với CCS sẽ giúp cho chúng ta tiết kiệm được nhiều thời gian hơn khi phát triển cácproject trên môi trường này.

Môi trường làm việc của CCS được tóm gọn như sau:

Hình 10: Sơ bộ về các phần của CCS

Để cho sự bắt đầu một cách thuận tiện chúng ta sẽ sử dụng các ví dụ, chính xác hơn là mộtcông cụ để cho việc tiếp cận dòng C281x được dễ dàng hơn, đó là C281x C/C++ Header Files andPeripheral Examples của TI, có thể tải về và sử dụng miễn phí tại địa chỉ http://focus.ti.com/

docs/toolsw/folders/print/sprc097.html. Theo mặc định chương trình sẽ được cài đặt vào địachỉ C:∖tidcs∖c28∖DSP281x∖v111.

Chúng ta hãy mở project đầu tiên và bắt đầu làm quen với môi trường làm việc: project𝑔𝑝𝑖𝑜_𝑡𝑜𝑔𝑔𝑙𝑒 tại địa chỉ C:∖tidcs∖c28∖DSP281x∖v111∖DSP281x_examples.

Chú ý: đặt chế độ boot của DSP là H0, như đã đề cập đến ở phần 2, để chạy các ví dụ sau.Để mở project này, từ Project⇒Open, rồi chỉ đến mục gpio_toggle, mở file Example_281xGpioToggle.pjt.Quan sát cửa sổ bên tay trái, bạn sẽ thấy các thành phần sau của project:

- Source: C và Assembly.

Page 13: DSPTMS320F2812Tutorial

3.2 Debug chương trình 13

- Libraries (hiện tại chưa có trong project này).

- DSP/BIOS config., dùng để tạo nhân điều hành cho chương trình (hiện tại chưa có trongproject này).

- Linker command file: F2812_EzDSP_RAM_lnk.cmd và DSP281x_Headers_BIOS.cmd, haifile này dùng để cấu hình cho việc phân chia bộ nhớ và dịch mã nguồn.

Project này có thể được dịch và nạp vào DSP, để hiểu rõ hơn về chức năng của các thành phầncũng như cấu tạo của project, đề nghị các bạn đọc tài liệu DSP281x_HeaderFiles_QuickStart_Readme.pdfnằm trong file zip tải về.

Để nạp chương trình vào DSP và cho chạy chương trình này, chúng ta làm như sau:

- Kết nối CCS với phần cứng: ⇒ Debug ⇒ 𝐶𝑜𝑛𝑛𝑒𝑐𝑡. Bạn sẽ thấy có một cửa sổ bong bónghiện ra báo là đã kết nối được với phần cứng.

- Dịch chương trình: ⇒ Project ⇒ Build (F7). Nếu không có lỗi nào, mục Status Window sẽbáo là không có lỗi biên dịch chương trình.

- Nạp chương trình vào phần cứng: ⇒ File ⇒ Load Program, chọn thư mục Debug, rồi chọnfile Example_281xGpioToggle.out.

- Chạy chương trình: ⇒ Debug ⇒ Run, bạn sẽ thấy LED DS2 bớt sáng đi một chút. ⇒ Debug⇒ Hall, bạn sẽ thấy LED DS2 hoặc là sáng hoặc là tắt. Đọc chương trình chúng ta có thểhiểu được điều này dễ dàng.

Để thuận tiện hơn trong khi làm việc với CCS, chúng tôi khuyến khích các bạn học cách sửdụng các phím tắt cho các thao tác có thể lặp đi lặp lại nhiều lần, ví dụ như các thao tác trongquá trình trên.

Ngoài ra một số quá trình sau cũng thường được sử dụng:

- Dừng lại quá trình chạy real time: Debug → Halt.

- Có thể reset lại CPU bằng cách vào Debug → Reset CPU, Debug → Restart.

- Nhảy lại đầu chương trình: Debug → Go Main

3.2 Debug chương trình

Debug là công việc thường xuyên khi viết chương trình, vì vậy tìm hiểu môi trường debug của CCSlà cần thiết.

CCS cung cấp một hệ thống các công cụ giúp cho công việc debug diễn ra thuận lợi. Chúng tacũng sẽ sử dụng project ở phần 1 để tiếp cận các phương thức debug của CCS.

3.2.1 Add a Break Point

Các bước sau sẽ đặt một Break Point vào vị trí thích hợp.

∙ Tìm đến hàm void delay_loop() , ở dòng lệnh for (i = 0;i < 30000;i++) , nhấn chuột phảirồi chọn Toggle Software Break Point.

Page 14: DSPTMS320F2812Tutorial

3.2 Debug chương trình 14

∙ Dòng lệnh này sẽ xuất hiện một chấm đỏ ở bên trái chứng tỏ đã đặt một Break Point vàodòng lệnh này.

Tiếp đó chúng ta cho chạy chương trình (nhấn F5), DSP sẽ được dừng lại khi nhảy đến dònglệnh ở trên. Cho chạy chương trình tiếp tục, chúng ta sẽ thấy kết quả.

Bạn hãy thử gỡ bỏ Break Point rồi chạy chương trình lại, xem kết quả như thế nào. Tiếp đóhãy thử đặt Break Point tại điểm khác, quan sát kết quả.

3.2.2 Add a Probe Point

Có một sự khác biệt nhỏ giữa Break Point và Probe Point là: Break Point đặt CPU vào tình thếdừng (hall) vĩnh viễn, trong khi Probe Point chỉ dừng CPU tạm thời rồi chạy tiếp tục. Thời gianchờ tạm thời này được dùng để trao đổi dữ liệu giữa PC và bộ JTAG.

Quá trình cài đặt Probe Point cũng tương tự như Break Point, chỉ khác ở chổ thay vì chọnBreak Point, chúng ta chọn Probe Point.

Có thể nhận thấy đây là một phương thức debug rất cao cấp để giao tiếp với DSP trong hệthời gian thực gọi là ’Real Time Debug’. Phương thức này sẽ được dùng cho mục đích vẽ đồ thịthời gian thực hay lưu giá trị biến vào file như đề cập ở các phần dưới.

3.2.3 Xem một biến

Dùng Break Point để cho chương trình dừng lại tại dòng lệnh for (i = 0; i < 30000; i++) nhưtrên.

Sau đó click chuột phải vào biến i, chọn Add to Watch Windows.Kết quả sẽ hiện ra như sau:

Hình 11: Xem giá trị biến trong quá trình quá trình debug

Lúc này bạn thử nhấn nút F11 (Step into) để xem biến i tăng dần, cho dù Break Point tại điểmnày đã bị remove hay không.

Page 15: DSPTMS320F2812Tutorial

3.2 Debug chương trình 15

Nếu quan sát kĩ phần hiển thị giá trị của biến, bạn sẽ thấy có hai phần là Watch Locals vàWatch1, Watch2 . . . Phần Watch Locals chỉ hiển thị những biến địa phương trong chương trìnhcon mà con trỏ hiện thời đang trỏ đến. Phần Watch1/2/3... hiển thị những biến mà bạn add vào, kểcả biến địa phương hay biến toàn cục. Tuy nhiên biến địa phương sẽ không cho giá trị nào cả trongphần Watch1/2/3... nếu con trỏ hiện thời không chỉ đến chương trình con chứa biến địa phươngđó.

Hình 12: Màn hình xem giá trị các biến

3.2.4 Debug từng bước

Như đã đề cập ở trên, một trong những tiện ích của debug là chỉ xem một phần nhỏ đoạn code.Điều này có thể thực hiện được thông qua việc debug từng bước.

Xem hình sau để có một cái nhìn tổng thể về vấn đề này.

Hình 13: Debug từng bước

Đến đây chúng tôi khuyến khích các bạn đọc các ví dụ còn lại, tập trung vào các phần nhưphần xử lý GPIO, ADC và Timer.

Page 16: DSPTMS320F2812Tutorial

3.3 Xây dựng chương trình đầu tiên 16

Phần tiếp theo chúng ta sẽ làm quen với việc bắt đầu xây dựng một project.

3.3 Xây dựng chương trình đầu tiên

3.3.1 Tạo một project mới

→ 𝑃𝑟𝑜𝑗𝑒𝑐𝑡 → 𝑁𝑒𝑤

Hình 14: Tạo một project mới

3.3.2 Soạn thảo mã nguồn C/C++

→ 𝐹𝑖𝑙𝑒 → 𝑁𝑒𝑤 → 𝑆𝑜𝑢𝑟𝑐𝑒𝐹 𝑖𝑙𝑒

Rồi copy chương trình sau vào. Rồi save lại với tên bạn muốn, ví dụ main.c

#include <s td i o . h>f loat fk ;unsigned int i k ;void main ( ){

int i ;while (1 ){

for ( i= −5; i< 5 ; i++){

ik = i * i ;fk = rand ( ) / 32768 . 0 ;

}}

}

Lúc này file main.c đã được lưu vào ổ cứng của bạn, nhưng chưa là một thành phần củaproject. Muốn file này là một phần của project, chúng ta phải add nó vào như sau: → 𝑃𝑟𝑜𝑗𝑒𝑐𝑡 →𝐴𝑑𝑑𝐹𝑖𝑙𝑒𝑠𝑡𝑜𝑃𝑟𝑜𝑗𝑒𝑐𝑡 . . . Chọn file main.c.

Đến lúc này màn hình có thể như sau:

Page 17: DSPTMS320F2812Tutorial

3.3 Xây dựng chương trình đầu tiên 17

Hình 15: Màn hình project hiện tại

3.3.3 Cấu hình cho việc dịch

Đưa thư viện ’C – Runtime – Library’ vào project: → Project → Build Options → Include Li-braries. Bạn tìm đến nguồn của file rts2800_ml.lib. Copy toàn bộ đường dẫn này (ví dụ nhưD:∖CCStudio_v3.1∖C2000∖cgtools∖lib∖rts2800_ml.lib) vào tab này.

Chọn kích thước cho stack là 0x400, đây là kích thước mặc định cho stack. Tuy nhiên chúng tacó thể thay đổi kích thước cho phù hợp với từng ứng dụng.

Page 18: DSPTMS320F2812Tutorial

3.3 Xây dựng chương trình đầu tiên 18

Hình 16: Cấu hình cho quá trình biên dịch

3.3.4 Linker Command File

Linker liên kết tất cả các phần chúng ta xây dựng cho hệ thống, điều này được thực hiện thôngqua ’Linker Command File’. File này sẽ được dùng để kết nối hệ thống bộ nhớ phần cứng của DSPvới những sections (phần phân bổ bộ nhớ) mà chúng ta tạo ra trong chương trình phần mềm.

Với board mạch eZdsp2812, chúng ta có một số linker được viết sẵn, được tìm thấy trong thưmục C:∖tidcs∖c28∖DSP281x∖v111∖DSP281x_common∖cmd. Chúng ta có thể sử dụng các linkernày, sau khi đã hiểu rõ cấu trúc của phần cứng bộ nhớ rồi thì có thể sửa lại cho thích hợp với từngứng dụng của mình.

Một điều đáng lưu ý là chúng ta có thể tham chiếu đến cùng một file cho nhiều project khácnhau, tuy nhiên việc dùng chung như vậy có thể dẫn đến nhiều nhược điểm như:

∙ Khi chỉnh sửa trong project này thì file đó đã bị thay đổi, dẫn đến project khác cũng bị thayđổi theo. Cá nhân chúng tôi nhiều lần vấp phải vấn đề này, dẫn đến mất nhiều thời gian sửalỗi.

∙ Khi copy đến máy khác thì phải chỉnh lại đường dẫn.

Vì vậy, cách tốt nhất là hãy copy những mã nguồn này vào cùng trong một thư mục của project.Chúng ta copy 2 file . . . DSP281x_common∖cmd∖F2812_EzDSP_RAM_lnk.cmd và. . . DSP281x_headers∖cmd∖DSP281x_Headers_nonBIOS.cmd vào trong thư mục của project hiện

Page 19: DSPTMS320F2812Tutorial

3.3 Xây dựng chương trình đầu tiên 19

thời. File thứ nhất là file Linker Command, file thứ hai là file định nghĩa các vùng bộ nhớ trênDSP.

Hình 17: Cấu trúc của quá trình liên kết các thành phần trong project

3.3.5 Biên dịch chương trình

Lựa chọn cách thức để dịch chương trình:

Hình 18: Lựa chọn cách thức để dịch chương trình

Có hai cách thức để dịch chương trình:

∙ Debug: là cách thức mặc định. Cách thức này không được tối ưu về mã lệnh khi dịch. Đượcdùng khi đang phát triển project.

∙ Release: cách thức dịch này sẽ mang lại sự tối ưu về thời gian thực thi cũng như kích thướccủa file .out. Được dùng khi project đã hoàn thành.

Đến lúc này chúng ta có thể biên dịch, nạp vào DSP và xem kết quả. Có thể dùng các phươngthức debug ở trên để xem xét các biến.

3.3.6 Vẽ các đồ thị của các biến

Như đã bàn ở trên, CCS cung cấp một công cụ rất mạnh là vẽ đồ thị real – time rất hiệu quả.Chúng ta dùng để quan sát các biến fk là biến ngẫu nhiên trong khoảng [0,1], biến ik là một hàm

Page 20: DSPTMS320F2812Tutorial

3.3 Xây dựng chương trình đầu tiên 20

parabol.

∙ Click chuột phải vào biế fk trong dòng lệnh fk = rand()/32768.0; , rồi chọn Insert Graph.

∙ Chúng ta sẽ vẽ giá trị fk, nên chọn các thông số như sau:

– Start Address: là địa chỉ của biến cần vẽ, chọn &fk.

– Acquisition Buffer Size: chỉ số các giá trị sẽ cập nhật vào đồ thị kể từ biến có địa chỉđịnh trên Start Adress. Vì ở đây chúng ta chỉ cập nhật 1 biến là fk nên chỉ chọn thôngsố bằng 1. Trong trường hợp các giá trị cần hiển thị lên đồ thị là một mảng thì StartAddress là địa chỉ của phần tử đầu tiên của mảng, còn Acquisition Buffer Size là sốphần tử của mảng đó.

– Display Data Size: số các phần tử (lượng tử) sẽ được cập nhật lên trên đồ thị. Trongtrường hợp này ta chọn là 50, có nghĩa là chỉ vẽ 50 giá trị gần nhất cho đến thời điểmhiện tại.

– DSP Data Type: fk được định nghĩa là float nên chọn là 32-bit floating point.

– Sampling Rate: ảnh hưởng đến hiển thị thời gian trên trục tung, giá trị này không phảilà tốc độ lấy mẫu để vẽ đồ thị. Đồ thị chỉ được cập nhật khi chương trình chạy đến đònglệnh được đánh dấu Probe Point mà thôi.

Sau khi thực hiện xong ta sẽ thấy bên phải của dòng lệnh xuất hiện một biểu thị chứng tỏtại dòng lệnh này đã được đặt một Probe Point. Tại sao lại xuất hiện Probe Point? Như vậyviệc click chuột phải để Insert Graph ảnh hưởng như thế nào đến thời điển cập nhật các biếnlên trên đồ thị?

Hình 19: Chọn điểm để cập nhật đồ thị

Page 21: DSPTMS320F2812Tutorial

3.3 Xây dựng chương trình đầu tiên 21

Hình 20: Chọn các thông số để cập nhật giá trị fk

∙ Tương tự chúng ta cũng tại dòng lệnh này, chọn để vẽ đồ thị của biến ik.

Page 22: DSPTMS320F2812Tutorial

3.3 Xây dựng chương trình đầu tiên 22

Hình 21: Chọn các thông số để cập nhật giá trị ik

∙ Khi cho chạy một lúc, chúng ta sẽ thấy kết quả như sau

Hình 22: Đồ thị ik và fk theo thời gian

Như vậy chúng ta đã biết được cách xây dựng và cấu hình cho một project trong CCS rồi đấy!

Page 23: DSPTMS320F2812Tutorial

3.4 Sử dụng các chương trình viết sẵn cho project của mình 23

3.4 Sử dụng các chương trình viết sẵn cho project của mình

Thông thường khi xây dựng một project lớn chúng ta không phải viết từ đầu đến cuối mà sử dụngnhững thu viện hay những section đã được viết sẵn. Chúng ta có nhu cầu sử dụng lại những sourcecode có sẵn.

Khi làm việc với MCU hay DSP thì giao tiếp với IO port là một công việc thường xuyên, lúcđó chúng tôi khuyến khích các bạn sử dụng những chương trình trong gói C281x C/C++ HeaderFiles and Peripheral Examples đã được đề cập ở trên.

Theo kinh nghiệm của chúng tôi, thì chúng ta không nên tham khảo chéo các file được đặttrong thư mục khi cài đặt gói chương trình này, bởi vì có thể chúng ta sẽ tác động lên mã nguồncác file này (do các code này không phải là thư viện), khi đó sẽ gây bất tiện khi làm việc với nhiềuproject khác nhau. Chúng tôi thường copy các mã nguồn (file .c, .asm và .h tương ứng) vào trongthư mục chứa project đang làm việc. Việc làm này có thể gây khó khăn trong thời điểm ban đầuvì bản thân các nguồn này cũng được liên kết đến với nhau, gây báo lỗi thiếu tham chiếu khi dịch,nhưng khi đã quen rồi thì bạn sẽ thấy được tác dụng của nó.

Tài liệu

[1] DSP281x HeaderFiles QuickStart Readme. Texas Instruments.

[2] TMS320F2810, TMS320F2811, TMS320F2812, TMS320C2810, TMS320C2811,TMS320C2812, Digital Signal Processors Data Manual. Texas Instruments.

Page 24: DSPTMS320F2812Tutorial

4 Một số mở rộng 24

4 Một số mở rộng

4.1 Chỉnh sửa linker, nạp chương trình vào flash

Tất cả các ví dụ ở trên được nạp vào RAM để chạy, đông nghĩa với việc khi cung cấp nguồn taphải nạp lại chương trình.

Vì nhiều lý do ta có thể muốn chương trình của mình được nạp trược tiếp vào Flash luôn. Mộtchương trình sau khi được viết thành công ở chế độ boot H0 muốn chuyển qua chế độ boot Flashthì cần phải thực hiện những bước sau:

- Cấu hình lại linker cho phù hợp.

- Nạp vào Flash.

- Debug lại.

Có nhiều cách thức cấu hình lại cho linker trong trường hợp này. Để hiểu rõ hơn về linker chúngtôi khuyến khích bạn đọc 2 tài liêu tham khảo [1] và [2].

Để nạp chương trình vào flash, chúng ta cần cài đặt flash plugin. Plugin này có thể tìm thấytại đĩa CD kèm theo eZdspF2812.

Hình 23: Cài đặt flash plugin cho CCS

Sau khi cài đặt thì trong CCS xuất hiện thêm một công cụ trong menu Tools.

Page 25: DSPTMS320F2812Tutorial

4.2 Giới thiệu một số thư viện 25

Hình 24: On-Chip Flash Plugin trong CCS

Có thể sử dụng tính năng help trong plugin này để lựa chọn các thông số.Và cuối cùng là . . . debug lại chương trình!, chương trình chạy tốt trong RAM nhưng có thể sẽ

gặp vấn đề trong FLASH, và bạn cũng sẽ sớm nhận ra việc debug trong Flash cũng sẽ khác trongRAM, xem tài liệu [1] và [2] để biết thêm.

4.2 Giới thiệu một số thư viện

Một trong những điểm mạnh của dòng DSP của TI là hỗ trợ rất nhiều những công cụ tính toán xửlý số và tính toán thời gian thực. Một số thư viện DSP của TI cho dòng C281x có thể kể đến như:

Trong lĩnh vực điều khiển, thì một số phần thiên về xử lý tín hiệu số có thể sẽ không cần thiết.Nhưng những phần sau đáng để tham khảo khi viết chương trình:

Page 26: DSPTMS320F2812Tutorial

TÀI LIỆU 26

∙ IQMath Library: cung cấp một môi trường ảo cho việc tính toán số thực với các phép toántrên số thực. Thư viện được viết bằng ASM nên tốc độ rất nhanh so với những hàm thư việncủa C.

∙ Communication Driver. Trong gói C281x C/C++ Header Files and Peripheral Examples cócác chương trình để giao tiếp thông qua các phương thức giao tiếp trên DSP như SCI, I2C,SPI . . . Tuy nhiên các chương trình mẫu này sẽ chỉ rất tốt để tham khảo cách thức hoạtđộng, còn để giao tiếp với thế giới bên ngoài thì thư viện Communication Driver mang lại sự’thỏa mái’ và ’trong sáng’ hơn cho chương trình của chúng ta.

∙ Signal Generator và STB: dùng để giả lập trực tiếp trên DSP khi chúng ta không kết nối trựctiếp với phần cứng thông qua việc tạo các hàm input và output.

Chúc các bạn thành công.

Tài liệu

[1] Application Report SPRA958D, Running an Application from Internal Flash Memory on theTMS320F281x DSP. September 2004, Texas Instruments.

[2] Application Report SPRAAU8, Copying Compiler Sections From Flash to RAM on theTMS320F28xxx DSCs. March 2008, Texas Instruments.

Page 27: DSPTMS320F2812Tutorial

5 Phụ lục A 27

5 Phụ lục A

Sơ đồ nguyên lý của board mạch eZdspF2812

Page 28: DSPTMS320F2812Tutorial

5

5

4

4

3

3

2

2

1

1

D D

C C

B B

A A

QA

4

C USED ON

ENGR-MGR

RLSE

DATE

DATE

REV

SHDATE

5

C

62

DATE

REVISION STATUS OF SHEETS

REV

SH

DWN

CDATE

ENGR

SH

DATE

C

CHK

BMFG

1 APPLICATION

NEXT ASSY

DATE

3

C

REV

REVISIONS

DESCRIPTIONREV DATE APPROVED

A PROTOTYPES 04-April-2002

The TMS320F2812 EzDSP design is based onpreliminary information(SPRS174G) for theTMS320F2812 device. This schematic is subject tochange without notification. Spectrum Digital Inc.assumes no liability for applications assistance,customer product design or infringement of patentsdescribed herein.

B PRODUCTION RELEASE 07-June-2002

C UPDATE PER SPRS174G 20-Jan-2003

506262 C

TMS320F2812 EzDSP

B

1 6Thursday, February 13, 2003

SPECTRUM DIGITAL

Title

Size Document Number Rev

Date: Sheet of

Page 29: DSPTMS320F2812Tutorial

5

5

4

4

3

3

2

2

1

1

D D

C C

B B

A A

DSP

LOCATE NEAR DSP

( 3.3V )

( 1.8V )

SINGLE POINT CONNECTION

TAIYO YUDEN EMK325F106ZH-T

506262 C

TMS320F2812 EzDSP

B

2 6Thursday, February 13, 2003

Title

Size Document Number Rev

Date: Sheet of

XA

0X

A1

XA

2X

A3

XA

4X

A5

XA

6X

A7

XA

8X

A9

XA

10X

A11

XA

12X

A13

XA

14X

A15

XA

16X

A17

XA

18

XD0XD1XD2XD3XD4XD5XD6XD7XD8XD9XD10XD11XD12XD13XD14XD15

VDDA1

ADCBGREFIN

VDDA1

VDD11.8V

C28_TRSTn

C28_EMU1C28_EMU0

C28_TCKC28_TMS

XD[0..15]

XA[0..18]

XRnW

XZCS2n

XMP_MCnXREADY

PWM1PWM2PWM3PWM4PWM5PWM6

PWM7PWM8PWM9PWM10PWM11

CAP1_QEP1CAP2_QEP2CAP3_QEPI1

CAP4_QEP3CAP5_QEP4CAP6_QEPI2

T1PWM_T1CMPT2PWM_T2CMP

T3PWM_T3CMPT4PWM_T4CMP

TDIRATCLKINA

TDIRBTCLKINB

PWM12

SCITXDASCIRXDA

CANTXACANRXA

SPISIMOASPISOMIASPICLKASPISTEA

T1CTRIP_PDPINTAn

T3CTRIP_PDPINTBn

MCLKXAMCLKRAMFSXAMFSRAMDXAMDRA

XF_XPLLDISnXINT1n_XBIOnXINT2n_ADCSOCXNMIn_XINT3

C1TRIPnC2TRIPnC3TRIPn

C4TRIPnC5TRIPnC6TRIPn

T2CTRIPn_EVASOCn

T4TRIPn_EVBSOCn

XHOLDnXHOLDAn

XZCS0AND1n

XWEnXZCS6AND7n

1.8V

XTESTSEL

XRSn

X1_CLKIN

XCLKOUT

VREFLO

VDD3VFL

SCITXDBSCIRXDB

C28_TDOC28_TDI

XRDn

ADCINA0ADCINA1ADCINA2ADCINA3ADCINA4ADCINA5ADCINA6ADCINA7ADCINB0ADCINB1ADCINB2ADCINB3ADCINB4ADCINB5ADCINB6ADCINB7

ADCREFPADCREFM

GND

AGND

3.3V

3.3V

TP2

AGND1

C37.001uF

C56.001uF

RN2A33

1 16A B

RN2F33

6 11A B

RN2E33

5 12A B

RN2D33

4 13A B

RN2B33

2 15A BR2624.9K

C3610UF CERAMIC LOW ESR

C3510UF CERAMIC LOW ESR

RN2C33

3 14A B

ADC

FLASH - 3.3V

VDD I/0 -3.3V

VDD CORE - 1.8V

1.8V

U8

TMS320F2812PGF

18 43 80 85 103

108

111

118

121

125

130

132

138

141

144

148

152

156

158

2124273033363954656873749697139147

44881338442511611715982

7776

134

160

6766

135136126131127137146

174173172171170169168167

23456789

1110161213

175164

9293949598

101102104106107109116117122123124

45464748495053555759607172616263

1101157983

149151150

40413435

155157

8789

282526292220

140

9091

69

14 166

15 165

162

163

1 176

19 32 38 52 58 70 86 99 105

113

120

129

142

153

78

31 64 81 114

145

23 37 56 75 100

112

128

143

154

119

XA

0X

A1

XA

2X

A3

XA

4X

A5

XA

6X

A7

XA

8X

A9

XA

10X

A11

XA

12X

A13

XA

14X

A15

XA

16X

A17

XA

18

XD0XD1XD2XD3XD4XD5XD6XD7XD8XD9

XD10XD11XD12XD13XD14XD15

XZCS0AND1nXZCS2n

XZCS6AND7nXWEnXRDnXRnW

XREADYXMP/MCnXHOLDn

XHOLDAn

X1/XCLKINX2

TESTSEL

XRSn

TEST1TEST2

TRSTnTCKTMSTDI

TDOEMU0EMU1

ADCINA0ADCINA1ADCINA2ADCINA3ADCINA4ADCINA5ADCINA6ADCINA7ADCINB0ADCINB1ADCINB2ADCINB3ADCINB4ADCINB5ADCINB6ADCINB7

ADCREFPADCREFMADCRESEXTAVSSREFBGAVDDREFBGADCLOADCBGREFIN

GPIOA0-PWM1GPIOA1-PWM2GPIOA2-PWM3GPIOA3-PWM4GPIOA4-PWM5GPIOA5-PWM6GPIOA6-T1PWM_T1CMPGPIOA7-T2PWM_T2CMPGPIOA8-CAP1_QEP1GPIOA9-CAP2_QEP2GPIOA10-CAP3_QEPI1GPIOA11-TDIRAGPIOA12-TCLKINAGPIOA13-C1TRIPnGPIOA14-C2TRIPnGPIOA15-C3TRIPn

GPIOB0-PWM7GPIOB1-PWM8GPIOB2-PWM9GPIOB3-PWM10GPIOB4-PWM11GPIOB5-PWM12GPIOB6-T3PWM_T3CMPGPIOB7-T4PWM_T4CMPGPIOB8-CAP4_QEP3GPIOB9-CAP5_QEP4GPIOB10-CAP6_QEPI2GPIOB11-TDIRBGPIOB12-TCLKINBGPIOB13-C4TRIPnGPIOB14-C5TRIPnGPIOB15-C6TRIPn

GPIOD0-T1CTRIP_PDPINTAnGPIOD1-T2CTRIPn_EVASOCnGPIOD5-T3CTRIP_PDPINTBnGPIOD6-T4CTRIPn_EVBSOCn

GPIOE0-XINT1_XBIOnGPIOE1-XINT2_ADCSOCGPIOE2-XNMI_XINT13

GPIOF0-SPISIMOAGPIOF1-SPISOMIAGPIOF2-SPICLKAGPIOF3-SPISTEA

GPIOF4-SCITXDAGPIOF5-SCIRXDA

GPIOF6-CANTXAGPIOF7-CANRXA

GPIOF8-MCLKXAGPIOF9-MCLKRAGPIOF10-MFSXAGPIOF11-MFSRA

GPIOF12-MDXAGPIOF13-MDRA

GPIOF14-XF-XPLLDISn

GPIOG4-SCITXDBGPIOG5-SCIRXDB

VD

D3V

FL

VD

DA

1V

DD

A2

VS

SA

1V

SS

A2

VD

D1

VS

S1

VD

DA

IOV

SS

AIO

VS

S2

VS

S3

VS

S4

VS

S5

VS

S6

VS

S7

VS

S9

VS

S10

VS

S11

VS

S12

VS

S13

VS

S14

VS

S15

VS

S16

VS

S8

VD

DIO

1V

DD

IO2

VD

DIO

3V

DD

IO4

VD

DIO

5

VD

D2

VD

D3

VD

D4

VD

D5

VD

D6

VD

D7

VD

D8

VD

D9

VD

D10

XCLKOUT

C58.1uF

L4

BLM21P221SN

TP3

TP

C21uF

C31uF

C57.1uF

L3

BLM21P221SNC38.1uF

Page 30: DSPTMS320F2812Tutorial

5

5

4

4

3

3

2

2

1

1

D D

C C

B B

A A

ASRAM

64Kx16 and 256Kx16Compatible

506262 B

TMS320F2812 EzDSP

B

3 6Thursday, February 13, 2003

Title

Size Document Number Rev

Date: Sheet of

XA15

XA10

XA13

XA5

XA2

XA8XA9

XA14

XA6

XA1XA0

XA4XA3

XA7

XA11XA12

XD4

XD15

XD1

XD13

XD3

XD0

XD12

XD10

XD7

XD5

XD2

XD9XD8

XD6

XD11

XD14

XA16XA17

XWEnXRDn

XA[0..18]

XD[0..15]

GND

XZCS6AND7n

3.3V

3.3V

C100.1uF

C220.1uF

U4

IS61LV6416-12T

12345

18192021

2223

24252627424344

78910131415162930313235363738

61741

4039

28

11 33

12 34

A0A1A2A3A4A5A6A7A8

A9A10

A11A12A13A14A15A16A17

D0D1D2D3D4D5D6D7D8D9

D10D11D12D13D14D15

CSWEOE

BHEBLE

NC

VD

D1

VD

D2

VS

S1

VS

S2

Page 31: DSPTMS320F2812Tutorial

8

8

7

7

6

6

5

5

4

4

3

3

2

2

1

1

D D

C C

B B

A A

XF

XF

XTESTSEL

XMPNMC

BO

OT

MO

DE

PLLDISn

BOOT-0

BOOT-1

BOOT-2

BOOT-3

BOOT-3 BOOT-2 BOOT-1 BOOT-0

FLASH

SPI

SCI

H0

OTP

PARALLEL

SCITXDA MDXA SPISTEA SPICLKAMODE

0

0

0

0

0

0

0

0

0

0

0 0

0

1

1

1

1

1

1

X X

X

X

X

SMT/4PIN DIP

OPTIONAL

Connect VREFLO to AGND orto VREFLO of target systemfor proper ADC operation.

Schematic change from versionA/B to C. F2812 clkin is 1.8Vinput.

Tie off unused F24xxcompatible signals.

Make a solder connection onJP4 and/or JP5 to theappropriate power supply.

TMS320F2812 supports 3.3Vinput/output levels which areNOT 5V tolerant. Connectingthe eZdsp to a system with 5Vinput/output levels will damagethe TMS320F2812. If the eZdspis connected to another targetthen the eZdsp must bepowered up first and powereddown last to prevent latchupconditions.

506262 C

TMS320F2812 EzDSP

B

4 6Thursday, February 13, 2003

Title

Size Document Number Rev

Date: Sheet of

ISnSTRBn

DSP_RSn

ISn

STRBn

GND

SCIRXDACAP1_QEP1CAP3_QEPI1PWM2PWM4PWM6

SPISOMIASPISTEACANRXA

XD0 XD1XD2 XD3XD4 XD5XD6 XD7XD8 XD9

XD10 XD11XD12 XD13XD14 XD15

XA0 XA1XA2 XA3XA4 XA5XA6 XA7XA8 XA9

XA10 XA11XA12 XA13XA14 XA15

XREADYXRnW

XWEn XRDn

VREFLO

T2PWM_T2CMPTCLKINA

PWM7PWM9PWM11CAP4_QEP3T3CTRIP_PDPINTBn

DSP_RSn

SCITXDAXINT1n_XBIOnCAP2_QEP2PWM1PWM3PWM5T1PWM_T1CMPTDIRA

SPISIMOASPICLKACANTXAXCLKOUTPWM8PWM10PWM12T1CTRIP_PDPINTAn

XNMIn_XINT3

XINT1n_XBIOn

XHOLDAn

XA16XA18

XA17XHOLDn

XTESTSEL

ADCINA0ADCINA1ADCINA2ADCINA3ADCINA4ADCINA5ADCINA6ADCINA7

ADCINB0ADCINB1ADCINB2ADCINB3ADCINB4ADCINB5ADCINB6ADCINB7

MCLKRAMCLKXA

MDXAMDRA

MFSRAMFSXA

XINT2n_ADCSOC

CAP5_QEP4CAP6_QEPI2T3PWM_T3CMPT4PWM_T4CMPTDIRBTCLKINBXF_XPLLDISnSCITXDBSCIRXDB

XF_XPLLDISn

XMP_MCn

SPICLKA

SPISTEA

MDXA

SCITXDA

C1TRIPnC2TRIPnC3TRIPn

C4TRIPnC5TRIPnC6TRIPnT4TRIPn_EVBSOCn

T2CTRIPn_EVASOCn

GND

ADCREFPADCREFM

AGND

XZCS2nXZCS0AND1n

X1_CLKIN

MCLK

1.8V

3.3V

3.3V

3.3V

3.3V

3.3V

3.3V

3.3V

+5V3.3V3.3V +5V

P7

123456789

10

JP12

JUMPER3B

1

32

R39 10K

R36 2.2K

JP9

JUMPER3B

1

32

R42 10K

R41 2.2K

R6

10KR5

10K

JP11

JUMPER3B

1

32

R35 2.2K

R38 10K

JP8

JUMPER3B

1

32

R37 2.2K

R40 10K

JP7

JUMPER3B

1

32

R30 2.2K

R31 10K

P4

1234567891011121314151617181920

P9

1 23 45 67 89 1011 1213 1415 1617 1819 20

P5

123456789

10

P8

1 23 45 67 89 1011 1213 1415 1617 1819 2021 2223 2425 2627 2829 3031 3233 3435 3637 3839 40

U14

SN74LVC1G14

24

35

P2

HEADER 30X2

1 23 45 67 89 1011 1213 1415 1617 1819 2021 2223 2425 2627 2829 3031 3233 3435 3637 3839 4041 4243 4445 4647 4849 5051 5253 5455 5657 5859 60

DS2LTST-C150GKTGREEN

JP4

JUMPER3_SMT

1

2

3 ABC

JP5

JUMPER3_SMT

1

2

3 ABC

R1

100JP3

JUMPER3_SMT

1

2

3A B C

C62.1uF

U12SN74AHC1G14

3

4

5

2

R43

220

U11

NO-POP

1

4

8

5

OFFn

GND

VCC

CLK

C43

0.1uF

JP1

JUMPER3B

1

32

L1

BLM21P221SN

R29

100

C42

33 pF

Page 32: DSPTMS320F2812Tutorial

5

5

4

4

3

3

2

2

1

1

D D

C C

B B

A A

XDS510PP EMULATION HEADER

PLACE NEAR EACH MOUNTING HOLE

OPEN-DRAIN

CROSS COUPLE IN T O OUT

EXT_VER 0011 0-001

XRSn is logical AND of PONRSnIN andemulator controlled reset. Power on defaultis PONRnIN controls XRSn.

PPEMU0/1 CONNECT DIRECTLY TO F2812 FOREMULATOR WAIT-IN-RESE T SUPPORT

CBLV-3C-30 .000

IF U13 IS INSTAL LED THENREMOVE R49 AN D R48.

Locate R7,R54, C70 at the DSP XRSn pinfor best EMI/ESD noise immunity.

To/from expansio n header

506262 C

TMS320F2812 EzDSP

C

5 6Thursday, February 13, 2003

Title

Size Document Number Rev

Date: Sheet of

PPBUSDIRPPBUSENn

XPPS4XPPS5XPPS7nXPPS3

PPD1PPINITn

PPD3PPSELn

PPALEn

PPERRn

PPSTRBn

PPD2

PPD0

5VPPTDOPPTCK

PPTMSPPTDI

XPPD6XPPD5XPPD4XPPD3XPPD2XPPD1XPPD0

XPPS3XPPS4XPPS5

XPPS7n

PP

BU

SE

Nn

PP

BU

SD

IR

XP

PC

3nX

PP

C2

XP

PC

1nX

PP

C0n

PP

TR

ST

nX

TR

ST

n

XE

VN

T0

XT

DI

PP

TM

SX

TM

S

XT

DO

3.3VXEVNT1

TP

OW

LOS

Sn

PO

NR

SnI

N

PP

TD

I

XPPC3n

XPPC2

XPPC0n

XTCK

PPTCK

PPTDO

IPP

TC

K

IPP

TD

O

XEVNT1

XEVNT0

XTCK

XTDO

XTDI

XTMS

XTRSTn

PONRSnIN

TPOWLOSSn

XPPD7

ALT

_MC

LKVC

CR

VC

CR

5V

PPTRSTn

PPD4

GND

XT

CK

I

GN

D

EMUOFF

GND

FPG

A_V

CC

A

PPD7

PPSLCT

GND

3.3V

PPACKn

FPGA_VCCA

PPD6

GN

D

JCLK

3.3V

FPG

A_V

CC

A

3.3V

3.3V

GN

D

3.3V

PPD5

PPPE

GND

GND

GND

3.3V

GND

GND

GND

GND

GN

D

GN

DG

ND

GN

D

GND3.3V

FPGA_VCCA

GND

XPPD0

XPPD7

XPPD2

XPPD6

XPPD1

XPPD3

XPPD5XPPD4

PPBSY

XPPC1n

5V

5V

MC

LK

3.3V

3.3V

GN

D

GN

D

GND

3.3V

EM

UO

FF

PPEMU1

PPEMU0

5V

FPGA_VCCA

VCCR

DSP_RSn

PONRSnIN

GND

C28_TRSTn

C28_EMU1

C28_EMU0

C28_TCK

C28_TMS

C28_TDI

C28_TDO

XRSn

MCLK

DSP_RSn

3.3V

3.3V

3.3V

3.3V

3.3V

3.3V

3.3V

+5V

3.3V

+5V

R54

100

C7022nF

C140.1uF

C470.1uF

C130.1uF

C250.1uF

C260.1uF

C240.1uF

C490.1uF

C230.1uF

C450.1uF

C110.1uF

C681uF

U10

30 MHz

1

4

8

5

OFFn

GND

VCC

CLK

C48

0.1uF

L2

BLM21P221SN

R50

41.2K 1%

R51

40.2K 1%

R48

0

U13

TPS72201

1

2

3 4

5IN

GND

EN NC/FB

OUT

C28

.001uF

C27

.1uF

C16

.001uF

C67

.001uF

R47

1M

R9 33

RN4D 334 13A B

RN4C 333 14A B

RN4B 332 15A B

RN4A 331 16A B

RN4H 338 9A B

RN4G 337 10A B

RN4F 336 11A B

RN4E 335 12A B

R12

10K

R22

10K

R11

10K

C50

.1uF

RN3A 331 16A BRN3B 332 15A BRN3C 333 14A BRN3D 334 13A BRN3E 335 12A BRN3F 336 11A BRN3G 337 10A BRN3H 338 9A B

R8 33

R10 33

RN1D 334 13A B

RN1H 338 9A B

U2

74ABT245PW

23456789

191

1817161514131211

10

20

A1A2A3A4A5A6A7A8

GDIR

B1B2B3B4B5B6B7B8

GND

VCC

RN1B 332 15A B

RN1F 336 11A B

RN1C 333 14A B

RN1G 337 10A B

RN1E 335 12A B

RN1A 331 16A B

R23

10K

R25

100

R19

1M

P3DB25_SHIELD

1325122411231022

921

820

719

618

517

416

315

214

1

A

B

C30

33pf

C34

33pf

R15

100

R24

100C15

33pfC17

33pf

R17

10K

R16

10KU5

74ABT245PW

23456789

191

1817161514131211

10

20

A1A2A3A4A5A6A7A8

GDIR

B1B2B3B4B5B6B7B8

GND

VCC

R13

10K

P1

HEADER 7X2

1 23 45 67 89 1011 1213 14

R18

100

C52

33pf

R20

100

R14

10KC53

33pfC54

33pf

EMBEDDED PP JTAG CONTROLLERSPECTRUM DIGITAL INC.

506053-0001B

U6

506053-0001B

123456789

10111213141516171819202122232425

26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50

51525354555657585960616263646566676869707172737475

767778798081828384858687888990919293949596979899100

GNDRSV1_TDI_IOEMUOFFXEVNT1PPEMU1RSV2RSV3_TMS_IOVCCIGNDXPPD0XPPD1XPPD2XPPD3XPPD4XPPD5XPPD6XPPD7RSV4RSV5VCCIXPPS3XPPS4XPPS5XPPS6XPPS7n

PP

BU

SE

Nn

RS

V6

PP

BU

SD

IRR

SV

7X

PP

C3n

XP

PC

2X

PP

C1n

XP

PC

0nR

SV

8_P

RB

_IO

VC

CA

GN

DV

CC

R_N

CA

LT_M

CLK

HC

LKR

SV

9P

ON

RS

nT

PO

WLO

SS

nV

FUN

C_E

NV

CC

IE

XT

_VE

R7

EX

T_V

ER

6E

XT

_VE

R5

EX

T_V

ER

4E

XT

_VE

R3

EX

T_V

ER

2

GNDEXT_VER1EXT_VER0

VPOWER_ONnVPOWER_BLEED

VBUS_ENnVCCAVCCI

XBITIN3XBITIN2XBITIN1XBITIN0

XBITOUT3XBITOUT2XBITOUT1XBITOUT0

VCCAGNDGND

EXTERN_RSTnMCLKOUT2EN

MCLKOUT2MCLKOUTEN

MCLKOUTDSP_RSn

EM

UO

FF_1

OD

EM

U1_

SR

CO

DE

MU

0_S

RC

OD

EM

U1n

OD

EM

U0n

PP

TD

IV

CC

IX

TD

OP

PT

MS

XT

MS

JCLK

RS

V10

XT

CK

IV

CC

R_N

CV

CC

AG

ND

RS

V11

_PR

A_I

OP

PT

DO

XT

DI

PP

TC

KP

PT

RS

Tn

XT

RS

Tn

PP

EM

U0

XE

VN

T0

RS

V13

_TC

K_I

O

C33

33pf

C55

33pf

C29

33pf

R32

33

C32

33pfC31

33pf

C51

.001uF

R71.5K

R49

0

C46

NO-POP

Page 33: DSPTMS320F2812Tutorial

5

5

4

4

3

3

2

2

1

1

D D

C C

B B

A A

+5V Max

16.9K 1.848V15.0K 1.773V13.7K 1.722V

PONRSnIN, GOES HIGH > 200ms AFTER ALL POWERIS STABLE.

3.3V THEN 1.8V

POWER ON SEQUENCE NOTES

3.3V SUPPLY, VDDIOVDD3VFL, VDDA1,VDDA2

1.8V SUPPLY

2.2V

140ms-280ms

Q3

PONRSnIN

VOLTAGE SUPPLY MAX CURRENT TPS767D301 PD

1.8V

3.3V

333mA

307mA

1065mW

521mW

PD(max) = (Tj(max) - Ta)/Rja

= (125 - 35)/27.9

= 3255mW

TPS767D301 RATINGS

MAX Iout PER CHANNEL IS 1A

TPS767D301 PD = (Vin-Vout)*Iout

1586mW Total

TIE TPS767D301 POWER PAD TO GNDPLANE (TI-SLMA002)

SET Q3 TO TURN ON WHEN 3.3V SUPPLY ISGREATER THEN 2.2 VOLTS. REGULATORTURN ON DELAY AND RAMP RATE WILLENSURE THAT 3.3V SUPPLY IS AT 2.5 VOLTSOR HIGHER BEFORE THE 1.8V SUPPLYREACHES 0.3 VOLTS.

18.2K 1.899V

U16 WILL TURN OFF THE 1.8V SUPPLY WHENINPUT POWER FALLS BELOW 2.94V. THIS SPEEDSUP THE 1.8V SUPPLY TURN OFF.

RESETn of TPS3838 is open-drain. U16 was added for testing but notpopulated on production boards.

506262 C

TMS320F2812 EzDSP

B

6 6Thursday, February 13, 2003

Title

Size Document Number Rev

Date: Sheet of

1.8VONn 1.8V

1.8V

PONRSnIN

VDD3VFL

GND

+5V

3.3V

3.3V

3.3V

3.3V

R2

10K

TP1

GND

1

C410.1uF

C50.1uF

C80.1uF

C210.1uF

C180.1uF

C190.1uF

C610.1uF

C400.1uF

R4610K

C600.1uF

C390.1uF

C60.1uF

C200.1uF

C90.1uF

C66

0.1uF

C65

0.1uF

R3316.9K, 1%

R45 30.1K, 1%

C64

0.1uF+ CT3

22uF

U9

TPS767D301

56

4

3

1112

10

9

1278

1314

151620212627

28

232425

22

171819

1IN1IN

1EN

1GND

2IN2IN

2EN

2GND

NCNCNCNCNCNC

NCNCNCNCNCNC

1RESET

1OUT1OUT

1FB/SENSE

2RESET

2OUT2OUT

2SENSE

TH

ER

MA

L_P

AD

C63

0.1uF+ CT4

22uF

+ CT122uF

+ CT522uF

+ CT247uF

C7.1uF

C11uF

P6

C590.1uF

R53

1.5K 1%

U16

TPS3838K33DBV

1

2

3

4

5CT

GND

MRn

RESETn

VDDQ3BSS138G

DS

R44220

R34

2.0K 1%

R52

0

DS1LTST-C150GKTGREEN

+ CT622uF

Page 34: DSPTMS320F2812Tutorial

6 Phụ Lục B 34

6 Phụ Lục B

Sơ đồ nguyên lý và miêu tả board mạch Zwickau Adapter Board, một tham khảo cho mở rộng đốivới eZdspF2812.

Page 35: DSPTMS320F2812Tutorial

Zwickau University ‘c28x Development Board

This document outlines the ‘c28x adaptor board developed by Zwickau University

Description

The Zwickau University adptor board is designed to be used with the Spectrum DigitalTMS320F2812 ‘eZdsp’ board. The peripheral expansion sockets on the eZdsp board can be fittedwith header plugs which allow it to be connected to the Zwickau board. The adaptor includes thefollowing features…

• 8x LED’s connected to GPIOB7..B0• 8x DIP switches connected to GPIOB15..B8• 2x momentary pushbuttons connected to GPIOD6 & D1• Loudspeaker connected to T1PWM output• 2x potentiometers allowing 0-3V to be applied to ADC channels A0 & B0• CAN port: link selectable between high-speed (SN65HVD230D) and low speed

(TJA1054A) transceivers, each with separate connector• SCI-A port connected to RS232 transceiver and 9-pin ‘D’ socket• SPI output connected to serial EEPROM (M95080) ( Note : chip select GPIO-D5) and

serial DAC (TLV5617A) (Note: chip select by GPIOD0 pin)• I2C temperature sensor connected to GPIOG5 & G4 pins

Page 36: DSPTMS320F2812Tutorial

The adaptor board was designed by Dr. Frank Bormann of the University of Zwickau. Boards canbe obtained by

University of Applied Sciences ZwickauDepartment of Electrical EngineeringMr. Frank BormannDr. – Friedrichs – Ring 2A08056 ZwickauGermany

The board is supplied with a description , a hardware configuration file and sample programs totest all parts of the peripherals. The cost per adaptor board will be 299 Euro.

DSK (eZdsp) Starter Kit Information

U.S. Part number: TMDX3P761128European Part number: TMDX3P761128ETI price: $305.00Web link: TMS320F2812 eZdsp Kit (DSK)

Page 37: DSPTMS320F2812Tutorial

17.03.2004 09:06:54 f=0.68 E:/Forschung/Daughterboard eZdspF2812/V2/F2812-ADD_B.sch (Sheet: 1/1)

Page 38: DSPTMS320F2812Tutorial

BOM for Zwickau Adapter Board Part Value Device Package Description C1 100n C-SMD1206 C1206 SMD-Capacitor C2 10 µ ELKO-SMDC CT6032-C Tantal-SMD-Elko C3 1µ ELKO-SMDA CT3216-A Tantal-SMD-Elko C4 1µ ELKO-SMDA CT3216-A Tantal-SMD-Elko C5 100n C-SMD1206 C1206 SMD-Capacitor C6 100n C-SMD1206 C1206 SMD-Capacitor C7 100n C-SMD1206 C1206 SMD-Capacitor C8 100n C-SMD1206 C1206 SMD-Capacitor C9 100n C-SMD1206 C1206 SMD-Capacitor C10 100n C-SMD1206 C1206 SMD-Capacitor C11 100n C-SMD1206 C1206 SMD-Capacitor D1 LED8 LED8 LZR188 ZAQS0807 IC1 2937IMP-3,3 SOT223 Voltage Regulator 3,3V IC2 TLV2462 TLV2462ID SO08 Dual OPAMP IC3 SN74LVT244BDW SN74LVT244BDW SOIC20 8x LED driver IC4 MAX232 MAX232 SO16 Transceiver RS 2312 IC5 TLV5617A TLV5617A SO08 Dual 10-Bit-DAC IC6 M95080 M95080 SO08 serial EEPROM IC7 DS1621 DS1621 SO08 temperature sensor IC8 SN65HVD230D SN65HVD230D SO08 CAN-High-speed IC9 74LCX14 74LCX14 SO14 Schmitt- Trigger CAN-H IC10 TJA1054A TJA1054A SO14 CAN – Low speed IC11 LD1117S33C SOT223 Voltage Regulator 3.3V IC12 TLV2462 TLV2462ID SO08 Dual OPAMP JP1 JP2E JP2 JUMPER JP2 JP2E JP2 JUMPER JP3 JP1E JP1 JUMPER JP4 JP2E JP2 JUMPER JP5 JP2E JP2 JUMPER JP6 JP2E JP2 JUMPER JP7 JP1E JP1 JUMPER JP8 JP1E JP1 JUMPER P2 FE30-2FE30-2MIR FE30-2MIR FEMALE HEADER P4 FE20-1FE20R FE20-ROUND FEMALE HEADER P5 FE10-1FE10R FE10-ROUND FEMALE HEADER P7 FE10-1FE10R FE10-ROUND FEMALE HEADER P8 FE20-2FE20-2MIR FE20-2MIR FEMALE HEADER P9 FE10-2FE10-2MIR FE10-2MIR FEMALE HEADER R1 10k TRIM_EU-RS3 RS3 POTENTIOMETER R2 10k TRIM_EU-RS3 RS3 POTENTIOMETER R3 1k R-EU_R1206 R1206 RESISTOR R4 1k R-EU_R1206 R1206 RESISTOR R5 150 R-EU_R1206 R1206 RESISTOR R6 150 R-EU_R1206 R1206 RESISTOR R7 100k R-EU_R1206 R1206 RESISTOR R8 2,2k R-EU_R1206 R1206 RESISTOR R9 100k R-EU_R1206 R1206 RESISTOR R10 2,2k R-EU_R1206 R1206 RESISTOR

Page 39: DSPTMS320F2812Tutorial

R11 4,7k R-EU_R1206 R1206 RESISTOR R12 10k R-EU_R1206 R1206 RESISTOR R13 10k R-EU_R1206 R1206 RESISTOR R14 47k R-EU_R1206 R1206 RESISTOR R15 4,7k R-EU_R1206 R1206 RESISTOR R16 1k R-EU_R1206 R1206 RESISTOR R17 22 R-EU_R1206 R1206 RESISTOR R18 100 R-EU_M1206 M1206 RESISTOR R19 100 R-EU_M1206 M1206 RESISTOR R20 120 R-EU_R1206 R1206 RESISTOR R21 4,7k R-EU_M1206 M1206 RESISTOR R22 1,2k R-EU_M1206 M1206 RESISTOR R23 4,7k R-EU_M1206 M1206 RESISTOR R24 520 R-EU_M1206 M1206 RESISTOR R25 520 R-EU_M1206 M1206 RESISTOR RN1 82 G08R SIL9 SIL RESISTOR RN2 100k G08R SIL9 SIL RESISTOR RN3 2,2k G08R SIL9 SIL RESISTOR RN4 100K G08R SIL9 SIL RESISTOR S1 BUTTON TA S2 BUTTON TA S3 DS08 DS-08 DIL/CODE SWITCH SP1 F/PMW04A F/PMX04 F/PMX04A SPEAKER U$1 SMD-SO20 SMD-SO20 SO20 V1 BC849 BC849SMD SOT23-BEC NPN Transistor X1 RS232 F09HP F09HP SUB-D X2 CAN-H M09HP M09HP SUB-D X3 CAN-L MDSSV-BC04 SSV-BC04 YAMAICHICONNECTOR

Page 40: DSPTMS320F2812Tutorial

7 Phụ Lục C 40

7 Phụ Lục C

Chương trình giao tiếp với LCD, thông qua giao tiếp 4bit.File định nghĩa lcd.h

#ifndef _LCD_H#define _LCD_H

/* ********************************************************LCDPortA******************************************************** */#define LCD_D0 1<<0#define LCD_D1 1<<1#define LCD_D2 1<<2#define LCD_D3 1<<3#define LCD_RS 1<<4#define LCD_EN 1<<5#define LCD_LED 1<<6#define LCD_BUS LCD_D0 | LCD_D1 | LCD_D2 | LCD_D3#define lcd_en_set ( ) GpioDataRegs .GPASET. a l l |= LCD_EN // EN = 1 ( Enable )#define lcd_en_clr ( ) GpioDataRegs .GPACLEAR. a l l |= LCD_EN // EN = 0 ( Disab l e )#define lcd_rs_data ( ) GpioDataRegs .GPASET. a l l |= LCD_RS // RS = 1 ( S e l e c t I n s t r u c t i on mode)#define lcd_rs_ins ( ) GpioDataRegs .GPACLEAR. a l l |= LCD_RS // RS = 0 ( S e l e c t Data mode)

/* Define cac thao tac co ban vo i LCD *///#de f i n e l cd_c l ear ( ) l cd_wri te_contro l (0 x01 ) // Clear Disp lay#define lcd_cursor_home ( ) lcd_write_contro l (0 x02 ) // Set Cursor = 0#define lcd_display_on ( ) lcd_write_contro l (0x0E) // LCD Disp lay Enable#define l cd_disp lay_of f ( ) lcd_write_contro l (0 x08 ) // LCD Disp lay Di sab l e#define lcd_display_blink_on ( ) lcd_write_contro l (0x0F) // Set Cursor = Bl ink#define l cd_disp lay_bl ink_of f ( ) lcd_write_contro l (0x0E) // Set Cursor = Bl ink#define lcd_cursor_on ( ) lcd_write_contro l (0x0E) // Enable LCD Cursor#define l cd_cursor_of f ( ) lcd_write_contro l (0x0C) // Disab l e LCD Cursor#define l cd_curso r_le f t ( ) lcd_write_contro l (0 x10 ) // S h i f t Le f t Cursor#define l cd_cursor_right ( ) lcd_write_contro l (0 x14 ) // S h i f t Right Cursor#define l cd_d i sp l ay_s l e f t ( ) lcd_write_contro l (0 x18 ) // S h i f t Le f t Disp lay#define l cd_di sp lay_sr ight ( ) lcd_write_contro l (0x1C) // S h i f t Right Disp lay

/* pro to type */void l cd_write_contro l ( char ) ; // Write I n s t u c t i on to LCDvoid l cd_wr i t e_asc i i ( char ) ; // Write LCD Disp lay (ASCII )void l cd_conf ig (void ) ; // I n i t i a l LCDvoid lcd_goto_xy ( char row , char col lum ) ;void l cd_pr int ( char * ) ; // Print Disp lay to LCDvoid de lay1s (void ) ; // Delay Function// vo id delay_160us ( vo id ) ;void delay_4ms (void ) ;void l cd_c l ea r ( void ) ;

Page 41: DSPTMS320F2812Tutorial

7 Phụ Lục C 41

/* −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− */#endif

File chứa mã nguồn lcd.c

/* l c d . c*/

#include " l cd . h"

int busy_lcd (void ) ; // Read Busy LCD Sta tus// vo id enab le_lcd ( vo id ) ; // Enable Pulsevoid lcd_out_data4 ( char ) ;void lcd_write_byte ( char ) ;/* **************************************************** *//* I n i t i a l LCD : 8 b i t ,2− l i n e d i sp l ay ,5 x7 dot chara te r *//* **************************************************** */void l cd_conf ig ( ){

EALLOW;// s e t those p ins as input /ouputGpioMuxRegs .GPAMUX. a l l &= ~( LCD_D0 | LCD_D1 | LCD_D2 | LCD_D3 | LCD_EN | LCD_RS ) ;GpioMuxRegs .GPAMUX. a l l &= ~( LCD_LED ) ;// s e t t i n g those p ins as outputGpioMuxRegs .GPADIR. a l l |= ( LCD_D0 | LCD_D1 | LCD_D2 | LCD_D3 | LCD_EN | LCD_RS ) ;GpioMuxRegs .GPADIR. a l l |= ( LCD_LED ) ;GpioDataRegs .GPASET. a l l |= (LCD_LED) ;EDIS ;

lcd_write_contro l (0 x30 ) ; // Function Set (8 b i t )l cd_write_contro l (0 x02 ) ;l cd_write_contro l (0 x28 ) ; // Function Set (DL=1 4−Bit ,N=1 2 Line ,F=0 5X7)

l cd_write_contro l (0x0E ) ; // Disp lay on Contro l ( Cursor on , Cursor not Bl ink )l cd_write_contro l (0 x01 ) ; // Entry Mode Set ( I /D=1 Increment , S=0 Cursor S h i f t )l cd_c l ea r ( ) ;

}

/* ********************** *//* Set cursor p o s i t i o n *//* ********************** */

void lcd_goto_xy ( char row , char col lum ){

unsigned char pos ;pos = col lum ;pos |= 0x80 ;

Page 42: DSPTMS320F2812Tutorial

7 Phụ Lục C 42

i f ( row == 2)pos |= 0x40 ; // Set DD−RAM Address Command

l cd_write_contro l ( pos ) ;// delay_4ms ( ) ;}

/* ************************** *//* Strobe 4−Bit Data to LCD *//* ************************** */void lcd_out_data4 ( char va l ){

GpioDataRegs .GPACLEAR. a l l |= (LCD_BUS) ; // Reset 4−Bit Pin DataGpioDataRegs .GPASET. a l l |= ( va l ) ; // 0000:0000: dddd :RS,RW,EN,0 :0000 :0000 :0000 :0000

}

/* ************************** *//* Write Data 1 Byte to LCD *//* ************************** */void lcd_write_byte ( char va l ){

unsigned int i ; // Delay Countlcd_out_data4 ( ( val >>4)&0x0F ) ; // Strobe 4−Bit High−Nibb l e to LCDlcd_en_set ( ) ;for ( i =0; i <5000; i ++); // Wait Command Readylcd_en_clr ( ) ;

lcd_out_data4 ( va l&0x0F ) ; // Strobe 4−Bit Low−Nibb l e to LCDlcd_en_set ( ) ;for ( i =0; i <5000; i ++); // Wait Command Readylcd_en_clr ( ) ;

}

/* **************************** *//* Write cons t ruc t i on to LCD *//* **************************** */void l cd_write_contro l ( char va l ){

lcd_rs_ins ( ) ;lcd_write_byte ( va l ) ;

}

/* ******************************* *//* Write a s c i i charac t e r to LCD *//* ****************************** */void l cd_wr i t e_asc i i ( char va l ){

lcd_rs_data ( ) ;lcd_write_byte ( va l ) ;

Page 43: DSPTMS320F2812Tutorial

7 Phụ Lục C 43

}

/* ********************************** *//* Print Disp lay Data (ASCII ) to LCD *//* ********************************** */void l cd_pr int ( char* s t r ){

unsigned char i ;for ( i =0; i< 18 && s t r [ i ] !=0 ; i++) // 16 i n t a c t e r Print{

l cd_wr i t e_asc i i ( s t r [ i ] ) ; // Print Byte to LCD}

}

/* ********************************************

*********************************************** */void l cd_c l ea r ( void ){

lcd_write_contro l (0 x01 ) ;delay_4ms ( ) ;

}

/* ********************* *//* Delay Time Function *//* 1−4294967296 *//* ********************* */

void de lay1s ( void ){

unsigned long count1 = 6000000;while ( count1 > 0) {count1−−;} // Loop Decrease Counter

}

void delay_4ms ( void ){

unsigned long i= 100000;while ( i−− ) ;

}