⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ms_rwreg.c

📁 主要用于液晶电视解码,内置51单片机,全部代码用C编写,编译环境为KEILC
💻 C
字号:
#define _MSRWREG_C_

#include <intrins.h>
#include "types.h"
#include "board.h"
#include "ms_reg.h"
#include "global.h"
#include "misc.h"
#include "DEBUG.h"
extern void Delay4us(void);

#define Delay1us()	_nop_()//;_nop_()

#define MS_REG(addr)		(((unsigned char xdata*)0)[addr])
/////////////////////////////////////////////////////////////////////////
BYTE msReadByte(BYTE addr)
{
	//return MS_REG(addr);
	return *((BYTE pdata*) addr);
}
WORD msReadWord(BYTE addr)
{ WORD value;

  value=msReadByte(addr);
  value=(value<<8)|msReadByte(addr-1);

  return value;
}
void msWriteByte(BYTE addr, BYTE value)
{
	//MS_REG(addr)=value;
	*((BYTE pdata*) addr) = value;
}
void msWriteWord(BYTE addr, WORD value)
{ msWriteByte(addr-1, value&0xFF);
  msWriteByte(addr, value>>8);
}

void msWriteByte_Bank_BackupBank( BYTE ucBank, BYTE ucReg, BYTE ucData )
{
    BYTE ucBackupBank = msReadByte( BK0_00_REGBK);

    msWriteByte( BK0_00_REGBK, ucBank );
    msWriteByte( ucReg, ucData );

    msWriteByte( BK0_00_REGBK, ucBackupBank );
}

/*
void msWriteByteMask_Bank_BackupBank(BYTE ucBank, BYTE ucReg, BYTE ucValue, BYTE ucMask)
{
    BYTE ucBackupBank = msReadByte( BK0_00_REGBK);
    BYTE uc;

    msWriteByte( BK0_00_REGBK, ucBank );

    uc = msReadByte(ucReg) & (~ucMask);
    msWriteByte( ucReg, ( uc | (ucValue & ucMask)) );

    msWriteByte( BK0_00_REGBK, ucBackupBank );
}
*/

void msWriteTBL(BYTE addr, BYTE *tbl, WORD count, BYTE inc)
{
while (count--)
    { msWriteByte(addr, *(tbl++));
    }
	//printf("count====%x", count);

  inc=0;
}

void msWriteRegsTbl(RegUnitType *pTable)
{
    BYTE ucIndex; // register index

    while (1)
    {
         ucIndex = pTable->Reg; // get register index
         if (ucIndex == _END_OF_TBL_) // check end of table
             break;

         msWriteByte(ucIndex, pTable->Value); // write register

         pTable++; // next
    } // while
}

void msLoadModeIndexTBL(DynamicLoadModeTblType  *pTable)
{
  BYTE ucBank;
  RegUnitType *RegType;
  RegType=pTable->PtrRegTbl;

  ucBank=msReadByte(BK0_00_REGBK);

  msWriteByte(BK0_00_REGBK, REG_BANK_SCALER);
  while(1)
   {
      	if (pTable->InputType==_END_OF_TBL_)
           break;
      	if (((1<<g_VideoSetting.InputType)&(pTable->InputType)) \
            &&(g_ucSrcModeIndex==pTable->ModeIndex))
      		{
    	  	   while(1)
    	  	   	{
    	         	  if (RegType->Reg== _END_OF_TBL_) // check end of table
    	                    break;
    	                msWriteByte(RegType->Reg, RegType->Value); // write register
    	                RegType++; // next
    	  	   	}
      		}
    	   pTable++;
           RegType=pTable->PtrRegTbl;
   }

    msWriteByte( BK0_00_REGBK, ucBank );
}

void msWriteByteMask(BYTE ucReg, BYTE ucValue, BYTE ucMask)
{
    BYTE uc;

    uc = msReadByte(ucReg) & (~ucMask);
    msWriteByte( ucReg, ( uc | (ucValue & ucMask)) );
}

/*
void msWriteByte_Bank( BYTE ucBank, BYTE ucReg, BYTE ucData )
{
    msWriteByte( BK0_00_REGBK, ucBank );
    msWriteByte( ucReg, ucData );
}
*/
void msWriteBit(BYTE ucReg, BOOL bBit, BYTE ucBitPos)
{
    BYTE ucValue;

    ucValue = msReadByte(ucReg);
    if(bBit)
    {
        ucValue = ucValue | ucBitPos;
    }
    else
    {
        ucValue = ucValue & (~ucBitPos);
    }
    msWriteByte(ucReg, ucValue);
}


void msWrite3Bytes(BYTE ucReg, DWORD dwValue)
{
	msWriteByte(ucReg, (BYTE)(dwValue / 0x10000));
	msWriteByte(ucReg - 1, (BYTE)(dwValue / 0x100));
	msWriteByte(ucReg - 2, (BYTE)(dwValue));
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -