60
March 1999 Mixed-Signal Product Application Report SLAA051

TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

March 1999 Mixed-Signal Product

ApplicationReport

SLAA051

Page 2: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

IMPORTANT NOTICE

Texas Instruments and its subsidiaries (TI) reserve the right to make changes to their products or to discontinueany product or service without notice, and advise customers to obtain the latest version of relevant informationto verify, before placing orders, that information being relied on is current and complete. All products are soldsubject to the terms and conditions of sale supplied at the time of order acknowledgement, including thosepertaining to warranty, patent infringement, and limitation of liability.

TI warrants performance of its semiconductor products to the specifications applicable at the time of sale inaccordance with TI’s standard warranty. Testing and other quality control techniques are utilized to the extentTI deems necessary to support this warranty. Specific testing of all parameters of each device is not necessarilyperformed, except those mandated by government requirements.

CERTAIN APPLICATIONS USING SEMICONDUCTOR PRODUCTS MAY INVOLVE POTENTIAL RISKS OFDEATH, PERSONAL INJURY, OR SEVERE PROPERTY OR ENVIRONMENTAL DAMAGE (“CRITICALAPPLICATIONS”). TI SEMICONDUCTOR PRODUCTS ARE NOT DESIGNED, AUTHORIZED, ORWARRANTED TO BE SUITABLE FOR USE IN LIFE-SUPPORT DEVICES OR SYSTEMS OR OTHERCRITICAL APPLICATIONS. INCLUSION OF TI PRODUCTS IN SUCH APPLICATIONS IS UNDERSTOOD TOBE FULLY AT THE CUSTOMER’S RISK.

In order to minimize risks associated with the customer’s applications, adequate design and operatingsafeguards must be provided by the customer to minimize inherent or procedural hazards.

TI assumes no liability for applications assistance or customer product design. TI does not warrant or representthat any license, either express or implied, is granted under any patent right, copyright, mask work right, or otherintellectual property right of TI covering or relating to any combination, machine, or process in which suchsemiconductor products or services might be or are used. TI’s publication of information regarding any thirdparty’s products or services does not constitute TI’s approval, warranty or endorsement thereof.

Copyright 1999, Texas Instruments Incorporated

Page 3: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

iii TVP5020 NTSC/PAL Video Decoder

Contents1 Introduction 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2 Hardware Platform 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1 Block Diagram 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Schematic Diagram – Microcontroller Interface 4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.2.1 Memory Mapped VMI Interface 5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3 Source File for PAL1 6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4 Source File: VMI_PORT.C 8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5 Make File: APP_VMI.LIN 8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.6 Map File: APP_VMI.M51 9. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.7 Schematic Diagram—TVP5020 NTSC/PAL Video Decoder 10. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3 Program Overview 13. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1 Microcontroller-Specific Macros 14. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Header File: REG652.H 15. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3 Source-Code Modules 17. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4 Program Description 18. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1 Source-Code Module: Main 18. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4.1.1 Inclusion of TVP5020 Microcode Files (Lines 11–14) 18. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.2 Function: Main() 18. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.3 Function: Power-up Initialization() 20. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.4 Function: Patch TVP5020 Registers() 21. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4.2 Header File: Main.H 21. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3 Source File: Main.C 22. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4 Source-Code Module: I2C 25. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4.4.1 Function: initia_i2c() (Lines 28–41) 25. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.2 Function: start_i2c() 25. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.3 Function: i2c_isr() (Lines 77–266) 25. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4.5 Header File: 12C.H 27. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.6 Source File: I2C.C 28. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.7 Source-Code Module: Timer 34. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4.7.1 Function: timer0_isr() (Lines 26–59) 34. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.7.2 Function: timer0_initialize() (Lines 61–94) 34. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.7.3 Function: ResetTickCount() (Lines 96–112) 34. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.7.4 Function: current_tick() (Lines 114–131) 34. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.7.5 Function: timer0_elapsed_count() (Lines 133–150) 34. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.7.6 Function: timer0_wait() (Lines 152–167) 34. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4.8 Header File: Timer.H 35. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.9 Source File: TIMER.C 36. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.10 Source-Code Module: VMI5020 40. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4.10.1 Vertical Blanking Interval Data Processor (VDP) 40. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.10.2 Function: DecoderReset() (Lines 20–34) 40. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.10.3 Function: HandleDownload() (Lines 36–48) 41. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.10.4 Function: Write TVP5020() (Lines 50–56) 41. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.10.5 Function: Write TVP5020VMI() (lines 58–127) 41. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.10.6 Function: ReadSwitch() (Lines 129–154) 42. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.10.7 Function: ReadTVP5020() (Lines 156–168) 42. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.10.8 Function: ReadTVP5020VMI() (Lines 170–220) 42. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4.11 Header File: VMI5020.H 43. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.12 Source File: VMI5020.C 44. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.13 Source-Code Module: I2C6000 49. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Page 4: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Figures

iv SLAA051

4.13.1 Function: read_tvp6000() (lines 23–40) 49. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.13.2 Function: write_tvp6000() (Lines 41–50) 49. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.13.3 Function: LoadTVP6000() (Lines 52–75) 50. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.13.4 Function: PatchTVP6000 (Lines 77–97) 50. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4.14 Header File: I2C6000.H 50. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.15 Source File: I2C6000.C 51. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.16 TVP6000 Initialization Data for NTSC with CCIR601 Sampling 53. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.17 TVP6000 Initialization Data for NTSC with Square Pixel Sampling 54. . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.18 TVP6000 Initialization Data for PAL with CCIR601 Sampling 55. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.19 TVP6000 Initialization Data for PAL with Square Pixel Sampling 56. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

List of Figures1 TVP56000EVM Block Diagram 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Microcontroller Interface Schematic 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 TVP5020 NTSC/PAL Video Decoder Schematic 11. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 TVP56000EVM Board Layout 12. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Help-About Dialog Box from uVision/51 for Windows 13. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Help-About Dialog Box Signum Systems In-Circuit Emulator 14. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 TVP5020 Microcode in Hex-ASCII Format 18. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 TVP5020 Microcode after Conversion to Standard C Format 19. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 TVP5020 Microcode after Modification 19. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

List of Tables1 Microcontroller I/O Port Utilization 4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 DIP-Switch Settings for TVP56000EVM 4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Jumper Settings for TVP56000EVM Using VMI Bus 12. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Sampling Rate Dependent Jumper Settings 12. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Source Code Module Relationships 17. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 TVP5020 Register Patches 18. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 I2C Controller: Master Transmitter States 26. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Controller: Master Receiver States 26. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Page 5: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

1

TVP5020 NTSC/PAL Video DecoderProgramming for the VMI Host Interface

Michael A. Tadyshak

ABSTRACTThis application report provides a complete working example of a C-language programto initialize the TVP5020 NTSC/PAL video decoder using the VMI Bus interface. ThisExample Initialization Program executes on the TVP56000EVM evaluation modulefeaturing the TVP5020 video decoder and the TVP6000 video encoder. Topics coveredinclude the TVP56000EVM hardware platform, microcontroller-specific aspects, and adetailed description of the source code modules.

1 IntroductionThe TVP5020 NTSC/PAL Video Decoder enables a wide range of applicationsby providing support for each of the following host interfaces:

• I2C (Inter-Integrated Circuit) Bus 1995 Philips Semiconductors

• VIP (Video Interface Port) 1994, 1996, 1997 Video Electronic StandardsAssociation

• VMI (Video Module Interface) 1997 Cirrus Logic

#&! %# # !$ ( $#) #" ' #)#

!! $"! ( !$ # "$! ! $ %!# #

" # *" "$! $" $" "

!! ! "#&! %# ! # $"!" & !&! #!

Page 6: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Hardware Platform

2 SLAA051

2 Hardware Platform

2.1 Block Diagram

This program was tested on the TVP56000EVM (Evaluation Module for theTVP5020 Video Decoder and the TVP6000 Video Encoder). A block diagram ofthis EVM is shown in Figure 1. The program is executed by the Philips P80C652Microcontroller. This device is a derivative of the Intel 80C51 microcontroller andis second-sourced by Philips. The P80C652 includes an on-chip I2C Buscontroller. The program is stored in the 64 KB flash memory device. This deviceis an Atmel 29C512. Since this program is a scaled-down version of the completeEVM microcode program, it does not support flash reprogramming or the serialport. In order to install this program on the EVM, it must be programmed into theflash memory device with a PROM programmer. The EVM also has 32 KB ofstatic RAM available for program use.

Comp In1

TVP5020Comp In2

S-Video In(Y) TVP6000

Y[7:0]

JP8SCLK

ECLto

TTLD1CLK

S-Video In(C)

P5

XTAL

Comp Out

S-Video Out(Y)

S-Video Out(C)

Y[7:0]

Flash Memory64 KB

RAM32 KB

TTLto

ECL XTAL

VoltageRegulator

A+5 V D+5 V D+3.3 V PLL+3.3 V

–12 V +12 V +5 V

–5 V

J7-4 J7-5 J7-3

P1

P2 RS-232

Y[7:0]

J1J2

J3-Y

J3-C

J4

J5-Y

J5-C

VMI

LLC

I2C

PhilipsP80C652

Microcontroller

XTAL

Figure 1. TVP56000EVM Block Diagram

Page 7: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Hardware Platform

3TVP5020NTSC/PAL Video Decoder

Fig

ure

2.M

icro

cont

rolle

r In

terf

ace

Sch

emat

ic

/RA

MW

R

Vid

eo C

hip

Set

Eva

luat

ion

Sys

tem

: C

ontr

olle

r

Y4

11.0

59 M

Hz

C27

10 p

F

U9 MC

M62

06D

J25

A0

10

A1

9

A2

8

A3

7

A4

6

A5

5

A6

4

A7

3

A8

25

A9

24

A10

21

A11

23

A12

2

A13

26

A14

1

D0

11

D1

12

D2

13

D3

15

D4

16

D5

17

D6

18

D7

19

CE

20

OE

22

W27

R12

10 K

Ω

S2

SW

_PU

SH

U4 T

LC77

05

CO

NT

RO

L1

/RE

SIN

2

CT

3

GN

D4

/RE

SE

T5

RE

SE

T6

SE

NS

E7

VD

D8

U6

74F

573

D1

2

D2

3

D3

4

D4

5

D5

6

D6

7

D7

8

D8

9

C11

OC

1

Q1

19

Q2

18

Q3

17

Q4

16

Q5

15

Q6

14

Q7

13

Q8

12

U5

AT

29C

512

A0

12

A1

11

A2

10

A3

9

A4

8

A5

7

A6

6

A7

5

A8

27

A9

26

A10

23

A11

25

A12

4

A13

28

A14

29

CE

22

OE

24

WE

31

I/O0

13

I/O1

14

I/O2

15

I/O3

17

I/O4

18

I/O5

19

I/O6

20

I/O7

21

A15

3

JP3

HE

AD

ER

3

1 2 3

C25

1 µF

R15

330

U8A

74A

LS05

12

U8C

74A

LS05

56

R14

330 D

1

LED

D2

LED

R13

47 K

Ω

R10

2.2

U11 S

N75

185

VD

D1

RA

12

RA

23

RA

34

DY

15

DY

26

RA

47

DY

38

RA

59

VS

S10

GN

D11

RY

512

DA

313

RY

414

DA

215

DA

116

RY

317

RY

218

RY

119

VC

C20

JP4

HE

AD

ER

2X

2

12

34

P2

CO

NN

EC

TO

R D

B9

5 9 4 8 3 7 2 6 1

C23

0.1

µFC

240.

1 µF

R11

RP

4

2NB

S08

–TJ2

–103

–ND

12

345

67

8

U7

80C

652

P1.

57

P1.

6/S

CL

8

P1.

7/S

DA

9

RS

T10

P3.

0/R

xD11

NC

12

P3.

1/T

xD13

P3.

2/IN

T0

14

P3.

3/IN

T1

15

P3.

4/T

016

P3.

5/T

117

P0.

4/A

D4

39

P0.

5/A

D5

38

P0.

6/A

D6

37

P0.

7/A

D7

36

EA

35

NC

34

ALE

33

PS

EN

32

P2.

7/A

1531

P2.

6/A

1430

P2.

5/A

1329

C26

10 p

F

PA

L1

TIB

PA

L16L

8

I11

I22

I33

I44

I55

I66

I77

I88

I99

GN

D10

I11

11IO

1212

IO13

13IO

1414

IO15

15IO

1616

IO17

17IO

1818

O19

19V

CC

20

S3

SW

DIP

–3

1 2 3

6 5 4

AD

5A

D6

AD

7

AD

0A

D1

AD

2A

D3

AD

5A

D6

AD

7

AD

4A

D4

AD

0A

D1

AD

2A

D3

AD

4A

D5

AD

6A

D7

A0

A1

A2

A3

A4

A5

A6

A7

A8

A9

A10

A11

A12

A13

A14

A15

A1

A2

A3

A4

A5

A6

A7

A8

A9

A10

A11

A12

A13

A14

A0

A0

A1

A2

A3

A4

A5

A6

A7

A15

A14

A13

AD

0A

D1

AD

2A

D3

AD

4A

D5

AD

6A

D7

/PS

EN

TX

2(ou

t)

RX

2(in

)

A[1

5:8]

A15

T6R

ST

INT

RE

QA

LE

P3.

3

/FR

D

RT

S(o

ut)

DS

R(in

)D

CD

(in)

DC

D(in

)

DS

R(in

)

DT

R(o

ut)

RX

1(in

)

CT

S(in

)

TX

1(ou

t)

TX

1(ou

t)

DT

R(o

ut)

RX

1(in

)R

TS

(out

)RX

(in)

RX

(in)

RX

2(in

)

RI(

in)

RI(

in)

CT

S(in

)

TX

2(ou

t)

TX

(out

)

TX

(out

)

/PS

EN

/RD

/WR

S1

S0

/FW

R

A15

VC

C

VC

C

VC

C

+5

VV

CC

VC

C

VC

C

VC

C

VC

C

–12

V

VC

C+

12 V

–12

V+

12 V

VC

CV

CC

SD

AS

CL

/SY

SR

ST

/TC

E

A[0

:1]

AD

[7:0

]

/TR

D

/RA

MW

R

T6R

ST

INT

RE

Q

(soc

kete

d)

(soc

kete

d)

Pol

ariz

ed c

ap–s

trip

e m

arke

d

To T

VP

5020

RP

AC

K 1

0 K

Ω Bou

rns

SO

IC

/RA

MR

D/F

WR

/FR

D

Nor

mal

(’H

’)

Load

(’L

’)

(soc

kete

d)

64 K

Byt

e F

lash

Mem

ory

32 K

Byt

e R

AM

A8A9A10A11A12

18

19202122232425262728

P3.6/WRP3.7/RDXTAL2XTAL1VSSNCP2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12

P1.4P1.3P1.2P1.1P1.0

NCVDD

P0.0/AD0P0.0/AD1P0.0/AD2P0.0/AD3

6543214443424140

AD0AD1AD2AD3

2.2

R1R2R3R4

RBUSR7R6R5

Page 8: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Hardware Platform

4 SLAA051

2.2 Schematic Diagram – Microcontroller Interface

Figure 2 shows the schematic diagram of the microcontroller and surroundingcircuitry. Refer to this diagram to understand some of the hardware-specificaspects of the program. The P80C652 has four 8-bit I/O ports. Since the deviceis configured to use external memory, the I/O port P0 is used as the multiplexedlower address and data (AD[7–0]), and the I/O port P2 is used to output the upperaddress bits A[15–8]. I/O ports P1 and P3 have some dedicated functions and areotherwise user-defined, as described in Table 1.

The names in the signal name column are shown exactly as they would appearin the source code. Each is a macro representing a special-function register ora special-function I/O bit as defined for the P80C652. The user-defined I/O bitsS0, S1, FLASHJMP, LED1, and LED2 are not used by this program. SW2 andSW3 are used to read the corresponding DIP-switches to select the video modeas shown in Table 2. DIP-switch SW1 is not used. T6RESET provides a softwaremeans to reset the TVP6000 video encoder. INTREQ is used to read the interruptrequest signal from the TVP5020.

Notice that the I2C clock (SCL) and I2C data (SDA) signals must each be pulledup to VCC with a 2.2 kΩ resistor.

Table 1. Microcontroller I/O Port Utilization

PIN NAME SIGNAL NAME DIRECTION FUNCTION DEFINITION

P1.0 S0 Output Flash memory state lsb User–defined

P1.1 SW1 Input DIP switch 1 User–defined

P1.2 SW2 Input DIP switch 2 User–defined

P1.3 SW3 Input DIP switch 3 User–defined

P1.4 S1 Output Flash memory state msb User–defined

P1.5 T6RESET Output TVP6000 reset User–defined

P1.6 SCL Output I2C clock Dedicated I/O

P1.7 SDA I/O I2C data Dedicated I/O

P3.0 RXD Input RS–232 receive data Dedicated I/O

P3.1 TXD Output RS–232 transmit data Dedicated I/O

P3.2 INTREQ Input TVP5020 interrupt request User–defined

P3.3 FLASHJMP Input Flash memory jumper User–defined

P3.4 LED1 Output LED D1 User–defined

P3.5 LED2 Output LED D2 User–defined

P3.6 WR Output External memory write strobe Dedicated I/O

P3.7 RD Output External memory read strobe Dedicated I/O

Table 2. DIP-Switch Settings for TVP56000EVM

VIDEO STANDARD SAMPLING RATEINDIVIDUAL SWITCHES

VIDEO STANDARD SAMPLING RATES3–3 S3–2 S3–1

NTSC CCIR601 ON ON X

NTSC Square pixel OFF ON X

PAL CCIR601 ON OFF X

PAL Square pixel OFF OFF X

Page 9: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Hardware Platform

5 TVP5020 NTSC/PAL Video Decoder

2.2.1 Memory Mapped VMI Interface

The TVP56000EVM uses a memory-mapped I/O scheme to control theTVP5020’s VMI host interface. The 64 kB external data memory space is split inhalf. The lower 32 kB are the RAM chip (U9). The RAM chip enable is active onlywhen the upper address bit (A15) is 0. See the logic equations for PAL1 in Section2.3. The S1 and S0 signals are state indicators for the flash memory reprogramprocess. At all other times S1 = 1 and S0 = 1. The TVP5020 chip enable (TCE)is then active when A15 is 1. This corresponds to addresses 8000h – FFFFh, butonly addresses 8000h – 8003h are actually used for VMI. The TVP5020read-enable (TRD) goes active when the read strobe (RD) from themicrocontroller goes active. The TVP5020 write-enable (RWR) has the sameequation as the RAM write-enable and goes active when the write strobe (WR)from the microcontroller goes active. The WR and RD signals are activated whenthe microcontroller accesses the external data memory (‘xdata’) space.

The EVM supports VMI timing mode B, for which:

• VC0 is the RDY output and is not connected. Jumper JP12 must be removed.

• VC1 is the WR input and must be jumpered to RAMWR by connecting jumperJP6 across pins 2 and 3.

• VC2 is the RD input and is connected directly to TRD from PAL1.

• VC3 is the CE input and must be jumpered to TCE by connecting jumper JP5across pins 1 and 2.

On the software side, an array of four bytes named g_pVMI is declared in xdataspace. This must be done in a separate source file as shown in the listing forVMI_PORT.C in Section 2.4. In the make file shown in Section 2.5, all variablesdeclared in the file VMI_PORT.C are specified to be in xdata space starting ataddress 8000h. The map file (page 9) shows that the linker has placed theg_pVMI array in xdata space from 8000h to 8003h as required.

Page 10: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Hardware Platform

6 SLAA051

2.3 Source File for PAL1

;PALASM Design Description

;–––––––––––––––––––––––––––––––––––––––––––––– Declaration Segment –––––––––

TITLE FLASH/RAM CONTROL LOGIC

PATTERN A

REVISION 1.02 ; FUSE CHECKSUM = 3EC4

AUTHOR MIKE TADYSHAK

COMPANY TEXAS INSTRUMENTS, INC.

DATE 8/18/98

CHIP PAL1 PAL16L8

;–––––––––––––––––––––––––––––––––––––––––––––– PIN Declarations ––––––––––––

PIN 1 PSEN_ COMBINATORIAL ;

PIN 2 RD_ COMBINATORIAL ;

PIN 3 WR_ COMBINATORIAL ;

PIN 4 S1 COMBINATORIAL ;

PIN 5 S0 COMBINATORIAL ;

PIN 6 A15 COMBINATORIAL ;

PIN 10 GND ;

PIN 13 FRD_ COMBINATORIAL ;

PIN 14 FWR_ COMBINATORIAL ;

PIN 15 RRD_ COMBINATORIAL ;

PIN 16 RWR_ COMBINATORIAL ;

PIN 17 TCE_ COMBINATORIAL ;

PIN 18 TRD_ COMBINATORIAL ;

PIN 20 VCC ;

;–––––––––––––––––––––––––––––––––––––––––––––– Boolean Equation Segment –––––

EQUATIONS

; ENABLE ALL OUTPUTS

FRD_.TRST = VCC;

FWR_.TRST = VCC;

RRD_.TRST = VCC;

RWR_.TRST = VCC;

TCE_.TRST = VCC;

TRD_.TRST = VCC;

; STATE DEFINITIONS (S1, S0)

;

; 1, 1 = EXECUTE FROM FLASH, READ RAM , WRITE RAM (NORMAL)

; 1, 0 = EXECUTE FROM RAM , READ RAM , WRITE RAM (LOADER)

; 0, 1 = EXECUTE FROM RAM , READ RAM , WRITE FLASH (PROGRAM)

; 0, 0 = EXECUTE FROM RAM , READ FLASH (POLL)

Page 11: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Hardware Platform

7 TVP5020 NTSC/PAL Video Decoder

2.3 Source File for PAL1 (continued)

; FLASH read-enable

; Normal state: Flash is read by PSEN_ (code space)

; Poll state: Flash is read by RD_ (XDATA space) when polling

; for completion of the internal programming cycle

/FRD_ = S1 * S0 * /PSEN_

+ /S1 * /S0 * /RD_;

;FLASH WRITE STROBE

; Flash program state: Write strobe from uC is routed to flash memory

/FWR_ = /S1 * S0 * /WR_;

;RAM read-enable

; Normal, Loader, Program states: Read control from uC is routed to RAM

; Loader, Program, Poll states: Code executes from RAM.

/RRD_ = S1 * /RD_

+ S0 * /RD_

+ /S1 * /PSEN_

+ /S0 * /PSEN_;

;RAM WRITE STROBE

; Normal, Loader states: Write strobe from uC is routed to RAM.

/RWR_ = S1 * /WR_;

;VMI SLAVE CHIP ENABLE

; Normal state: Enabled for addresses in the 8000h to FFFFh range.

/TCE_ = S1 * S0 * A15;

;VMI SLAVE read-enable

; Normal state: Read control from uC is routed to VMI slave

/TRD_ = S1 * S0 * /RD_;

;––––––––––––––––––––––––––––––––––– Simulation Segment ––––––––––––

SIMULATION

;–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

Page 12: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Hardware Platform

8 SLAA051

2.4 Source File: VMI_PORT.C

//

// VMI_Port.C

//

// Declaration for Memory–Mapped TVP5020 VMI Ports

// These are mapped to 8000–8003h by the make file APP_VMI.LIN

//

// The four VMI I/O locations of the TVP5020 are mapped as:

// g_pVMI[ADDRESS] accesses the VMI address register

// g_pVMI[DATA ] accesses the VMI data register

// g_pVMI[FIFO ] accesses the VMI FIFO register

// g_pVMI[STATUS ] accesses the VMI status register

unsigned char xdata g_pVMI[4];

2.5 Make File: APP_VMI.LIN

NOLI RS(128) PL(68) PW(78) &

XDATA( ?XD?VMI_PORT( 8000h ) )

Page 13: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Hardware Platform

9 TVP5020 NTSC/PAL Video Decoder

2.6 Map File: APP_VMI.M51BL51 BANKED LINKER/LOCATER V3.52 01/30/99 14:44:51 PAGE 1

MEMORY MODEL: LARGE

LINK MAP OF MODULE: APP_VMI (MAIN)

TYPE BASE LENGTH RELOCATION SEGMENT NAME

–––––––––––––––––––––––––––––––––––––––––––––––––––––

* * * * * * * D A T A M E M O R Y * * * * * * *

REG 0000H 0008H ABSOLUTE ”REG BANK 0”

0008H 0008H *** GAP ***

REG 0010H 0008H ABSOLUTE ”REG BANK 2”

IDATA 0018H 0001H UNIT ?STACK

* * * * * * * X D A T A M E M O R Y * * * * * * *

XDATA 0000H 0005H UNIT ?XD?MAIN

XDATA 0005H 0002H UNIT ?XD?TIMER

XDATA 0007H 000EH UNIT ?XD?I2C

XDATA 0015H 0004H UNIT ?XD?I2C6000

XDATA 0019H 0002H UNIT ?XD?VMI5020

XDATA 001BH 001DH UNIT _XDATA_GROUP_

0038H 7FC8H *** GAP ***

XDATA 8000H 0004H UNIT ?XD?VMI_PORT

LINK/LOCATE RUN COMPLETE. 0 WARNING(S), 0 ERROR(S)

Page 14: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Hardware Platform

10 SLAA051

2.7 Schematic Diagram—TVP5020 NTSC/PAL Video Decoder

The schematic diagram showing the TVP5020 and surrounding circuitry is shownin Figure 3. The VMI host interface includes eight data lines, two address lines,and five control lines.

• The bidirectional multiplexed address/data bus lines of the P80C652 isconnected to the TVP5020 bidirectional data pins D7–D0 and are pulled upto VCC through 10 kΩ resistors.

• The least significant two address lines of the P80C652 (after demultiplexing)are connected to the TVP5020 address pins A1–A0 and are pulled up to VCCthrough 10 kΩ resistors.

• The TVP5020 VC0(RDY) output is left unconnected. Jumper JP12 must beremoved.

• The RAMWR output from PAL1 must be connected to the TVP5020 VC1(WR)input. To make this connection, jumper JP6 across pins 2 and 3.

• The TRD output from PAL1 is connected directly to the TVP5020 VC2(RD)input.

• The TCE output from PAL1 must be connected to the TVP5020 VC3(CE)input. To make this connection, jumper JP5 across pins 1 and 2.

• The TVP5020 INTREQ pin is connected to the P80C652 user-defined I/O pinP3.2, and is read using the macro named INTREQ.

Figure 4 shows the TVP56000EVM board layout. Refer to this figure for thelocation and orientation of jumpers, switches, and connectors. The jumpersettings are summarized in Table 3. The setting of JP4 is irrelevant, since theprogram does not make use of the serial port. Jumper settings for selectionbetween CCIR601 and square pixel sampling rates are shown in Table 4.

Page 15: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Hardw

are Platform11

TV

P5020N

TS

C/P

AL V

ideo Decoder

Figure 3. TVP5020 NTSC/PAL Video Decoder Schematic

C41

10 pF

C4410 pF

C380.01 µF

C2810 µFC29

10 µF

C3347 µF

C46

47 µF

C4510 pF

C47

0.1 µF

C48

0.01 µF

C4310 µF

C4210 µF

C39

0.1 µF

JP6

HEADER 3

123

JP5

HEADER 3

123

U12LT1585CT–3.3

GND

1

IN3

OUT2

U14

LT1585CT–3.3

GND

1

IN3

OUT2

P3A

P3B

121 222 323 424 525 626 727 828 929 1030 1131 1232 1333 1434 1535 1636 1737 1838 1939 2040

P3C

RP5

2NBS08–TJ2–103–ND

1 2 3 4

5678

RP6

2NBS16–TG1–103–ND

R11

R22

R33

R44

R55

R66

R77

R88

R99 R10

10 R1111 R1212 R1313 R1414 R1515 RBUS16

U21

QFP80SOC

P4040

P3939

P3838

P3737

P3636

P3535

P3434

P3333

P3232

P3131

P3030

P2929

P2828

P2727

P2626

P2525

P2424

P2323

P2222

P2121

P6161

P6262

P6363

P6464

P6565

P6666

P6767

P6868

P6969

P7070

P7171

P7272

P7373

P7474

P7575

P7676

P7777

P7878

P7979

P8080

JP10

HEADER 3

123

JP11

HEADER 3

123

JP12

JUMPER

R24 10 kΩR25

C3047 µF

P3D

161

262

363

464

565

666

767

868

969

1070

1171

1272

1373

1474

1575

1676

1777

1878

1979

2080

U13

TVP5020

AVID27

GPCL26

GAN_EN

PCLK40

PREF39

SCLK38

DGND37

XTAL236

XTAL135

DVDD34

FID33

PALI32

GLCO31

HSYN30

VSYN29

PLL_BYP28

PLL_AVDD25

SCAN_CLK024

RSTINB2322

TMODE21

EXT_DATA_861

OEB62

D063

D164

DVDD65

D266

D367

DGND68

D469

D570

D671

D772

A073

A174

DVDD75

VC376

VC277

VC178

VC079

INTREQ80

R26

JP9

HEADER 3

123

C320.01 µF

C370.1 µF

C310.1 µF C35

0.01 µF

C3647 µF

C340.1 µF

INTREQ

SDA

/RAMWRVC1VC3

/TCE

PCLK

GPCL

FID

GLCO

AVID

VSYN

PLL_AVDD

SCLK

RSTINB

PREF

XTAL1XTAL2

PALI

PLL_BYP

HSYN

AVIDVSYN

RSTINB

HSYN

VC2Y0Y1Y2Y3Y4Y5Y6Y7

/TCE

XTAL1XTAL2

SCLKINTREQ

VC3

D7D6D5

A0

D0

A1

D4

D3D2

EXT_DATA8

VC0

D1

VC2VC1

D6

D1D2

A1

D3

A0

D0

D4D5

D7

A1

VC0

AVID

PLL_AVDD

HSYN

DGND

EXT_DATA8

D1

DVDD_3.3

DGND

GLCO

DVDD_3.3

D5

DVDD_3.3

INTREQ

XTAL2

SCLK

D6D7

VC3

DGND

D3

A0

PCLK

PALI

VSYNPLL_BYP

RSTINBDGND

XTAL1

GPCL

DGNDD0

D2

DGND

PREF

VC1

FIDD4

VC2

PALI

FID

VC0

SDA

/RAMWR

DVDD_3.3

DVDD_3.3

EXT_DATA8

DGND

AVCC

VCC

VCC

VCC

VCC

AVCC A 5 V 5 VVCC

VCC

D[7:0]

A[1:0]

AVID

RSTINB

VSYN

HSYNSDA

/TRD

Y[7:0]

/RAMWR/TCE

XTAL1XTAL2

SCLKINTREQ

GLCO

SCL

AFE 5 V

JP5 Sets I2CA to GND For I2c or Chip Enable For VMI to Host Pin VC3

JP6 Selects SDA For I2c or /RAMWR For VMI to Host Pin VC1

Selects TVP5020 Mode: GLCO PALI FID Mode 0 0 1 I2C 1 1 0 VMI MODE B

RPACK 10 kΩ

RPACK 10 kΩ

Solid Tantalum

mark polarization

RPACK 10 kΩ

Install JP12For I2C.Remove JP12For VMI.

20U

V7

60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41

19 18 17 16 15 14 13 12 10 9 8 8 7 6 5 4 3 2 1

UV

6U

V5

DG

ND

UV

4U

V3

DV

DD

UV

2U

V1

UV

0Y

7Y

6Y

5D

GN

D Y4

Y3

DV

DD Y2

Y1

Y0

60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41

UV

7U

V6

UV

5

UV

4U

V3

UV

2U

V1

UV

0Y

7Y

6Y

5

Y4

Y3

Y2

Y1

Y0

BG

0V

BIA

S_C

H1

CH

1_A

GN

DV

I_1B

VI_

1AC

H1_

AV

DD

RE

FM

RE

FP

CH

2_A

VD

DV

I_2A

VI_

2BC

H2_

AG

ND

VB

IAS

_CH

2A

OU

T_P

AO

UT

_NA

FE

_GN

DN

SU

BA

FE

_VD

DD

TO

_AV

DD

DT

O_A

GN

D

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

BG

O3V

BIA

S_C

H1

5VI_

1B6V

I_1A

RE

FM

RE

FP

VI_

2AV

I_2B

VB

IAS

_CH

2A

OU

T_P

AO

UT

_M

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

VI_

1AV

I_1B

VI_

2AV

I_2B

10 kΩ10 kΩ

R1

R2

R3

R4

RB

US

R7

R6

R5

60P

60P

59P

58P

57P

56P

55P

54P

53P

52P

51P

50P

49P

48P

47P

46P

45P

44P

43P

42P

41

59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41

UV

7U

V6

UV

5D

GN

DU

V4

UV

3D

VD

D_3

.3U

V2

UV

1U

V0

Y7

Y6

Y5

DG

ND

Y4

Y3

DV

DD

_3.3

Y2

Y1

Y0

P1

1

P2

P3

P4

P5

P6

P7

P8

P9

P10

P11

P12

P13

P14

P15

P16

P17

P18

P19

P20

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

BG

OV

BIA

S_C

H1

AG

ND

VI_

1BV

I_1A

AV

CC

RE

FM

AV

CC

AV

CC

VI_

2AV

I_2B

AG

ND

VB

IAS

_CH

2A

OU

TP

AO

UT

NA

GN

DA

GN

DA

VC

CA

VC

CA

GN

D

TVP5020

++

+ +

Page 16: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Hardware Platform

12 SLAA051

S3

S2

JP51 2 3

1 2 3

PAL1

Pin 1

4 2

3 1 Pin 1

ONOFF

Pin 1

80C652

CompositeVideo Out

S–Video Out S–Video In

CompositeVideo In #1

5 V AnalogRegulator

–5 V ECLRegulator

DC PowerConnector

D1 DigitalVideo In

RS–232 Port

D1 DigitalVideo Out

Reset ButtonMicrocontroller

JP4

TVP6000TVP5020

Flash Memory

DIPSwitches

LEDs

TVP6000Test Points

TVP5020Test Points

CompositeVideo In #2

JP6

JP11

JP10

JP9

JP2

JP1

JP3JP12

JP7

JP8 1 2 3

3 2 1

H L

1 2 3

3 1

4 2

1 2 3

D1 D2

Pin 1

Pin 1

Y1Y3

Y2

Y4

J4

J5

J2

J3

J1

P1

P2

P5

J75 V 12 V

GND –12V

123

HL

P3

B D

C

A

P4

B

C

D

A

Figure 4. TVP56000EVM Board Layout

Table 3. Jumper Settings for TVP56000EVM Using VMI Bus

JUMPER(s) JP3 JP4 JP7 JP8 JP5 JP6 JP9, JP10, JP11 JP12

Position H 1–3, 2–4 1–2 1–2 1–2 2–3 H, H, L OFF

Description NORMAL STRAIGHTCABLE

TVP6000:CLK RCVR

SCLK VMI mode B

Table 4. Sampling Rate Dependent Jumper Settings

SAMPLING RATE JP1 JP2

CCIR601 2–3 1–2

Square Pixel 1–2 2–3

Page 17: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Overview

13 TVP5020 NTSC/PAL Video Decoder

3 Program OverviewThis program is a complete working example of a C-language program to initializethe TVP5020 NTSC/PAL video decoder using the VMI bus interface. Theprogram was compiled and linked using uVision/51 for Windows, a softwarepackage for compiling code for 80C51-type microcontrollers from Keil Software,Inc. Information about Keil Software can be found on the Internet atwww.keil.com. See the Help-About dialog box for this software package(Figure 5). An in-circuit emulator for debugging P80C652 code is the USP-51from Signum Systems. Information about Signum Systems can be found on theInternet at www.signum.com. See the Help-About dialog box for the USP-51emulator software (Figure 6).

The linker output is in standard Intel Intellec 8/MDS format. This format is widelysupported by PROM programmers. The program can then be installed on theTVP56000EVM by programming the flash memory device (Atmel 29C512) usinga PROM programmer. The program contains TVP5020 microcode for four videomodes to enable testing of NTSC and PAL video standards using CCIR601 andsquare pixel sampling rates. The video mode is selected by setting the DIPswitches as was shown in Table 2.

Figure 5. Help-About Dialog Box from uVision/51 for Windows

Page 18: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Overview

14 SLAA051

Figure 6. Help-About Dialog Box Signum Systems In-Circuit Emulator

3.1 Microcontroller-Specific Macros

Most of the source code is in standard C-language. The main exception is the useof macros to access the special-function registers or special-function I/O bits asdefined for the P80C652. The complete set of macros defined for the P80C652is contained in the file REG652.H, which is shown in section 3.2. As Table 1shows, there are several user-definable I/O pins assigned for special use by theEVM. These are named in the P1 and P3 I/O ports sections of the header file. Ofthese user-definable I/O pins, this program uses only INTREQ, SW2, SW3, andT6RESET. SW2 and SW3 are used to read the corresponding DIP switches, andT6RESET provides a software reset for the TVP6000 video encoder.

Many of the P80C652-specific special-function registers are used to control theon-chip general-purpose timer and the I2C Bus interface. These are localized tothe TIMER and I2C source-code modules.

The P80C652 provides 128 bytes of on-chip RAM, and direct support for 64 kBof external data memory (xdata space), and 64 kB of read-only memory (codespace). The keywords xdata and code are sometimes required in variabledeclarations to specify the type of memory storage. For example, the arrays ofunsigned char, which hold the TVP5020 microcode modules, are declared withthe code keyword so that they get stored in flash memory.

Page 19: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Overview

15 TVP5020 NTSC/PAL Video Decoder

3.2 Header File: REG652.H

// REG652.H

// Header file for Philips P80C652 Microcontroller.

/* BYTE Registers */

sfr P0 = 0x80;

sfr P1 = 0x90;

sfr P2 = 0xA0;

sfr P3 = 0xB0;

sfr PSW = 0xD0;

sfr ACC = 0xE0;

sfr B = 0xF0;

sfr SP = 0x81;

sfr DPL = 0x82;

sfr DPH = 0x83;

sfr PCON = 0x87;

sfr TCON = 0x88;

sfr TMOD = 0x89;

sfr TL0 = 0x8A;

sfr TL1 = 0x8B;

sfr TH0 = 0x8C;

sfr TH1 = 0x8D;

sfr IE = 0xA8;

sfr IP = 0xB8;

sfr S0CON = 0x98; /* UART control */

sfr S0BUF = 0x99; /* UART data buffer */

sfr S1CON = 0xD8; /* I2C control register */

sfr S1STA = 0xD9; /* I2C status register */

sfr S1DAT = 0xDA; /* I2C data register */

sfr S1ADR = 0xDB; /* I2C address register */

/* BIT Register */

/* PSW */

sbit CY = 0xD7;

sbit AC = 0xD6;

sbit F0 = 0xD5;

sbit RS1 = 0xD4;

sbit RS0 = 0xD3;

sbit OV = 0xD2;

sbit P = 0xD0;

/* TCON */

sbit TF1 = 0x8F;

sbit TR1 = 0x8E;

sbit TF0 = 0x8D;

sbit TR0 = 0x8C;

sbit IE1 = 0x8B;

sbit IT1 = 0x8A;

sbit IE0 = 0x89;

sbit IT0 = 0x88;

Page 20: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Overview

16 SLAA051

3.2 Header File: REG652.H (continued)

/* IE */sbit EA = 0xAF;sbit ES1 = 0xAD; /* I2C interrupt enable */sbit ES0 = 0xAC; /* UART interrupt enable */sbit ET1 = 0xAB;sbit EX1 = 0xAA;sbit ET0 = 0xA9;sbit EX0 = 0xA8;

/* IP */sbit PS1 = 0xBD;sbit PS0 = 0xBC;sbit PT1 = 0xBB;sbit PX1 = 0xBA;sbit PT0 = 0xB9;sbit PX0 = 0xB8;

// P1sbit SDA = 0x97;sbit SCL = 0x96;sbit T6RESET = 0x95;sbit S1 = 0x94;sbit SW3 = 0x93;sbit SW2 = 0x92;sbit SW1 = 0x91;sbit S0 = 0x90;

// P3sbit RD = 0xB7;sbit WR = 0xB6;sbit LED2 = 0xB5;sbit LED1 = 0xB4;sbit FLASHJMP = 0xB3;sbit INTREQ = 0xB2;sbit TXD = 0xB1;sbit RXD = 0xB0;

/* S0CON */sbit SM1 = 0x9E;sbit SM2 = 0x9D;sbit REN = 0x9C;sbit TB8 = 0x9B;sbit RB8 = 0x9A;sbit TI = 0x99;sbit RI = 0x98;

/* S1CON */sbit CR0 = 0xD8;sbit CR1 = 0xD9;sbit AA = 0xDA;sbit SI = 0xDB;sbit STO = 0xDC;sbit STA = 0xDD;sbit ENS1 = 0xDE;sbit CR2 = 0xDF;

Page 21: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Overview

17 TVP5020 NTSC/PAL Video Decoder

3.3 Source-Code Modules

Table 5 summarizes the relationships between the various source-code modules.Each source-code module is contained in one .C source file and has anassociated .H header file. The Timer and I2C modules are described asmicrocontroller-specific. In order to port these functions to another hardwareenvironment, equivalent functions, written for the specific processor, would needto be supplied or created. The Main and I2C6000 modules could be used virtuallyunchanged. In the new environment, the TVP6000 software reset (T6RESET),as well as the reading of the INTREQ and DIP-switch lines SW2 and SW3, wouldhave to be implemented.

Table 5. Source Code Module Relationships

SOURCE-CODEMODULE DESCRIPTION

MICROCONTROLLER-SPECIFIC?

TVP56000EVM-SPECIFIC?

CALLS FUNCTIONS INTHESE MODULES

Main Main program NoYes

(uses T6RESET)I2C5020, I2C6000, Timer

TimerGeneral-purpose timer routines and

ISRYes No None

I2C I2C bus routines and ISR Yes No Timer

VMI5020 TVP5020 VMI routines NoYes

(uses INTREQ, SW2and SW3)

None

I2C6000 TVP6000–specific I2C routines No No I2C, Timer

Page 22: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Description

18 SLAA051

4 Program Description

4.1 Source-Code Module: Main

4.1.1 Inclusion of TVP5020 Microcode Files (Lines 11–14)

Header files containing the TVP5020 microcode are included. These providesupport for NTSC and PAL video standards with CCIR601 or square pixelsampling. Each header file declares an array of type unsigned char. The first byteof each array is the subaddress for writing to the TVP5020 program memory(0x7E). The TVP5020 microcode is supplied in a five-character Hex-ASCII format(Figure 7). Conversion to a standard C-language header file can be done with autility called HexConv. The output of HexConv is shown in Figure 8. If necessary,the #define constant for the code size (which includes the subaddress byte –0x7E) as well as the array name may be given a unique name. If the targetprocessor is an 80C51 derivative, the keyword code must be inserted. Also,adding a comment identifying the microcode type and version is very helpful. Theresulting microcode file is shown in Figure 9.

4.1.2 Function: Main()

4.1.2.1 Declaration of TVP5020 Register Patch Data (Lines 16–24)

After the microcode is downloaded and the TVP5020 CPU is restarted, theregisters are initialized with their default values (as defined by the TVP5020 datamanual) by the internal CPU. Some registers must be patched with a differentvalue for the TVP5020 to function properly on the TVP56000EVM. The arrayg_pTVP5020Patch[ ] contains the address and data for three registers that mustbe modified. Table 6 describes these register changes.

Table 6. TVP5020 Register Patches

ADDRESS DEFAULTDATA

PATCHEDDATA COMMENT

03h 00h 19h Enable HSYN, VSYN, AVID, SCLK, PCLK and YUV outputs

07h 00h 10h Bypass luminance processing during vertical blank

0Dh 00h 0Fh Select 8-bit ITU-R BT.656 interface

80000

00000

303FC

.

.

.

C3F80

Figure 7. TVP5020 Microcode in Hex-ASCII Format

Page 23: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Description

19 TVP5020 NTSC/PAL Video Decoder

#define TVP5020_CODE_SIZE 0x27b8

unsigned char TVP5020_CODE[] =

0x7E,

0x08,

0x00,

0x00,

0x00,

0x00,

0x03,

0x03,

0xFC,

.

.

.

0x0C,

0x3F,

0x80

;

Figure 8. TVP5020 Microcode after Conversion to Standard C Format

#define TVP5020_N601_CODE_SIZE 0x27b8

// TVP5020 NTSC CCIR601 Version: 63

unsigned char code T520_N601[] =

0x7E,

0x08,

0x00,

0x00,

0x00,

0x00,

0x00,

0x03,

0x03,

0xFC,

.

.

.

0x0C,

0x3F,

0x80

;

Figure 9. TVP5020 Microcode after Modification

Page 24: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Description

20 SLAA051

4.1.2.2 Initialization (Lines 37–45)

The function call timer0_initialize() initializes the P80C652 on-chipgeneral-purpose timer to generate a timer-tick interrupt every 2 ms. Next,timer0_wait() is called to produce a 100 ms delay to insure stabilization afterreset. The call to DecoderReset() configures the TVP5020 interrupt requestoutput pin (INTREQ).

4.1.2.3 Video Mode Selection (Lines 47–72)

The current state of the DIP switches is read. The two lsbs are used to select thevideo mode as shown in Table 2. The global variables g_nROMCodeSize andg_pROMCode are initialized with the size of the selected microcode file (in bytesand including the subaddress byte) and with the starting address of the selectedmicrocode data array.

4.1.2.4 Reset Timer-Tick (Line 75)

The call to ResetTickCount() resets the internal count of timer-tick interrupts(which occur every 2 ms). The timer-tick count can run up to about 128 secondsbefore rolling over. In a program with multiple uses for the general-purpose timer,the timer-tick count should be reset only in the outermost loop.

4.1.2.5 Power-up Initialization (Line 78)

The call to PowerUpInitialization() performs the tasks of downloading theTVP5020 microcode, restarting the TVP5020 internal CPU, patching theTVP5020 registers, and initializing the TVP6000 video encoder. One parameteris passed to PowerUpInitialization() to indicate the selected video mode. Uponreturn from PowerUpInitialization(), the program spins in an endless loop.

4.1.3 Function: Power-up Initialization()

4.1.3.1 Microcode Download (Line 94)

The call to HandleDownload() calls the specific routine which will download themicrocode to the video decoder. The code size and code pointer variables arepassed as parameters. HandleDownload() routines have been written for theI2C, VIP, and VMI interfaces. The source-code module VMI5020.C contains theversion of HandleDownload() for the VMI Bus.

4.1.3.2 Restart Microprocessor (Lines 96–102)

After the microcode download completes, the internal microprocessor isrestarted. This is done by writing a 00h byte (the data can be any value) to therestart subaddress (7Fh). The function WriteTVP5020() is used whenever it isrequired to write to a TVP5020 register. The parameters passed toWriteTVP5020() are a byte count (this is always 2) and a pointer to the storagelocation of the subaddress and data byte. A 10 ms wait is inserted after the restartcommand to enable the internal microprocessor to complete its initializationcode.

4.1.3.3 Patch TVP5020 Registers (Lines 104–105)

The call to PatchTVP5020Registers() implements the register modificationswhich were described in Section 4.1.2.1 and Table 6.

Page 25: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Description

21 TVP5020 NTSC/PAL Video Decoder

4.1.3.4 Reset the TVP6000 Video Encoder (Lines 107–110)

The user-definable I/O pin P1.5 is used as a software-controlled reset for theTVP6000. T6RESET is a macro which allows control of pin P1.5. The TVP6000reset input is held active for 100 ms after the TVP5020 is initialized. This isneeded, since the TVP6000 is not guaranteed to have received a clock from theTVP5020 during power-up reset.

4.1.3.5 Initialize the TVP6000 Video Encoder (Lines 112–113)

The call to LoadTVP6000() initializes the video encoder registers. One parameteris passed to indicate the selected video mode. The register data is located in theheader file DATA6000.H.

4.1.4 Function: Patch TVP5020 Registers()

4.1.4.1 Loading the Registers (Lines 120–123)

A for loop is used to patch the TVP5020 registers using the data in theg_pTVP5020Patch array. This array is a global variable and was initialized inlines 17–24. The constant TVP5020_PATCH_SIZE holds the number of bytes inthe array and must be changed if the number of register writes is changed.

4.2 Header File: Main.H

// Main.H

//

// Header file for main program to initialize the TVP5020 Video Decoder

//

#define FALSE 0

#define TRUE !FALSE

#define TVP5020_RESTART_SUB_ADDR 0x7F

void main (void);

void DecoderReset( void );

unsigned char ReadSwitch( void );

void PowerUpInitialization( int nSwitch );

void HandleDownload( unsigned nCount, unsigned char* pInBuf );

unsigned WriteTVP5020(int nLength, unsigned char *pBuf );

void PatchTVP5020Registers(void);

Page 26: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Description

22 SLAA051

4.3 Source File: Main.C

DOS C51 COMPILER V5.10, COMPILATION OF MODULE MAIN

OBJECT MODULE PLACED IN MAIN.OBJ

COMPILER INVOKED BY: C:\C51\BIN\C51.EXE MAIN.C DB OE OR LARGE

stmt level source

1 // Main.C

2 //

3 // Main program to initialize the TVP5020 Video Decoder

4 //

5 #include ”Main.h”

6 #include ”Timer.h”

7 #include ”Reg652.h”

8 #include ”I2C6000.H”

9

10 //TVP5020 microcode files

11 #include ”5020NSQP.H”

12 #include ”5020N601.H”

13 #include ”5020PSQP.H”

14 #include ”5020P601.H”

15

16 // Registers to modify after TVP5020 CPU startup

17 #define TVP5020_PATCH_SIZE 6

18 unsigned char code g_pTVP5020Patch[] =

19

20 // subaddress, data

21 0x03, 0x19,

22 0x07, 0x10,

23 0x0D, 0x0F

24 ;

25

26 // Size of TVP5020 microcode file (defined in 5020xxxx.H)

27 unsigned g_nROMCodeSize = TVP5020_N601_CODE_SIZE;

28

29 // Pointer to the TVP5020 microcode

30 unsigned char* g_pROMCode = T520_N601;

31

Page 27: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Description

23 TVP5020 NTSC/PAL Video Decoder

4.3 Source File: Main.C (Continued)

32 void main(void)33 34 1 // DIP Switch value35 1 unsigned char nSwitch = 0;36 137 1 // Initialize general purpose timer38 1 timer0_initialize();39 140 1 /* Wait 100ms – for stabilization after reset */41 1 timer0_wait(ONE_HUNDRED_MS);42 143 1 // For VMI Bus, this configures the TVP5020 interrupt output

//(INTREQ)44 1 // For VIP Bus, this sends a reset code to the VIP emulation FPGA45 1 DecoderReset();46 147 1 // Two LSBs of switch select the video mode48 1 nSwitch = ReadSwitch() & 3;49 150 1 // Point to the microcode selected by the DIP switch51 1 switch( nSwitch )52 1 53 2 case 0:54 2 g_pROMCode = T520_N601;55 2 g_nROMCodeSize = TVP5020_N601_CODE_SIZE;56 2 break;57 258 2 case 1:59 2 g_pROMCode = T520_NSQP;60 2 g_nROMCodeSize = TVP5020_NSQP_CODE_SIZE;61 2 break;62 263 2 case 2:64 2 g_pROMCode = T520_P601;65 2 g_nROMCodeSize = TVP5020_P601_CODE_SIZE;66 2 break;67 268 2 case 3:69 2 g_pROMCode = T520_PSQP;70 2 g_nROMCodeSize = TVP5020_PSQP_CODE_SIZE;71 2 break;72 2 73 174 1 // Reset timer-tick to avoid rollover75 1 ResetTickCount();76 177 1 // Initialize the video mode78 1 PowerUpInitialization( nSwitch );79 180 1 // After video is initialized, do nothing81 1 while(1)82 1 83 2 ;84 2 85 186 1 return;87 1

Page 28: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Description

24 SLAA051

4.3 Source File: Main.C (Continued)

88

89 void PowerUpInitialization( int nSwitch )

90

91 1 unsigned char buf[2];

92 1

93 1 /* Download video decoder microcode */

94 1 HandleDownload( g_nROMCodeSize, g_pROMCode );

95 1

96 1 //Restart microprocessor

97 1 buf[0] = TVP5020_RESTART_SUB_ADDR;

98 1 buf[1] = 0;

99 1 WriteTVP5020( 2, buf );

100 1

101 1 // Wait 10ms for TVP5020 CPU to start–up

102 1 timer0_wait(TEN_MS);

103 1

104 1 // Modify registers from the default state as required

105 1 PatchTVP5020Registers();

106 1

107 1 // Reset the TVP6000

108 1 T6RESET = 0;

109 1 timer0_wait(ONE_HUNDRED_MS);

110 1 T6RESET = 1;

111 1

112 1 // Initialize TVP6000

113 1 LoadTVP6000( nSwitch );

114 1

115

116 void PatchTVP5020Registers (void)

117

118 1 int i = 0;

119 1

120 1 for( i=0; i<TVP5020_PATCH_SIZE; i+=2 )

121 1

122 2 WriteTVP5020( 2, g_pTVP5020Patch+i );

123 2

124 1

125 1 return;

126 1

127

C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

Page 29: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Description

25 TVP5020 NTSC/PAL Video Decoder

4.4 Source-Code Module: I2C

This source-code module is included only for communication with the TVP6000NTSC/PAL video encoder.

4.4.1 Function: initia_i2c() (Lines 28–41)

This function initializes the I2C bus signals (SCL and SDA) to a high level. Theinternal P80C652 I2C interrupt is enabled and given low (normal) priority. TheP80C652 on-chip I2C controller is initialized to be the I2C bus master with a baudrate of 92.16 kHz. This frequency is the P80C652 oscillator frequency(11.0592 MHz) divided by 120.

4.4.2 Function: start_i2c()

This function is called to perform a transaction on the I2C bus.

4.4.2.1 Initialize Variables for the ISR (Lines 54–64)

The current timer-tick count is saved to be used later to determine if a timeoutcondition has occurred. The macro EA is used to globally enable or disable allinterrupts. The global variables used by the I2C interrupt service routine (ISR)are:• b_counter —Byte counter. Initialized to 00h, counts up to the terminal count

value.• num_b —Number of bytes. Holds the terminal count value.• slave_rw —Slave device ID and read/write bit.• i2cbuf —Pointer to caller’s data buffer.

4.4.2.2 Start the I2C Transaction (Lines 63–64)

The macro STA is used to set the start bit in the I2C control register. Then, theglobal interrupt control bit EA enables the hardware interrupts.

4.4.2.3 Wait for the I2C Bus Transaction to Complete (Lines 66–73)

The program now remains in a loop waiting for either all bytes to be transferredor the occurrence of an error condition. Meanwhile, I2C bus interrupts areoccurring and the I2C ISR is controlling the data transfer. The timer-tick count ischecked for a timeout condition by comparing the elapsed time withg_nI2Ctimeout. The value in g_nI2Ctimeout is in units of timer-ticks. Thetimer-tick is programmed to occur once every 2 ms.

4.4.3 Function: i2c_isr() (Lines 77–266)

This is the interrupt service routine (ISR) for the I2C bus interface. The I2Ccontroller is embedded in the P80C652. A simple register interface providesaccess to address, data, control and status registers. Each time an I2C interruptoccurs, the status register (S1STA) is read to obtain the current state code fromthe I2C controller. The state code is used to branch to the appropriate codesegment to handle the interrupt. The I2C global variables are updated and datais transferred to/from the user’s data buffer. The states for the master transmitterand master receiver are described in Tables 7 and 8. The last step of interrupthandling is writing one of the following four codes back to the I2C control register(S1CON) to request a specific action:

Page 30: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Description

26 SLAA051

• I2C_RLS_STA —Release bus and generate a start condition

• I2C_RLS_ACK —Release bus and acknowledge the data transfer

• I2C_RLS_NACK —Release bus and do not acknowledge the data transfer

• I2C_STOP —Generate a stop condition

Table 7. I2C Controller: Master Transmitter States

I2CCONTROLLER

STATEDEFINITION NEXT ACTION TAKEN BY I2C ISR

MASTER TRANSMITTER STATES

08h Start condition has been transmitted Send slave address + r/w bit

10h Repeat start condition has been transmitted Send slave address + r/w bit

18h Slave address has been sent and ACK was received Transmit first data byte

20h Slave address has been sent and NOT ACK was received Transmit first data byte. Flag I2C NOT ACK error.

28h Data has been transmitted and ACK has been received Transmit next data byte. If all data has been transmitted, issuea stop condition.

30h Data has been transmitted and NOT ACK has been received Transmit next data byte. If all data has been transmitted, stopthe bus. Flag I2C NOT ACK error.

38h Bus arbitration lost Flag I2C bus arbitration lost error. Issue another startcondition.

Table 8. Controller: Master Receiver States

I2CCONTROLLER

STATEDEFINITION NEXT ACTION TAKEN BY I2C ISR

MASTER RECEIVER STATES

40h Slave address has been sent and ACK was received If transaction involves only one data byte, signal the controllerto NOT ACK the next data byte received. Otherwise, signalthe controller to acknowledge the next data byte received.

48h Slave address has been sent and NOT ACK was received If transaction involves only one data byte, signal the controllerto NOT ACK the next data byte received. Otherwise, signalthe controller to acknowledge the next data byte received.Flag I2C NOT ACK error.

50h Data has been received and ACK has been transmitted If this is previous to the NEXT-TO-LAST data byte, signal thecontroller to acknowledge the next data byte received. If this isthe next-to-last data byte, signal the controller to NOT ACKthe next data byte received.

58h Data has been received and NOT ACK has been transmitted If this is previous to the LAST data byte, signal the controller toacknowledge the next data byte received and flag a I2C NOTACK error. If this is the last data byte, then issue a stopcondition.

F8h No relevant state information is available No action required

00h I2C bus error due to detection of an illegal start or stopcondition, or I2C controller detected entry into an illegal state.

Flag an I2C bus error

Other I2C controller reported a state which is not supported by theinterrupt service routine

Flag an I2C unsupported state error

Page 31: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Description

27 TVP5020 NTSC/PAL Video Decoder

4.5 Header File: 12C.H

// I2C.H

//

// Header file for I2C bus routines

//

#define FALSE 0

#define TRUE !FALSE

#define ERR_I2C_NOTACK 0x01

#define ERR_I2C_ARBILOST 0x02

#define ERR_I2C_GERROR 0x04

#define ERR_I2C_TIMEOUT 0x08

#define ERR_I2C_BUSERROR 0x10

#define ERR_I2C_DEVID 0x20

void initia_i2c(void);

unsigned start_i2c(unsigned char i2c_addrs, int buf_length,

unsigned char bufaddrs);

Page 32: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Description

28 SLAA051

4.6 Source File: I2C.C

DOS C51 COMPILER V5.10, COMPILATION OF MODULE I 2C

OBJECT MODULE PLACED IN I2C.OBJ

COMPILER INVOKED BY: C:\C51\BIN\C51.EXE I2C.C DB OE OR LARGE

stmt level source

1 //

2 // I 2C.C

3 //

4 // Routines for I 2C Bus

5 //

6 #include ”I 2C.h”

7 #include ”Timer.h”

8 #include ”reg652.h”

9

10 #define FALSE 0

11 #define TRUE !FALSE

12 #define I2C_STOP 0xD5 /* generated a STOP condition on I 2C, and

100 kBps */

13 #define I 2C_RLS_ACK 0xC5 /* Release bus and generate a ACK */

14 #define I 2C_RLS_NACK 0xC1 /* Release bus and generate a NOT ACK */

15 #define I 2C_RLS_STA 0xE5 /* Release bus and generate START */

16

17 // I 2C Timeout

18 unsigned g_nI2CTimeout = TEN_SECONDS;

19

20

21 unsigned xdata error_i2c = 0; /* I2C Errors */

22 unsigned xdata b_counter = 0; /* length of i2c send buffer */

23 unsigned xdata num_b = 0; /* number of bytes that will be sent/read */

24 unsigned xdata num_b_minus_1 = 0; /* number of bytes that will be

25 sent/read – 1 */

25 unsigned char xdata slave_rw = 0; /* slave address plus read/write direction */

26 static unsigned char *i2cbuf = (unsigned char*)0; /* pointer to I2C

27 send/receiving buffer */

27

28 /*

29 –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

30 This function will initialize the I2C interface

31 –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

32 */

33

34 void initia_i2c(void)

35

36 1 SDA = 1; /* set data pin as high level */

37 1 SCL = 1; /* set clock pin as high level */

38 1 ES1 = 1; /* enable I2C interrupt */

39 1 PS1 = 0; /* set I2C interrupt PRIORITY level as LOW */

40 1 S1CON = I2C_RLS_ACK; /* set 80C652 as a master only, bit rate = 92.16k */

41 1

Page 33: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Description

29 TVP5020 NTSC/PAL Video Decoder

4.6 Source File: I2C.C (continued)

42

43 /*

44 –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

45 This function transfers one block of data in or out

46 –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

47 */

48

49 unsigned start_i2c( unsigned char i2c_addrs, int buf_length,

unsigned char *bufaddrs )

50

51 1 unsigned xdata start_point;

52 1 unsigned test = 0u;

53 1

54 1 // Set a reference time

55 1 start_point = current_tick ();

56 1

57 1 EA = 0; // Disable i2c interrupt

58 1 b_counter = 0;

59 1 num_b = (unsigned)buf_length;

60 1 num_b_minus_1 = num_b – 1;

61 1 slave_rw = i2c_addrs;

62 1 i2cbuf = bufaddrs; // initialized the buffer point

63 1 STA = 1; // set STA bit of S1CON, start I2C

64 1 EA = 1;

65 1

66 /* wait until all data in buffer have been sent out */

67 1 while ( (b_counter < num_b) && ( error_i2c == 0u) )

68 1

69 2 if (timer0_elapsed_count(start_point) > g_nI2Ctimeout)

70 2

71 3 error_i2c |= ERR_I2C_TIMEOUT;

72 3

73 2

74 1 return( b_counter );

75 1

76

77 /*

78 –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

79 I2C interrupt service routine

80 interrupt number=5, address=0x002Bh, using register bank2

81 –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

82 */

83

84 static void i2c_isr (void) interrupt 5 using 2

85

86 1

87 1 unsigned char i2cst;

88 1 unsigned char nDummy = 0;

89 1 i2cst = S1STA;

90 1

Page 34: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Description

30 SLAA051

4.6 Source File: I2C.C (continued)

91 1 switch (i2cst) 92 1 93 2 /*––––––––––––––––––––––––––––––––––––––––––––––––*/ 94 2 /* following section will be MASTER transmit mode */ 95 2 /*––––––––––––––––––––––––––––––––––––––––––––––––*/ 96 2 97 2 /* a START condition has been sent */ 98 2 /* will send out slave address + r/w bit */ 99 2 case 0x08: 100 2 S1DAT = slave_rw; 101 2 S1CON = I2C_RLS_ACK; 102 2 break; 103 2 104 2 /* a repeat START has been transmitted */ 105 2 /* will load SLA+R/W, and return ACK */ 106 2 case 0x10: 107 2 S1DAT = slave_rw; 108 2 S1CON = I2C_RLS_ACK; 109 2 break; 110 2 111 2 /* slave address has been send and ACK received */ 112 2 /* will send out 1st byte of data */ 113 2 case 0x18: 114 2 S1DAT = *i2cbuf; /* load a byte to data register */ 115 2 S1CON = I2C_RLS_ACK; 116 2 break; 117 2 118 2 /* NOT ACK received, will send out 1st byte of data anyway */ 119 2 case 0x20: 120 2 S1DAT = *i2cbuf; /* load a byte to data register */ 121 2 S1CON = I2C_RLS_ACK; 122 2 error_i2c |= ERR_I2C_NOTACK; 123 2 break; 124 2 125 2 /* continue sending data */ 126 2 /* 1st byte of data has been sent and ACK received */ 127 2 /* If all the data were sent, then transmit a STOP */ 128 2 /* else continue to transmit next byte */ 129 2 case 0x28: 130 2 b_counter++; 131 2 // Last state of b_counter will be num_b 132 2 if ( b_counter < num_b ) 133 2 134 3 S1DAT = *(i2cbuf+b_counter); /* send 1 byte data */ 135 3 136 3 // 137 3 S1CON = I2C_RLS_ACK; 138 3 139 2 else 140 2 141 3 S1CON = I2C_STOP; /* all data were sent,stop bus */ 142 3 143 2 break;

Page 35: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Description

31 TVP5020 NTSC/PAL Video Decoder

4.6 Source File: I2C.C (continued)

144 2

145 2 /* 1 st byte of data has been sent but NOT ACK rcvd */

146 2 case 0x30:

147 2 b_counter++;

148 2 // Last state of b_counter will be num_b

149 2 if ( b_counter < num_b )

150 2

151 3 S1DAT = *(i2cbuf+b_counter); /* send 1 byte data */

152 3 S1CON = I2C_RLS_ACK;

153 3

154 2 else

155 2

156 3 S1CON = I2C_STOP; /* all data were sent, stop bus */

157 3

158 2

159 2 error_i2c |= ERR_I2C_NOTACK;

160 2 break;

161 2

162 2 /* Bus arbitration lost, release bus and try to restart */

163 2 case 0x38:

164 2 S1CON = I2C_RLS_STA;

165 2 error_i2c |= ERR_I2C_ARBILOST;

166 2 break;

167 2

168 2 /*–––––––––––––––––––––––––––––––––––––––––––––––*/

169 2 /* following section will be MASTER receive mode */

170 2 /*–––––––––––––––––––––––––––––––––––––––––––––––*/

171 2

172 2 /*SLA+R has been sent, ACK received */

173 2 case 0x40:

174 2 if( num_b == 1 )

175 2

176 3 // Only one byte will be received, don’t acknowledge

177 3 // This will signal the slave transmitter to stop

178 3 S1CON = I2C_RLS_NACK;

179 3

180 2 else

181 2

182 3 // More than one byte will be received, acknowledge

// the first one

183 3 S1CON = I2C_RLS_ACK;

184 3

185 2

186 2 break;

187 2

188 2

Page 36: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Description

32 SLAA051

4.6 Source File: I2C.C (Continued) 189 2 /* NOT ACK received on SLA+R, will ignore it */

190 2 case 0x48:

191 2 if( num_b == 1 )

192 2

193 3 // Only one byte will be received, don’t acknowledge

194 3 // This will signal the slave transmitter to stop

195 3 S1CON = I2C_RLS_NACK;

196 3

197 2 else

198 2

199 3 // More than one byte will be received, acknowledge

// the first one

200 3 S1CON = I2C_RLS_ACK;

201 3

202 2 error_i2c |= ERR_I2C_NOTACK;

203 2 break;

204 2

205 2

206 2 /* a byte has been received, and ACK was returned */

207 2 case 0x50:

208 2 /* read one byte from S1DAT */

209 2 *(i2cbuf + b_counter) = S1DAT;

210 2 b_counter++;

211 2

212 2 // if this is prior to the next–to–last byte

213 2 if ( b_counter < num_b_minus_1 )

214 2

215 3 // Acknowledge the next byte received

216 3 S1CON = I2C_RLS_ACK;

217 3

218 2 // if this is the next–to–last byte

219 2 else

220 2

221 3 // Do not acknowledge the next byte received

// (the last byte)

222 3 // This will signal the slave transmitter to stop

223 3 S1CON = I2C_RLS_NACK;

224 3

225 2 break;

226 2

227 2

Page 37: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Description

33 TVP5020 NTSC/PAL Video Decoder

4.6 Source File: I2C.C (continued)

228 2 // a byte received and NOT ACK was returned

229 2 // This should be the last byte received

230 2 case 0x58:

231 2 /* read one byte from S1DAT */

232 2 *(i2cbuf + b_counter) = S1DAT;

233 2 b_counter++;

234 2

235 2 /* if this is not the last byte – error condition */

236 2 if ( b_counter < num_b )

237 2

238 3 S1CON = I2C_RLS_ACK;

239 3 error_i2c |= ERR_I2C_NOTACK;

240 3

241 2 /* if this is the last byte, then STOP bus */

242 2 else

243 2

244 3 S1CON = I2C_STOP;

245 3

246 2 break;

247 2

248 2 // No Relevant state information is available

// no action required

249 2 case 0xF8:

250 2 nDummy = 0;

251 2 break;

252 2

253 2 // Bus error due to illegal start or stop condition

// or SIO1 has entered an illegal state

255 2 case 0x00:

256 2 S1CON = I2C_RLS_ACK;

257 2 error_i2c |= ERR_I2C_BUSERROR;

258 2 break;

259 2

260 2 /* all other cases will be error in this system */

261 2 default:

262 2 S1CON = I2C_RLS_ACK;

263 2 error_i2c |= ERR_I2C_GERROR;

264 2 break;

265 2

266 1

C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

Page 38: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Description

34 SLAA051

4.7 Source-Code Module: Timer

The general-purpose timer is used to insert time delays and to determine whena timeout condition has occurred. The timer is programmed so that a timer ‘tick’interrupt occurs every 2 ms.

4.7.1 Function: timer0_isr() (Lines 26–59)

This is the ISR for the general-purpose timer. The timer is stopped. A constantis loaded into the timer data registers (TL0 and TH0). The timer is restarted. Thetimer increments and generates an interrupt when it reaches its maximum count.Each time the timer-tick interrupt occurs, the global variable ‘timer0_tick’ isincremented by 1. The constant was calculated so that the time from the timerrestart until it reaches its maximum count is 2 ms. The equation for calculatingthe timer reload value (TH0, TL0) from the desired timer-tick period (T) is shownbelow. The calculated timer reload value with the 11.0592 MHz crystal and atimer-tick period of 2 ms is F8CDh.

TH0, TL0 = 10000h – (( fosc / 12) * T)

TH0, TL0 = 10000h – ((11059200 / 12) * 0.002)

TH0, TL0 = F8h, CDh

4.7.2 Function: timer0_initialize() (Lines 61–94)

This function initializes the general-purpose timer. It is called once at programstartup. The timer-tick count is initialized to zero and then the timer is stopped.The timer mode is set for 16-bit counter with no prescaling, and then the timerreload value is written. The timer interrupt is enabled and given low (normal)priority, and then the timer is restarted. The global interrupt control (EA) isenabled. At this point, the timer-tick interrupts start occurring.

4.7.3 Function: ResetTickCount() (Lines 96–112)

The call to ResetTickCount() resets the timer-tick count to zero. The timer-tickcount can run up to about 128 seconds before rolling over. In a program withmultiple uses for the general-purpose timer, the timer-tick count should be resetonly in the outermost loop.

4.7.4 Function: current_tick() (Lines 114–131)

This function returns the current timer-tick count.

4.7.5 Function: timer0_elapsed_count() (Lines 133–150)

This function returns the number of elapsed timer-tick counts. The parameter isthe starting timer-tick count from which to measure the elapsed time.

4.7.6 Function: timer0_wait() (Lines 152–167)

This function generates a time delay. The parameter is the number of timer-tickcounts to delay.

Page 39: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Description

35 TVP5020 NTSC/PAL Video Decoder

4.8 Header File: Timer.H

// Timer.H

//

// Header file for P80C652 microcontroller general purpose timer routines

//

#define TCLK 11059200 /* Clock speed in Hz */

// One TICK is 2ms

#define TEN_MS 5u

#define ONE_HUNDRED_MS 50u

#define ONE_SECOND 500u

#define TEN_SECONDS 5000u

void timer0_initialize (void);

unsigned current_tick (void);

unsigned timer0_elapsed_count (unsigned int start_tick);

void timer0_wait (unsigned int num_tick);

void ResetTickCount( void );

Page 40: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Description

36 SLAA051

4.9 Source File: TIMER.C

DOS C51 COMPILER V5.10, COMPILATION OF MODULE TIMER

OBJECT MODULE PLACED IN TIMER.OBJ

COMPILER INVOKED BY: C:\C51\BIN\C51.EXE TIMER.C DB OE OR LARGE

stmt level source

1 // Timer.C

2 //

3 // P80C652 microcontroller general purpose timer routines

4 //

5 #include ”Timer.h”

6 #include ”reg652.h”

7

8 /*–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

9 Constant Declarations

10 Every 2 ms, TIMER0 OVERFLOW and an interrupt will occur once

11 –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

12 */

13

14 // 2ms tick: 10000h – ((11,059,200 Hz/12) * 0.002) = 0xF8CD

15 #define TIMER0_HI (unsigned char) 0xF8

16 #define TIMER0_LO (unsigned char) 0xCD

17

18 /*

19 –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

20 Local Variable Declarations

21 –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

22 */

23

24 static unsigned xdata timer0_tick;

25

26 /*

28 –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

29 static void timer0_isr (void);

30

30 This function is an interrupt service routine for TIMER 0. It should

31 never be called by a C or assembly function. It will be executed

32 automatically when TIMER 0 overflows.

34 –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

35 */

37

Page 41: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Description

37 TVP5020 NTSC/PAL Video Decoder

4.9 Source File: TIMER.C (Continued)

38 static void timer0_isr (void) interrupt 1 using 139 41 142 1 /*––––––––––––––––––––––––––––––––––––––––––––––––43 1 Adjust the timer 0 counter so that we get another44 1 interrupt in 2 ms.45 1 ––––––––––––––––––––––––––––––––––––––––––––––––*/46 1 TR0 = 0; /* stop timer 0 */47 148 1 TL0 = TIMER0_LO;49 1 TH0 = TIMER0_HI;50 151 1 TR0 = 1; /* start timer 0 */52 153 1 /*––––––––––––––––––––––––––––––––––––––––––––––––54 1 Increment the timer-tick. This interrupt should55 1 occur approximately every 2ms.56 1 ––––––––––––––––––––––––––––––––––––––––––––––––*/57 1 timer0_tick++;58 159 1 6061 /*62 –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––64 void timer0_initialize (void);6566 set TIMER0 AS: mode 1; 16bit timer6768 This function enables TIMER 0. TIMER 0 will generate a synchronous69 Interrupt once every 2 ms.70 –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––71 */7374 void timer0_initialize (void)75 76 1 EA = 0; /* disable interrupts */77 178 1 timer0_tick = 0;79 180 1 TR0 = 0; /* stop timer 0 */81 182 1 TMOD &= ~0x0F; /* clear timer 0 mode bits */83 1 TMOD |= 0x01; /* put timer 0 into 16–bit no prescale */84 185 1 TL0 = TIMER0_LO;86 1 TH0 = TIMER0_HI;87 188 1 PT0 = 0; /* set low priority for timer 0, PT0 is in IP register */89 1 ET0 = 1; /* enable timer 0 interrupt, ET0 is in IE register */90 191 1 TR0 = 1; /* start timer 0, TR0 is in TCON register */92 193 1 EA = 1; /* enable interrupts */94 1

Page 42: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Description

38 SLAA051

4.9 Source File: TIMER.C (Continued)

95

96 /*

97 –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

98 void ResetTickCount( void );

99

100 This function resets the timer-tick variable to zero. The function

101 should be used before each time the timer is used to time an event to

102 prevent incorrect operation due to the timer0_tick variable rolling

103 over to zero. This will work out to a maximum of 64K * 2ms, or 128

104 seconds.

106 ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

107 */

108

109 void ResetTickCount( void )

110

111 1 timer0_tick = 0;

112 1

113

114 /*

115 –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

116 unsigned current_tick (void);

117

118 This function returns the current timer0 tick count.

119 –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

120 */

121

122 unsigned current_tick (void)

123

124 1 unsigned xdata t;

125 1

126 1 EA = 0;

127 1 t = timer0_tick;

128 1 EA = 1;

129 1

130 1 return (t);

131 1

Page 43: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Description

39 TVP5020 NTSC/PAL Video Decoder

4.9 Source File: TIMER.C (Continued)

132

133 /*

134 –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

135 unsigned timer0_elapsed_count (unsigned count);

136

136 This function returns the number of timer-ticks that have elapsed since

137 the specified count.

139 –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

140 */

141

142 unsigned timer0_elapsed_count( unsigned start_tick )

143

144 1 return (current_tick( ) – start_tick);

145

146

147

148

149

150 1

151

152 /*–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

153 void timer0_wait ( unsigned count );

154

155 This function waits for ’count’ timer-ticks to pass.

156 –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

157 */

157 void timer0_wait( unsigned num_tick )

158

159 1 unsigned xdata test1;

160 1 unsigned xdata start_count;

161 1

162 1 start_count = current_tick ();

163 1

164 1 while( ( test1 = timer0_elapsed_count( start_count ) ) <= num_tick)

165 1

166 2

167 1

168

C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

Page 44: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Description

40 SLAA051

4.10 Source-Code Module: VMI5020

This module contains the TVP5020 VMI routines.

4.10.1 Vertical Blanking Interval Data Processor (VDP)

VDP registers are defined as all registers in the address range 90h – C2h.Non-VDP registers are defined as all other registers. There are differentmechanisms for accessing VDP registers and non-VDP registers.

4.10.1.1 Accessing Non-VDP Registers

When writing to a non-VDP register by writing to the VMI data register, a longlatency will occur before the TVP5020 is ready to write another data byte. Thislatency is at most one horizontal sync period (on the order of 64 µs). After thislatency period, the operation complete interrupt is generated. This can be testedby polling the VMI status register, or by using the interrupt request signal(INTREQ) as is done in this program. After receiving the interrupt, the TVP5020may initiate another VMI write cycle by writing to the VMI data register again.

Also, when loading the VMI address register with the address of a readablenon-VDP register, a long latency will occur before the data byte is ready for theTVP5020 to read. This latency is at most one horizontal sync period. After thislatency period, the operation complete interrupt is generated. This can be testedby polling the VMI status register, or by using the interrupt request signal(INTREQ) as is done in this program. After receiving the interrupt, the VMI dataregister may be read to obtain the read data.

4.10.1.2 Accessing VDP Registers

When writing to a VDP register by writing to the VMI data register, a long latencywill not occur before the TVP5020 is ready for another data byte to be written andthe operation complete interrupt will not be generated. After completion of theVMI write cycle, another VMI write cycle may be initiated immediately by writingto the VMI data register again.

Also, when loading the VMI address register with the address of a readable VDPregister, a long latency will not occur before the data byte is ready for theTVP5020 to read, and the operation complete interrupt will not be generated. TheVMI data register may be read immediately to obtain the read data.

4.10.2 Function: DecoderReset() (Lines 20–34)

This function configures the TVP5020 interrupt output (INTREQ) as required foraccessing the non-VDP registers. First, register C1h is loaded with the value 20h.This enables the operation complete interrupt. Second, register C2h is loadedwith the value 05h. This sets the INTREQ pin to active high (bit 0 = 1) and enablesthe YUV outputs (bit 2 = 1).

The YUV enable must also be set in the miscellaneous controls register (address03h bit 4 = 1); otherwise the YUV outputs will be in the high-impedance state. Thisbit (address 03h bit 4) gets set when the TVP5020 registers get patched after themicrocode download and CPU restart. Finally, FFh is written to the status registerto reset all interrupt status bits and initialize the INTREQ pin to inactive (0).

Page 45: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Description

41 TVP5020 NTSC/PAL Video Decoder

4.10.3 Function: HandleDownload() (Lines 36–48)

This function is called to download the microcode to the TVP5020 programmemory. Two parameters are passed to this function. Parameter nCount is thenumber of data bytes to write (plus 1 for the address byte). Parameter pInBuf isa pointer to the data to be written.

For the first VMI transaction, the first byte in the data buffer must be the addressfor microcode downloads (7Eh). WriteTVP5020VMI() is called to write theaddress to the VMI address register.

The global variable g_bVDPAddrRange is set to FALSE because the data will bewritten to a non-VDP register.

For the second VMI transaction, WriteTVP5020VMI() is called again to write theentire microcode data stream to the VMI data register. The third parameter is setto FLAG_DATA_ONLY to indicate that the data buffer starts with a data byte (notan address) and that the VMI address register does not need to be loaded.

4.10.4 Function: Write TVP5020() (Lines 50–56)

This function is called to write to a TVP5020 register. Two parameters are passedto this function. Parameter nData is the number of data bytes to write (plus 1 forthe address byte). Parameter pBuf is a pointer to the data to be written. TheWriteTVP5020() function does nothing but pass on parameters to theWriteTVP5020VMI() function. This enables the I2C5020, VMI5020 and VIP5020source-code modules to be used interchangeably without having to change therest of the program.

4.10.5 Function: Write TVP5020VMI() (lines 58–127)

This function performs a VMI write cycle for both VDP and non-VDP registers.Four parameters are passed in:• nLen is the number of data bytes to write (plus 1 for the address byte—unless

the FLAG_DATA_ONLY flag is set).• pBuf is a pointer to the caller’s data buffer.• nFlags takes on the values 0 or FLAG_DATA_ONLY.

– 0 —First byte of data buffer is the address, load it into the VMI addressregister.

– FLAG_DATA_ONLY —First byte of data buffer is a data byte, do not loadthe VMI address register.

• nCtl indicates the VMI register where data bytes will be written.

4.10.5.1 Address Phase (Lines 70–86)

If the FLAG_DATA_ONLY flag is set, the number of data bytes to write is the sameas the nLen count passed. The VMI address register is not loaded.

Otherwise, subtract 1 from nLen to get the number of data bytes. Get the addressfrom the first byte in the data buffer and point the data pointer to the first data byte.Determine the VDP/non-VDP status. Load the VMI address register.

4.10.5.2 Data Phase (Lines 88–125)

Jump to the proper code segment based on the VDP/non-VDP status.

Page 46: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Description

42 SLAA051

For non-VDP Registers (Lines 90–117) perform the following steps:

1. Clear the interrupt status register and set INTREQ inactive.

2. Test and wait for INTREQ inactive.

3. Write a data byte from the caller’s data buffer to the VMI data register.

4. Test and wait for INTREQ active.

5. Repeat steps 1 thru 4 for all data bytes.

6. Clear the interrupt status register and set INTREQ inactive.

For VDP Registers (Lines 119–125), perform the following steps:

1. Write a data byte from the caller’s data buffer to the VMI data register.

2. Repeat step 1 for all data bytes.

4.10.6 Function: ReadSwitch() (Lines 129–154)

This function is TVP56000EVM-specific. It reads the logic levels of the DIPswitches through the defined I/O pins of the P80C652. The result is packed intoan 8-bit return value.

4.10.7 Function: ReadTVP5020() (Lines 156–168)

This function can be called to read from a TVP5020 register. The function is notused in this program, but is included here for reference. Three parameters arepassed to this function. Parameter nLength is the number of data bytes to read.Parameter pBuf is a pointer to the caller’s buffer where the read data is to bestored. Parameter nSubAddr is the address to read from.

The ReadTVP5020() function does nothing but pass on parameters to theReadTVP5020VMI() function. This enables the I2C5020, VMI5020, and VIP5020source-code modules to be used interchangeably without having to change therest of the program.

4.10.8 Function: ReadTVP5020VMI() (Lines 170–220)

This function performs a VMI read cycle for both VDP and non-VDP registers.Three parameters are passed to this function:

1. nLen is the number of data bytes to read.

2. pBuf is a pointer to the caller’s data buffer where read data is to be stored.

3. nSubAddr is the address to read from.

4.10.8.1 Address Phase

Determine the VDP/non-VDP status. Jump to the proper code segment based onthe VDP/ non-VDP status.

For non-VDP Registers (Lines 186–190) perform the following steps:

1. Clear the interrupt status register and set INTREQ inactive.

2. Load the VMI address register.

For VDP Registers (Lines 212–213), load the VMI address register.

Page 47: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Description

43 TVP5020 NTSC/PAL Video Decoder

4.10.8.2 Data Phase

For non-VDP Registers (Lines 192–208) perform the following steps:

1. Test and wait for INTREQ active.

2. Clear the interrupt status register and set INTREQ inactive

3. Test and wait for INTREQ inactive.

4. Read a data byte from the VMI data register into caller’s data buffer.

5. Repeat steps 1 thru 4 for all data bytes.

For VDP Registers (Lines 214–218) perform the following steps:

1. Read a data byte from the VMI data register into caller’s data buffer.

2. Repeat step 1 for all data bytes.

4.11 Header File: VMI5020.H

// VMI5020.H

//

// Header file for VMI bus routines

//

#define FALSE 0

#define TRUE !FALSE

#define ADDRESS 0

#define DATA 1

#define FIFO 2

#define STATUS 3

#define ACTIVE 1

#define INACTIVE 0

#define FLAG_DATA_ONLY 1

#define BOARD_TVP56000EVM 5

void DecoderReset( void );

void HandleDownload( unsigned nCount, unsigned char* pInBuf );

unsigned WriteTVP5020(int nData, unsigned char *pBuf );

int WriteTVP5020VMI( int nLen, unsigned char *pBuf, int nFlags, int nCtl );

unsigned char ReadSwitch( void );

#if(0)

unsigned ReadTVP5020(int nLength, unsigned char *pBuf, unsigned char nSubAddr );

int ReadTVP5020VMI( int nLen, unsigned char *pBuf, int nSubAddr );

#endif

Page 48: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Description

44 SLAA051

4.12 Source File: VMI5020.C

DOS C51 COMPILER V5.10, COMPILATION OF MODULE VMI5020 OBJECT MODULE PLACED IN VMI5020.OBJ COMPILER INVOKED BY: C:\C51\BIN\C51.EXE VMI5020.C DB OE OR LARGE

stmt level source

1 // 2 // VMI5020.C 3 // 4 // Routines for TVP5020 using VMI Bus 5 // 6 7 #include ”VMI5020.h” 8 #include ”Reg652.h” 9 10 11 // Identify the board 12 unsigned char g_nBoardID = BOARD_TVP56000EVM; 13 14 // Memory–Mapped TVP5020 VMI Ports 15 extern unsigned char xdata g_pVMI[]; 16 17 // If TRUE, INTREQ handshake is not required 18 unsigned char g_bVDPAddrRange = FALSE; 19 20 void DecoderReset( void ) 21 22 1 // Initialize interrupts 23 1 // Enable operation complete interrupt 24 1 g_pVMI[ADDRESS] = 0xC1; 25 1 g_pVMI[DATA] = 0x20; 26 1 27 1 // INTREQ is active high, enable YUV outputs 28 1 g_pVMI[ADDRESS] = 0xC2; 29 1 g_pVMI[DATA] = 0x05; 30 1 31 1 // Reset interrupts 32 1 g_pVMI[STATUS] = 0xFF; 33 1 return; 34 1 35 36 void HandleDownload( unsigned nCount, unsigned char* pInBuf ) 37 38 1 // Write the sub–address byte 39 1 WriteTVP5020VMI( 1, pInBuf++, 0, DATA ); 40 1 41 1 // Write the data as one block – data bytes only 42 1 g_bVDPAddrRange = FALSE; 43 1 44 1 // FLAG_DATA_ONLY = Buffer contains data bytes only 45 1 WriteTVP5020VMI( nCount–1, pInBuf, FLAG_DATA_ONLY, DATA ); 46 1 47 1 return; 48 1 49

Page 49: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Description

45 TVP5020 NTSC/PAL Video Decoder

4.12 Source File: VMI5020.C (Continued)

50 unsigned WriteTVP5020(int nData, unsigned char *pBuf )

51

52 1 // Write data via 8–bit memory mapped port

53 1 WriteTVP5020VMI( nData, pBuf, 0, DATA );

54 1

55 1 return( nData );

56 1

57

58 int WriteTVP5020VMI( int nLen, unsigned char *pBuf, int nFlags, int

nCtl )

59

60 1 // nLen – byte count including sub–address byte and data

// bytes OR just data bytes

61 1 // pBuf – pointer to caller’s buffer

62 1 // nFlags – FLAG_DATA_ONLY

63 1 // nCtl – The VMI register to write data to

64 1

65 1 int j = 0;

66 1 int nAddr = 0;

67 1 int nDataLen = 0;

68 1 unsigned char* pInData = pBuf;

69 1

70 1 // Determine number of data bytes

71 1 if( nFlags & FLAG_DATA_ONLY )

72 1

73 2 nDataLen = nLen;

74 2

75 1 else

76 1

77 2 nDataLen = nLen – 1;

78 2 // Point to first data byte

79 2 pInData++;

80 2 // Get address from buffer

81 2 nAddr = *pBuf;

82 2 // Save the VDP / non–VDP status

83 2 g_bVDPAddrRange = ( ( nAddr >= 0x90 ) && ( nAddr <= 0xC2 ) )?

TRUE : FALSE;

84 2 // Write the address

85 2 g_pVMI[ADDRESS] = nAddr;

86 2

87 1

Page 50: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Description

46 SLAA051

4.12 Source File: VMI5020.C (Continued)

88 1 // Write ’nDataLen’ bytes

89 1 if( !g_bVDPAddrRange )

90 1

91 2 for(j=0; j<nDataLen; j++ )

92 2

93 3 // When there is no address to write there is no way to

94 3 // know ’bVDPAddrRange’. Caller sets that variable

// before calling WriteTVP5020VMI()

96 3

97 3 // Reset interrupts

98 3 g_pVMI[STATUS] = (unsigned char)0xFF;

99 3 while( INTREQ != INACTIVE )

100 3

101 4 ;

102 4

104 3 // Write the data

105 3 g_pVMI[nCtl] = *pInData++;

106 3

107 3 // If not a VDP register, wait for the interrupt that

108 3 // signals that the write operation has completed

109 3 while( INTREQ != ACTIVE )

110 3

111 4 ;

112 4

113 3

114 2

115 2 // Reset interrupts

116 2 g_pVMI[STATUS] = (unsigned char)0xFF;

117 2

118 1 else

119 1

120 2 for(j=0; j<nDataLen; j++ )

121 2

122 3 // Write the data

123 3 g_pVMI[nCtl] = *pInData++;

124 3

125 2

126 1 return( 0 );

127 1

128

Page 51: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Description

47 TVP5020 NTSC/PAL Video Decoder

4.12 Source File: VMI5020.C (Continued)

129 unsigned char ReadSwitch( void )

130

131 1 unsigned char nVal = 0;

132 1

133 1 // See REG652.H for SW1...SW3 definitions

134 1 SW1 = 1; //MSB

135 1 SW2 = 1;

136 1 SW3 = 1; //LSB

137 1

138 1 if ( SW1 == 1 )

139 1

140 2 nVal += 4;

141 2

142 1

143 1 if ( SW2 == 1 )

144 1

145 2 nVal += 2;

146 2

147 1

148 1 if ( SW3 == 1 )

149 1

150 2 nVal += 1;

151 2

152 1

153 1 return( nVal );

154 1

155

Page 52: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Description

48 SLAA051

4.12 Source File: VMI5020.C (Continued)

156 #if(0)// Note: This is how to read a TVP5020 register via VMIunsigned ReadTVP5020(int nLength, unsigned char *pBuf,

unsigned char nSubAddr )

// nLength = # data bytes to read// pBuf = Pointer to where first data word read should be// stored// nSubAddr = sub–address to read

ReadTVP5020VMI( nLength, pBuf, nSubAddr );return( 0u );

168

170 int ReadTVP5020VMI( int nLen, unsigned char *pBuf, int nSubAddr )

// nLen – number of bytes to read// pBuf – pointer to data buffer where read data is to be// stored// nSubAddr – sub–address to read from

int j = 0;

// Save the VDP / non–VDP statusg_bVDPAddrRange = ((nSubAddr >= 0x90) && (nSubAddr <= 0xC2)) ?

TRUE : FALSE;

183 // Write the addressif( !g_bVDPAddrRange )

186 // Reset interruptsg_pVMI[STATUS] = (unsigned char)0xFF;

// Write the read address – should set INTREQ 190 g_pVMI[ADDRESS] = nSubAddr;

192 for(j=0; j<nLen; j++ )

while( INTREQ != ACTIVE )

;

// Reset interrupts 200 g_pVMI[STATUS] = (unsigned char)0xFF;

while( INTREQ != INACTIVE )

;

// Read the data – should set INTREQ*pBuf++ = g_pVMI[nCtl];

208 209

Page 53: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Description

49 TVP5020 NTSC/PAL Video Decoder

4.12 Source File: VMI5020.C (Continued)

210 else

212 // Write the read address – should not set INTREQ

213 g_pVMI[ADDRESS] = nSubAddr;

214 for(j=0; j<nLen; j++ )

// Read the data – should not set INTREQ

*pBuf++ = g_pVMI[nCtl];

218

return( 0 );

#endif

220

C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

4.13 Source-Code Module: I2C6000

This module contains the TVP6000-specific I2C routines and initialization datafor the TVP6000.

4.13.1 Function: read_tvp6000() (lines 23–40)

This function can be called to read from a TVP6000 register. The function is notused in this program, but is included here for reference. Three parameters arepassed to this function. Parameter read_length is the number of data bytes toread. Parameter sub_addrs is the subaddress to read from. Parameteroutput_buf is a pointer to the caller’s buffer where the read data is to be stored.

For the TVP6000, there is no restriction on the number of bytes read per I2Ctransaction. The I2C function start_i2c() is called first, with the TVP6000 I2Cdevice ID for writes, to write the subaddress value. Then, start_i2c() is calledagain, with the TVP6000 I2C device ID for reads, to read the requested numberof data bytes.

4.13.2 Function: write_tvp6000() (Lines 41–50)

This function is called to write to a TVP6000 register. Two parameters are passedto this function. Parameter write_length is the number of data bytes to write (plus1 for the subaddress byte). Parameter input_buf is a pointer to the data to bewritten. The first byte in the data must be the subaddress. For the TVP6000, thereis no restriction on the number of bytes written per I2C transaction. The I2Cfunction start_i2c() is called to perform the I2C data transfer. The TVP6000 I2Cdevice ID for writes is passed as a parameter.

Page 54: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Description

50 SLAA051

4.13.3 Function: LoadTVP6000() (Lines 52–75)

This function initializes the TVP6000 registers. The parameter nMode indicatesthe video mode that will be set up. The register data for the selected video modeis written to the TVP6000 by passing the array name of the proper register dataset to write_tvp6000(). Finally, the function PatchTVP6000() is called.

4.13.4 Function: PatchTVP6000 (Lines 77–97)

This function performs an initialization step that is necessary to properly initializethe YUV interface. The YUV format is momentarily changed to 16-bit YUV 4:2:2mode and then back to the 8-bit ITU-R BT.656 interface mode.

The global variable g_nBoard is tested to determine the value to write intosubaddress 3Ah: 0Fh to use video port 1, or 1Fh to use video port 2. This codewas inserted only to make the same code work on an EVM prototype board thatuses VP1 instead of VP2. Normally, this if statement should be taken out.

4.14 Header File: I2C6000.H

// I2C6000.H

//

// Header file for TVP6000 routines

//

#define ENCODER_WRITE 0x42 // I2C writing address of encoder

#define ENCODER_READ 0x43 // I2C reading address of encoder

#define NUM_OF_REGISTER 0x65 // No of TVP6000 registers to load

#define BOARD_TVP56000EVM 5

#define BOARD_EVM3 3

#if(0)

void read_tvp6000(int length_of_read, unsigned char first_subaddress,

unsigned char* readout_buffer);

#endif

void write_tvp6000(int length_of_write, unsigned char *write_buf);

void LoadTVP6000( int nMode );

void PatchTVP6000( void );

Page 55: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Description

51 TVP5020 NTSC/PAL Video Decoder

4.15 Source File: I2C6000.C

DOS C51 COMPILER V5.10, COMPILATION OF MODULE I2C6000

OBJECT MODULE PLACED IN I2C6000.OBJ

COMPILER INVOKED BY: C:\C51\BIN\C51.EXE I2C6000.C DB OE OR LARGE

stmt level source

1 //

2 // I2C6000.C

3 //

4 // Routines for TVP6000 using I2C Bus

5 //

6 #include ”I2C.h”

7 #include ”I2C6000.h”

9 #include ”timer.h”

8 #include ”DATA6000.h”

10

11 extern unsigned char g_nBoardID;

12

13 static unsigned char patch1_6000[2] =

14

15 0x3A, 0x0D //16–bit YUV 4:2:2, color bar TPG OFF

16 ;

17

18 static unsigned char patch2_6000[2] =

19

20 0x3A, 0x0F // CCIR 656, VP1

21 ;

22

23 #if(0)

void read_tvp6000(int read_length, unsigned char sub_addrs,

unsigned char *output_buf)

unsigned char *sub_begin;

sub_begin = &sub_addrs;

initia_i2c(); /* initialize I2C bus */

/* this will write the first SUB–address to TVP6000 */

/* after this, data will be read out start from this address */

start_i2c(ENCODER_WRITE, 1, sub_begin);

/* read all registers of TVP6000, and put them into a temporary

buffer */

start_i2c(ENCODER_READ, read_length, output_buf);

return;

#endif

40

Page 56: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Description

52 SLAA051

4.15 Source File: I2C6000.C (Continued)

41 void write_tvp6000(int write_length, unsigned char *input_buf) 42 43 1 initia_i2c(); /* initialize I2C bus */ 44 1 45 1 // This will write the first sub–address to TVP6000 46 1 // after this, data will be read out starting from this address 47 1 // subaddress will be 1st element in the input_buf 48 1 start_i2c(ENCODER_WRITE, write_length, input_buf); 49 1 return; 50 1 51 52 void LoadTVP6000( int nMode ) 53 54 1 switch( nMode ) 55 1

56 2 case 0: 57 2 write_tvp6000(NUM_OF_REGISTER, T600N601); 58 2 break; 59 2 60 2 case 1: 61 2 write_tvp6000(NUM_OF_REGISTER, T600NSQP); 62 2 break; 63 2 64 2 case 2: 65 2 write_tvp6000(NUM_OF_REGISTER, T600P601); 66 2 break; 67 2 68 2 case 3: 69 2 write_tvp6000(NUM_OF_REGISTER, T600PSQP); 70 2 break; 71 2 73 1 PatchTVP6000(); 74 1 return; 75 1 76 77 void PatchTVP6000( void ) 78 79 1 unsigned nStartPoint = 0; 80 1 81 1 write_tvp6000( 2, patch1_6000 ); 82 1 83 1 // Delay for 100ms 84 1 nStartPoint = current_tick (); 85 1 while( timer0_elapsed_count( nStartPoint ) < ONE_HUNDRED_MS ) 86 1 ;

90 1 if( g_nBoardID == BOARD_TVP56000EVM ) 91 1 92 2 // Use video port 2 for TVP56000EVM 93 2 patch2_6000[1] = 0x1F; 94 2 95 1 write_tvp6000( 2, patch2_6000 ); 96 1 return; 97 1

C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

Page 57: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Description

53 TVP5020 NTSC/PAL Video Decoder

4.16 TVP6000 Initialization Data for NTSC with CCIR601 Sampling

// DATA6000.H // Header file containing all TVP6000 register initialization data. // unsigned char code T600N601[] = /* Register Name Sub–Address */ 0x3A, /* SUB–ADDRESS N/A */ 0x0F, /* F_CONTROL 3A */ /* RESERVED */ 0x00, 0x00, 0x00, 0x00, 0x00, /* 3B–3F */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 40–47 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 48–4F */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 50–57 */ 0x00, 0x00, /* 58–59 */ 0x00, /* C_PHASE 5A */ 0x0E, /* GAIN_U 5B */ 0x7D, /* GAIN_V 5C */ 0xCE, /* BLACK_LEVEL 5D */ 0xB8, /* BLANK_LEVEL 5E */ 0x31, /* GAIN_Y 5F */ 0x20, /* X_COLOR 60 */ 0x0D, /* M_CONTROL 61 */ 0x3A, /* BSTAMP 62 */ 0x1F, /* S_CARR1 63 */ 0x7C, /* S_CARR2 64 */ 0xF0, /* S_CARR3 65 */ 0x21, /* S_CARR4 66 */ 0x00, /* LINE21_O0 67 */ 0x00, /* LINE21_O1 68 */ 0x00, /* LINE21_E0 69 */ 0x00, /* LINE21_E1 6A */ 0x12, /* LN_SEL 6B */ 0x00, /* SYN_CTRL0 6C */ 0x40, /* RCML21 6D */ 0xF2, /* HTRIGGER0 6E */ 0x00, /* HTRIGGER1 6F */ 0xC0, /* VTRIGGER 70 */ 0x89, /* BMRQ 71 */ 0x39, /* EMRQ 72 */ 0x61, /* BEMRQ 73 */ 0x08, /* X2PH 74 */ 0x90, /* X1PH 75 */ 0x00, /* RESERVED 76 */ 0xEA, /* BRCV 77 */ 0x8A, /* ERCV 78 */ 0x60, /* BERCV 79 */ 0x0C, /* FLEN 7A */ 0x06, /* FAL 7B */ 0x06, /* LAL 7C */ 0x22, /* FLAL 7D */ 0x0E, /* SYN_CTRL1 7E */ /* RESERVED 0x00 7F */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 80–87 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 88–8F */ /* Scaling Processor Registers */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 90–97 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* 98–9D */ ;

Page 58: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Description

54 SLAA051

4.17 TVP6000 Initialization Data for NTSC with Square Pixel Sampling

unsigned char code T600NSQP[] = /* Register Name Sub–Address */0x3A, /* SUB–ADDRESS N/A */0x0F, /* F_CONTROL 3A */ /* RESERVED */ 0x00, 0x00, 0x00, 0x00, 0x00, /* 3B–3F */0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 40–47 */0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 48–4F */0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 50–57 */0x00, 0x00, /* 58–59 */0x00, /* C_PHASE 5A */0x0E, /* GAIN_U 5B */0x7D, /* GAIN_V 5C */0xCE, /* BLACK_LEVEL 5D */0xB8, /* BLANK_LEVEL 5E */0x31, /* GAIN_Y 5F */0x20, /* X_COLOR 60 */0x0D, /* M_CONTROL 61 */0xBA, /* BSTAMP 62 */0x55, /* S_CARR1 63 */0x55, /* S_CARR2 64 */0x55, /* S_CARR3 65 */0x25, /* S_CARR4 66 */0xA5, /* LINE21_O0 67 */0x50, /* LINE21_O1 68 */0xA5, /* LINE21_E0 69 */0x50, /* LINE21_E1 6A */0x14, /* LN_SEL 6B */0x24, /* SYN_CTRL0 6C */0x40, /* RCML21 6D */0xDE, /* HTRIGGER0 6E */0x00, /* HTRIGGER1 6F */0xDF, /* VTRIGGER 70 */0xBF, /* BMRQ 71 */0xBF, /* EMRQ 72 */0x50, /* BEMRQ 73 */0x08, /* X2PH 74 */0x90, /* X1PH 75 */0x00, /* RESERVED 76 */0xD3, /* BRCV 77 */0xD3, /* ERCV 78 */0x50, /* BERCV 79 */0x0C, /* FLEN 7A */0x06, /* FAL 7B */0x06, /* LAL 7C */0x22, /* FLAL 7D */0x0E, /* SYN_CTRL1 7E */ /* RESERVED 0x00 7F */0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 80–87 */0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 88–8F */ /* Scaling Processor Registers */0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 90–97 */0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* 98–9D */ ;

Page 59: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Description

55 TVP5020 NTSC/PAL Video Decoder

4.18 TVP6000 Initialization Data for PAL with CCIR601 Sampling

unsigned char code T600P601[] = /* Register Name Sub–Address */0x3A, /* SUB–ADDRESS N/A */0x0F, /* F_CONTROL 3A */ /* RESERVED */ 0x00, 0x00, 0x00, 0x00, 0x00, /* 3B–3F */0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 40–47 */0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 48–4F */0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 50–57 */0x00, 0x00, /* 58–59 */0x00, /* C_PHASE 5A */0x15, /* GAIN_U 5B */0x8C, /* GAIN_V 5C */0xBC, /* BLACK_LEVEL 5D */0xBC, /* BLANK_LEVEL 5E */0x45, /* GAIN_Y 5F */0x20, /* X_COLOR 60 */0x0E, /* M_CONTROL 61 */0x41, /* BSTAMP 62 */0xCB, /* S_CARR1 63 */0x8A, /* S_CARR2 64 */0x09, /* S_CARR3 65 */0x2A, /* S_CARR4 66 */0xA2, /* LINE21_O0 67 */0x2A, /* LINE21_O1 68 */0xA2, /* LINE21_E0 69 */0x2A, /* LINE21_E1 6A */0x14, /* LN_SEL 6B */0x00, /* SYN_CTRL0 6C */0x00, /* RCML21 6D */0x16, /* HTRIGGER0 6E */0x01, /* HTRIGGER1 6F */0x80, /* VTRIGGER 70 */0x5F, /* BMRQ 71 */0x5F, /* EMRQ 72 */0x61, /* BEMRQ 73 */0x08, /* X2PH 74 */0x90, /* X1PH 75 */0x00, /* RESERVED 76 */0x0E, /* BRCV 77 */0xAE, /* ERCV 78 */0x61, /* BERCV 79 */0x70, /* FLEN 7A */0x05, /* FAL 7B */0x35, /* LAL 7C */0x22, /* FLAL 7D */0x0E, /* SYN_CTRL1 7E */ /* RESERVED 0x00 7F */0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 80–87 */0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 88–8F */ /* Scaling Processor Registers */0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 90–97 */0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* 98–9D */ ;

Page 60: TVP5020 NTSC/PAL Video Decoder Programming for the VMI … · 2011. 8. 6. · TVP5020 NTSC/PAL Video Decoder Programming for the VMI Host Interface Michael A. Tadyshak ABSTRACT This

Program Description

56 SLAA051

4.19 TVP6000 Initialization Data for PAL with Square Pixel Sampling

unsigned char code T600PSQP[] = /* Register Name Sub–Address */0x3A, /* SUB–ADDRESS N/A */0x0F, /* F_CONTROL 3A */ /* RESERVED */ 0x00, 0x00, 0x00, 0x00, 0x00, /* 3B–3F */0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 40–47 */0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 48–4F */0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 50–57 */0x00, 0x00, /* 58–59 */0x00, /* C_PHASE 5A */0x15, /* GAIN_U 5B */0x8C, /* GAIN_V 5C */0xBC, /* BLACK_LEVEL 5D */0xBC, /* BLANK_LEVEL 5E */0x45, /* GAIN_Y 5F */0x20, /* X_COLOR 60 */0x0E, /* M_CONTROL 61 */0xC1, /* BSTAMP 62 */0x0C, /* S_CARR1 63 */0x8C, /* S_CARR2 64 */0x79, /* S_CARR3 65 */0x26, /* S_CARR4 66 */0xA2, /* LINE21_O0 67 */0x2A, /* LINE21_O1 68 */0xA2, /* LINE21_E0 69 */0x2A, /* LINE21_E1 6A */0x14, /* LN_SEL 6B */0x00, /* SYN_CTRL0 6C */0x00, /* RCML21 6D */0x32, /* HTRIGGER0 6E */0x01, /* HTRIGGER1 6F */0x80, /* VTRIGGER 70 */0x5F, /* BMRQ 71 */0x5F, /* EMRQ 72 */0x61, /* BEMRQ 73 */0x08, /* X2PH 74 */0x90, /* X1PH 75 */0x00, /* RESERVED 76 */0x28, /* BRCV 77 */0x28, /* ERCV 78 */0x71, /* BERCV 79 */0x70, /* FLEN 7A */0x05, /* FAL 7B */0x35, /* LAL 7C */0x22, /* FLAL 7D */0x0E, /* SYN_CTRL1 7E */ /* RESERVED 0x00 7F */0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 80–87 */0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 88–8F */ /* Scaling Processor Registers */0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 90–97 */0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* 98–9D */ ;