?? buxx_adsc.c
字號:
data_write(OVL_CNT, 0x0012);
data_write(OVL_FRMST1, (((M_LCD_WSIZE - 32) / 2) << 8) | ((M_LCD_HSIZE - 32) / 2)); //95,60
}
reg_write(INDEX, OVL_CNT);
if ((reg_read(REG) & 0x0002) != 0) //Overlay is on
{
if (wait_time >= 1000)
{
wait_time = 0;
reg_write(INDEX, OVL_FRMST1);
memcnt_data = reg_read(REG);
if (x_step == 1)
{
if (((memcnt_data & 0xff00) >> 8) + 0x0020 >= M_LCD_WSIZE)
x_step = -1;
}
else
{
if ((memcnt_data & 0xff00) <= 0x0000)
x_step = 1;
}
if (y_step == 1)
{
if ((memcnt_data & 0x00ff) + 0x0021 > M_LCD_HSIZE)
y_step = -1;
}
else
{
if ((memcnt_data & 0x00ff) <= 0x0000)
y_step = 1;
}
reg_write(REG, memcnt_data + (x_step << 8) + y_step);
}
else
{
wait_time++;
}
}
data_write(0xb0,p_exovl->ovlnum);// type, transparent,overlay1&2
data_write(0xb1,((p_exovl->xsize<<8)|p_exovl->ysize));//size=
u8OvlNum=p_exovl->ovlnum&0x0003;
if(u8OvlNum==0x0002)
{
u16Temp=(p_exovl->fmstx<<8)|p_exovl->fmsty;
data_write(0xb2,u16Temp);//X start &Y start in the frame
u16Temp=(p_exovl->ovlstx<<8)|p_exovl->ovlsty;
data_write(0xb7,u16Temp);// X start &Y start in the overlay memory
u16Temp=(p_exovl->ovledx<<8)|p_exovl->ovledy;
data_write(0xb8,u16Temp);// X end &Y end in the overlay memory
}
else if(u8OvlNum==0x0001)
{
data_write(0xb3,((p_exovl->fmstx<<8)|p_exovl->fmsty));// X start &Y start in the frame
data_write(0xb9,((p_exovl->ovlstx<<8)|p_exovl->ovlsty));// X start &Y start in the overlay memory
data_write(0xba,((p_exovl->ovledx<<8)|p_exovl->ovledy)); // X end &Y end in the overlay memory
}
data_write(0xbb,p_exovl->ovl_trans);//transparent coclor
data_write(0xbc,p_exovl->ovl_trmsk);//transparent color mask
data_write(0xbd,p_exovl->front_color);//front color
data_write(0xbe,p_exovl->back_color);//background color
data_write(0xb5,((p_exovl->mem_adr_ovr_stx)<<8|p_exovl->mem_adr_ovr_sty));// MEM_ADR_OVL_ST
data_write(0xb6,((p_exovl->mem_adr_ovr_edx)<<8|p_exovl->mem_adr_ovr_edy));// (edx,edy)=(,)
reg_write(INDEX, 0xb4);
for (cnt = 0; cnt <(p_exovl->xsize)*(p_exovl->ysize) ; cnt++)
{
reg_write( REG, *ovl_data); //RGB Data are written
ovl_data++;
}
}
*/
//-----------------------------------------------------------------------------
// interrupt dispose
//-----------------------------------------------------------------------------
void __irq aDSC_int_disp(void)
{
#if !defined BUXX_POLLING
UINT16 idx_push;
UINT16 reg_data;
switch (gl_dsc_status)
{
case sJPEGDECODE:
case sLEDMODE:
//no dispose
break;
case sRINGBUFFER:
case sHOSTJPEGDEC://KRIS ADD 2006-3-6 16:20
idx_push = reg_read(INDEX);
reg_data = data_read(JPG_INTST);
if (BUSACCESS_BIT == 8 && hostcnt_bitread(bHOST_END) != 0)
{
reg_data =
((reg_data & 0xff00) >> 8) | ((reg_data & 0x00ff) << 8);
}
if (reg_data & bJE_RING_INT)
{ // JE_RING_INT
bit_write(JPG_INTST, bJE_RING_INT, LOW); // JE_RING_INT clear
gl_bank_chk++;
}
else if (reg_data & bJE_ED_INT)
{
bit_write(JPG_INTST, bJE_ED_INT, LOW); // JE_ED_INT clear
gl_je_end_chk++;
}
if (reg_data & bJD_ED_INT)//Kris add
{
bit_write(JPG_INTST, bJD_ED_INT, LOW); // JD_ED_INT clear
gl_jd_end_chk++;
}
reg_write(INDEX, idx_push);
break;
default:
idx_push = reg_read(INDEX);
mode_change(sREADY);
reg_write(INDEX, idx_push);
break;
}
gl_check_int = 1;
#if 1
// INT=p0.16
EXTINT = 0x01; //清除EINT0 中斷標志
VICVectAddr = 0x00; //通知中斷結?
#else
// INT=p0.20
VICVectAddr = 0; // 向量中斷結束
EXTINT = 1<<3; // 清除p0.20 EINT3中斷標志,1<<3 等價于 0x08
#endif
#endif
}
//-----------------------------------------------------------------------------
// filter function setup
//-----------------------------------------------------------------------------
int aDSC_filter_set(const char *format, ...)
{
int i;
va_list ap;
int filter = 0xff;
char *cmp[] =
{ "disable", "thd", "gray", "sepia", "emboss", "edge1", "edge2",
"nega", "camyd" };
int fil_sel[] =
{ sDISABLE, sTHD, sGRAY, sSEPIA, sEMBOSS, sEDGE1, sEDGE2, sNEGA,
sCAMYD };
int temp1, temp2;
UINT16 reg_data;
int err_code = 0;
reg_data = aDSC_Quit_Preview();
va_start(ap, format);
for (i = 0; i < 10; i++)
{
if (strcmp(format, cmp[i]) == 0)
{
filter = fil_sel[i];
break;
}
}
switch (filter)
{
case sDISABLE:
data_write(CAMFLT, sDISABLE); // IDX_ADR : 0x11 no processing
break;
case sTHD:
data_write(CAMFLT, sTHD); // IDX_ADR : 0x11 gradate in two grade
temp1 = va_arg(ap, int);
if (temp1 > maxFLTTHD)
err_code = 0x2001;
data_write(FLTTHD, temp1); // IDX_ADR : 0x12
break;
case sGRAY:
data_write(CAMFLT, sGRAY); // IDX_ADR : 0x11 gray scale
break;
case sSEPIA:
data_write(CAMFLT, sSEPIA); // IDX_ADR : 0x11 sepia
temp1 = va_arg(ap, int);
if (temp1 > maxSEPIAR)
err_code = 0x2002;
temp2 = va_arg(ap, int);
if (temp2 > maxSEPIAB)
err_code = 0x2003;
data_write(FLTSEP, (temp1 << 8) | temp2); // IDX_ADR : 0x13 SEPIAR = 32d, SEPIAB = -16d
temp1 = va_arg(ap, int);
if (temp1 > maxSEPRNG)
err_code = 0x2004;
data_write(SEPRNG, temp1); // IDX_ADR : 0x14
break;
case sEMBOSS:
data_write(CAMFLT, sEMBOSS); // IDX_ADR : 0x11 emboss
temp1 = data_read(FLTCOEF) & 0xff00;
temp2 = va_arg(ap, int);
if (temp2 > maxFLTEBS)
err_code = 0x2005;
data_write(FLTCOEF, temp1 | temp2); // IDX_ADR : 0x15
break;
case sEDGE1:
data_write(CAMFLT, sEDGE1); // IDX_ADR : 0x11 edge sampling1
temp1 = va_arg(ap, int);
if (temp1 > maxFLTTHD)
err_code = 0x2006;
data_write(FLTTHD, temp1); // IDX_ADR : 0x12 Threshold = 0x01
temp1 = data_read(FLTCOEF) & 0x00ff;
temp2 = (va_arg(ap, int));
if (temp2 > maxFLTEDG1)
err_code = 0x2007;
data_write(FLTCOEF, temp1 | (temp2 << 8)); // IDX_ADR : 0x15
break;
case sEDGE2:
data_write(CAMFLT, sEDGE2); // IDX_ADR : 0x11 edge sampling2
temp1 = va_arg(ap, int);
if (temp1 > maxFLTEDG2)
err_code = 0x2008;
temp2 = va_arg(ap, int);
if (temp2 > maxEDG2OFS)
err_code = 0x2009;
data_write(FLTEDG2, temp1 << 8 | temp2); // IDX_ADR : 0x16
break;
case sNEGA:
data_write(CAMFLT, sNEGA); // IDX_ADR : 0x11 negative
break;
case sCAMYD:
temp1 = va_arg(ap, int);
if (temp1 > maxCAMYD)
err_code = 0x200a;
data_write(CAMYD, temp1);
break;
default:
err_code = 0x2000;
data_write(CAMFLT, sDISABLE); // IDX_ADR : 0x11 no processing
break;
}
va_end(ap);
if (reg_data == sNVIEWER)
mode_change(sNVIEWER);
if (err_code)
DEBUG_WRITE((0, 0, "%x", err_code));
return (err_code);
}
//-----------------------------------------------------------------------------
// I2C Dispose
//-----------------------------------------------------------------------------
int aDSC_i2c_set(const UINT16 seri_devtype, const UINT16 seri_devadr,
const UINT16 seri_2ndadr, const UINT16 seri_dat,
const UINT16 peri_sdc, const UINT16 seri_rw)
{
int busy_flag = 1;
int err_code = 0;
if (seri_devadr > maxSERI_DEVADR)
err_code = 0x2100;
if (seri_2ndadr > maxSERI_2NDADR)
err_code = 0x2101;
if (seri_dat > maxSERI_DAT)
err_code = 0x2102;
if (peri_sdc > maxPERI_SDC)
err_code = 0x2103;
if (err_code)
{
DEBUG_WRITE((0, 0, "%x", err_code));
return err_code;
}
data_write(SERIDEVADR,
sSERI_HZ | sSERI_PULL_ON | seri_devtype | sSERI_ENABLE |
seri_devadr);
data_write(SERI2NDADR, seri_2ndadr);
data_write(SERICNT, (seri_dat << 8) | (peri_sdc << 4) | seri_rw);
bit_write(SERICNT, bSERI_ST, HIGH); //serial transfer start
while (busy_flag)
{ // SERI_BSY偺億乕儕儞僌
busy_flag = bit_read(SERICNT, bSERI_BSY);
}
wait(1); //Tbuf
#if 0
if (bit_read(SERICNT, bACK_STAT))
err_code = 0x2104;
if (err_code)
{
DEBUG_WRITE((0, 0, "%x", err_code));
return err_code;
}
#endif
return 0;
}
//-----------------------------------------------------------------------------
// frame memory write(rgb565 data)
//-----------------------------------------------------------------------------
int aDSC_fmemory_write_rgb565(const UINT16 * rgb_data, const UINT16 st_x,
const UINT16 st_y)
{
int cnt, write_count;
UINT16 xsize, ysize;
int err_code = 0;
aDSC_Quit_Preview();
xsize = *rgb_data;
rgb_data++;
ysize = *rgb_data;
rgb_data++;
bit_write(MEMCNT, bINCMTH | bADRINC, LOW); //rectangle increment丄auto increment off
err_code =
mem_adrst_ed_set(st_x, st_y, st_x + xsize - 1, st_y + ysize - 1);
if (err_code)
err_code |= 0x3000;
bit_write(MEMCNT, bINCMTH | bADRINC, HIGH); //rectangle increment丄auto increment on
write_count = xsize * ysize;
mem_acs_write_st(MEMACS_RGB);
for (cnt = 0; cnt < write_count; cnt++)
{
reg_write(REG, *rgb_data); //RGB Data are written
rgb_data++;
}
bit_write(MEMCNT, bINCMTH | bADRINC, LOW); //rectangle increment丄auto increment on
if (err_code)
DEBUG_WRITE((0, 0, "%x", err_code));
return (err_code);
}
int aDSC_ExOvlMemory_write_rgb565(const UINT16 * rgb_data)
{
int cnt, write_count;
UINT16 xsize, ysize;
int err_code = 0;
// aDSC_Quit_Preview();
xsize = *rgb_data;
rgb_data++;
ysize = *rgb_data;
rgb_data++;
data_write(MEM_ADR_OVL_ST,0x0000);
data_write(MEM_ADR_OVL_ED,((xsize-1)<<8)|(ysize-1));
bit_write(MEMCNT, bINCMTH | bADRINC, HIGH); //rectangle increment丄auto increment on
write_count = xsize * ysize;
mem_acs_write_st(MEMACS_OVL);
for (cnt = 0; cnt < write_count; cnt++)
{
reg_write(REG, *rgb_data); //RGB Data are written
rgb_data++;
}
bit_write(MEMCNT, bINCMTH | bADRINC, LOW); //rectangle increment丄auto increment off
return err_code;
}
int aDSC_fmemory_write_rgb565_2(const UINT16 * rgb_data, const UINT16 st_x,
const UINT16 st_y, const UINT16 xsize, const UINT16 ysize )
{
int cnt, write_count;
int err_code = 0;
aDSC_Quit_Preview();
bit_write(MEMCNT, bINCMTH | bADRINC, LOW); //rectangle increment丄auto increment off
err_code =
mem_adrst_ed_set(st_x, st_y, st_x + xsize - 1, st_y + ysize - 1);
if (err_code)
err_code |= 0x3000;
bit_write(MEMCNT, bINCMTH | bADRINC, HIGH); //rectangle increment丄auto increment on
write_count = xsize * ysize;
mem_acs_write_st(MEMACS_RGB);
for (cnt = 0; cnt < write_count; cnt++)
{
reg_write(REG, *rgb_data); //RGB Data are written
rgb_data++;
}
bit_write(MEMCNT, bINCMTH | bADRINC, LOW); //rectangle increment丄auto increment on
if (err_code)
DEBUG_WRITE((0, 0, "%x", err_code));
return (err_code);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -