extern BOOL PIN_M35055_CS,PIN_M35055_DAT,PIN_M35055_CLK;
extern void Start_MonoTimer(void);
static void Write_M35055_Word(WORD val,WORD addr);
WORD code OSD_FONT[] = {OSDCHAR_0, OSDCHAR_1, OSDCHAR_2, OSDCHAR_3, OSDCHAR_4, OSDCHAR_5, OSDCHAR_6, OSDCHAR_7, OSDCHAR_8, OSDCHAR_9};
//---------------------------------------------------------------------------
// Osd_Initialize
//---------------------------------------------------------------------------
void OSD_Initialize(void){
Write_M35055_Word(0x2000,0x00f8);//addr:F8,bit0,bit1:Matrix_outline size
//bit 2,use internal sync
//bit 5,open display clock
//bit 6,close display
os_wait2(K_TMO,3);
Write_M35055_Word(0x0090,0x00f1);//set the horization position
Write_M35055_Word(0x004e,0x00f2);//set the vertical position
Write_M35055_Word(0x0108,0x00f6);//bit 8:32line*7
//bit 4~7,set the color of the blackground :white
//bit 3,level 1
//work in superimpose
Write_M35055_Word(0x00ff,0x00f7);//forbidden cursior
Write_M35055_Word(0x2040,0x00f8);//enable display
}
//---------------------------------------------------------------------------
// Osd_Shutdown
//---------------------------------------------------------------------------
void OSD_Shutdown(BOOL bonoff){
if (bonoff){
Write_M35055_Word(0x0040,0x00f8);//0PEN level
}
else{
Write_M35055_Word(0x2040,0x00f8); //close level
}
}
//--------------------------------------------------------------------------
// Write_OSD_2Digits
// addr(0-11)
//--------------------------------------------------------------------------
void Write_OSDVOL_2Digits(char value, BOOL bSign){
if (bSign){
if (value > 0){
Write_M35055_Word(OSDCHAR__, ADDR_VOLUME);
}
else if (value < 0){
Write_M35055_Word(OSDCHAR_MINUS, ADDR_VOLUME);
value = - value; //
}
else {
Write_M35055_Word(OSDCHAR__, ADDR_VOLUME);
}
Write_M35055_Word(OSD_FONT[value / 10], ADDR_VOLUME+1);
Write_M35055_Word(OSD_FONT[value % 10], ADDR_VOLUME+2);
}
else {
Write_M35055_Word(OSD_FONT[value / 10], ADDR_VOLUME);
Write_M35055_Word(OSD_FONT[value % 10], ADDR_VOLUME + 1);
}
}
//--------------------------------------------------------------------------
// Write_OSD_2Digits
// addr(0-11)
//--------------------------------------------------------------------------
void Write_OSDDLY_2Digits(char value, BOOL bSign){
if (bSign){
if (value > 0){
Write_M35055_Word(OSDCHAR__, ADDR_DLYCNT);
}
else if (value < 0){
Write_M35055_Word(OSDCHAR_MINUS, ADDR_DLYCNT);
value = - value; //
}
else {
Write_M35055_Word(OSDCHAR__, ADDR_DLYCNT);
}
Write_M35055_Word(OSD_FONT[value / 10], ADDR_DLYCNT+1);
Write_M35055_Word(OSD_FONT[value % 10], ADDR_DLYCNT+2);
}
else {
Write_M35055_Word(OSD_FONT[value / 10], ADDR_DLYCNT);
Write_M35055_Word(OSD_FONT[value % 10], ADDR_DLYCNT + 1);
}
}
//---------------------------------------------------------------------------
// Write_OSD_Message
//---------------------------------------------------------------------------
void Write_OSD_Message(WORD const code *buf, WORD addr){
BYTE i=0;
while (*buf != OSDCHAR_END){
Write_M35055_Word(*buf,addr + i);
buf ++;
i++;
}
Start_MonoTimer();
}
#define DELAY() {_nop_(); __nop_();_nop_();_nop_();}
//-------------------------------------------------------------------------
// Name: Write_M35055_Word
// Description: This function Write 2 bytes to M35055
// Arguments:
// Return value: none
//-------------------------------------------------------------------------
static void Write_M35055_Word(WORD val,WORD addr){
register BYTE i;
PIN_M35055_CLK = 1;
PIN_M35055_CS = 0;
for(i=0;i<16;i++)
{
if(addr & 0x0001)
PIN_M35055_DAT = 1;
else
PIN_M35055_DAT = 0;
PIN_M35055_CLK = 0;
PIN_M35055_CLK = 1;
addr >>= 1;
}
for(i=0;i<16;i++)
{
if(val & 0x0001)
PIN_M35055_DAT = 1;
else
PIN_M35055_DAT = 0;
PIN_M35055_CLK = 0;
PIN_M35055_CLK = 1;
val >>= 1;
}
DELAY();
PIN_M35055_CS = 1;
}