2025-04-27 07:49:33 -04:00

156 lines
7.1 KiB
C

//----------------------------------------------------------------------------
// STV0116.C
//----------------------------------------------------------------------------
// PAL/NSTC encoder (SGS-Thomson STV0116) programming
//----------------------------------------------------------------------------
// Copyright SGS Thomson Microelectronics ! Version alpha ! Jan 1st, 1995
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
// Include files
//----------------------------------------------------------------------------
#include "stdefs.h"
#include "STV0116.h"
#include "I2C.h"
#include "debug.h"
//----------------------------------------------------------------------------
// Private Constants
//----------------------------------------------------------------------------
//---- I2C addresses
#define STV0116W 0xB0 // Write address
#define STV0116R 0xB1 // Read address
//---- STV0116 registers Description type bits
#define CTRL 0x00 // Control RW 8
#define CFG 0x01 // Config RW 5
#define DLYMSB 0x02 // Delay Most Significant Byte RW 8
#define DLYLSB 0x03 // Delay Less Significant Byte RW 8
#define IDFS0 0x04 // Inc for Digital Freq Synthesizer RW 6
#define IDFS1 0x05 // RW 8
#define IDFS2 0x06 // RW 8
#define PDFS0 0x07 // Phase offset for Digit Freq Synth RW 6
#define PDFS1 0x08 // RW 8
#define PDFS2 0x09 // RW 8
#define PALY0 0x0A // RW 8/6
#define PALY1 0x0B // RW 8/6
#define PALY2 0x0C // RW 8/6
#define PALY3 0x0D // RW 8/6
#define PALY4 0x0E // RW 8/6
#define PALY5 0x0F // RW 8/6
#define PALY6 0x10 // RW 8/6
#define PALY7 0x11 // RW 8/6
#define PALCR0 0x12 // Cr Palet RW 8/6
#define PALCR1 0x13 // RW 8/6
#define PALCR2 0x14 // RW 8/6
#define PALCR3 0x15 // RW 8/6
#define PALCR4 0x16 // RW 8/6
#define PALCR5 0x17 // RW 8/6
#define PALCR6 0x18 // RW 8/6
#define PALCR7 0x19 // RW 8/6
#define PALCB0 0x1A // Cr Palet RW 8/6
#define PALCB1 0x1B // RW 8/6
#define PALCB2 0x1C // RW 8/6
#define PALCB3 0x1D // RW 8/6
#define PALCB4 0x1E // RW 8/6
#define PALCB5 0x1F // RW 8/6
#define PALCB6 0x20 // RW 8/6
#define PALCB7 0x21 // RW 8/6
#define TSTMODE 0x22 // Test register (color bars display)
#define STATUS 0x23 // Status R 8
#define COMP0 0x24 // Compression RW 8
#define COMP1 0x25 // RW 8
#define COMP2 0x26 // RW 8
//---- Register bits
//---- CTRL
#define STD1 0x80 // Standard selection
#define STD0 0x40 // Standard selection
#define SYM1 0x20 // Free-run
#define SYM0 0x10 // Frame synchronisation source in slave mode
#define SYS1 0x08 // Synchro : VCS polarity
#define SYS0 0x04 // Frame synchro : ODD/EVEN polarity
#define MOD1 0x02 // No Reset / Software reset
#define MOD0 0x01 // Slave/Master
//---- CFG
#define HSNVCS 0x80 // Output signal selection on VCS
#define RSTDDFS 0x40 // Reset of DDFS (DirectDigital Frequency Synthetizer)
#define FLT1 0x20 // Chroma pass band filter
#define SYNCOK 0x10 // Synchro availability in case of no free-run active
#define COKI 0x08 // Color kill
//---- TSTMODE
#define START 0x80 // Display color bars (test mode)
#define STOP 0x00 // Do not display color bars (normal mode)
//----- STATUS
#define HOK 0x80 // Hamming decoding of ODD/EVEN signal from YCRCB
#define ATFR 0x40 // Frame synchronisation flag
#define STD1S 0x20 // Standard selection
#define STD0S 0x10 // Standard selection
#define SYM1S 0x08 // Free-run
#define SYM0S 0x04 // Frame synchronisation source in slave mode
#define SYS1S 0x02 // Synchro : VCS polarity
#define SYS0S 0x01 // Frame synchro : ODD/EVEN polarity
//----------------------------------------------------------------------------
// Private Types
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
// Private GLOBAL Variables (static)
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
// Functions (statics one are private)
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
// Initialisation of STV0116
//----------------------------------------------------------------------------
BOOL STV0116Init(BYTE DisplayStd)
{
switch(DisplayStd) {
case NTSC_M :
if (!I2CSend(STV0116W, CTRL, STD1 | SYM1 | SYS1 | MOD1 | MOD0))
return FALSE;
if (!I2CSend(STV0116W, CFG, STD1 | SYM1 | SYM0))
return FALSE;
break;
case PAL_M :
if (!I2CSend(STV0116W, CTRL, SYM1 | SYS1 | MOD1 | MOD0))
return FALSE;
if (!I2CSend(STV0116W, CFG, STD1 | SYM1 | SYM0))
return FALSE;
break;
default :
DebugPrint((DebugLevelFatal, "Unknown case !"));
break;
}
return TRUE;
}
//----------------------------------------------------------------------------
// Enter test mode (display color bars)
//----------------------------------------------------------------------------
BOOL STV0116EnterTestMode(VOID)
{
return I2CSend(STV0116W, TSTMODE, START);
}
//----------------------------------------------------------------------------
// Return from test mode
//----------------------------------------------------------------------------
BOOL STV0116NormalMode(VOID)
{
return I2CSend(STV0116W, TSTMODE, STOP);
}
//------------------------------- End of File --------------------------------