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

📄 bt878test.c

📁 嵌入式开发 嵌入式开发 嵌入式开发
💻 C
字号:
#include "CORE_VGA.H"
#include "BT848.H"


#define SERIAL_COMM     0x3f8

typedef struct {
    int nBytesPerPixel;
    int bSample;
    int nWho;
    int source;
    int bright;
    int contrast;
    int hue;
    int saturation;
    int bFrameField;
    int bShowMemIMG;
    int bMask;
    int nMaxMemIMGNum;
    int nViewedMemIMGNum;
} SampleStatus;
SampleStatus status;

/******************************
 描述: 将从通讯口COM1接收到的数据放入程序指定的缓冲数组中
******************************/
void PushKBuffer_JZ(const unsigned char inB)
{
    if( inB==0xff || inB==0xfc )
    {
        sbuf[flag][flag1]=inB;
        pflag[flag]=1;
        flag1=0;
        if( ++flag==20 ) {   flag=0;}
    }
    else
    {
        sbuf[flag][flag1]=inB;
        if( ++flag1==10 ) {   flag1=0;}
    }
}

void interrupt far (*asyncvect)(void);
/******************************
 描述: 处理通讯口COM1接收数据的中断服务程序
******************************/
void interrupt far asyncint(void)
{
    unsigned char B;
    disable();
    B=inportb(SERIAL_COMM);
    if( B==0xfc ) {   captureflag=1;}
    else PushKBuffer_JZ(B);
    outportb(0x20, 0x20);
    enable();
}

/******************************
 描述: 通讯口COM1初始化 (9600bps N 8 1)
******************************/
void InitCOM1(void)
{
    unsigned char B;
    outportb(SERIAL_COMM+3, 0x80); // DLAB=1; set div rate
    outportb(SERIAL_COMM, 0x0C); // low baud
    outportb(SERIAL_COMM+1, 0x00); // high baud
    outportb(SERIAL_COMM+3, 0x03); // DLAB=0; set data format
    outportb(SERIAL_COMM+4, 0x0b);
    outportb(SERIAL_COMM+1, 0x01); // interrupt enable
    /* install affair-routine for serial communications */
    asyncvect=getvect(0x0C);
    disable();
    //inportb(SERIAL_COMM);
    //inportb(SERIAL_COMM+6);
    //inportb(SERIAL_COMM+3);
    //inportb(SERIAL_COMM+2);
    outportb(SERIAL_COMM+4, 0x0B);
    outportb(SERIAL_COMM+1, 0x01);
    B=inportb(0x21)&0xEF; // 1110 1111
    outport(0x21, B);
    setvect(0x0C, asyncint);
    enable();
}

/******************************
 描述: 禁止通讯口COM1接收任何数据
******************************/
void DisableCOM1(void)
{
    disable();
    outportb(SERIAL_COMM+1, 0x00);
    outportb(SERIAL_COMM+4, 0x00);
    outportb(0x21, inportb(0x21)&0x10);
    enable();
    setvect(0x0C, asyncvect);
}

/******************************
 描述: Mask code of BT878Card.
******************************/
int GetMaskWidth(int nWid)
{   return((nWid+7)/8);}

void InitMask(iRect* rect)
{
    long dwMaskCount;
    int i;
    rect->left=200;
    rect->right=rect->left+200-1; // width=160
    rect->top=50;
    rect->bottom=rect->top+200;
    nMaskWid = GetMaskWidth(rect->right - rect->left +1);
    nMaskHei = rect->bottom - rect->top;
    dwMaskCount = (long)nMaskWid * (long)nMaskHei;
    pMask=(BYTE far*)farmalloc(dwMaskCount);
    _fmemset(pMask,0,dwMaskCount);
}

void main()
{
	
	char _str_init878msg[50];
	int _int_ret_init878=0;
	if( Init878(0xD000, 40*1024L)==0 )
    {   // alloc 40K mem for RISC
        Button(410, 310, 200, 150, 0x03, "请检查视频设备!", 176, 231, 234); delay(3000);
    }
    bright=128;
	n878=0;
	InitCOM1();
	_int_ret_init878=IsVideoPresent(n878);
	memset(_str_init878msg, 0, 50);
	sprintf(_str_init878msg, "init878()=%d", _int_ret_init878);
	Bar(0,0,100,100,(_int_ret_init878>0?255:0),0,(_int_ret_init878>0?0:255));
	ShowASCMemX(0,0,1,2,_str_init878msg, 255,255,255);
	if(_int_ret_init878<=0)
	outportb(SERIAL_COMM, 0xfd);
	delay(5);
    InitCOM1();

⌨️ 快捷键说明

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