156 lines
7.1 KiB
C
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 --------------------------------
|