Exemplo n.º 1
0
static VOID
TSP_PowerOn(VOID)
{
    TSPMSG((_T("[TSP] ++TSP_PowerOn()\r\n")));

    g_pADCReg->ADCDLY = ADC_DELAY(TSP_ADC_DELAY);

    g_pADCReg->ADCCON = RESSEL_12BIT | PRESCALER_EN | PRESCALER_VAL(TSP_ADC_PRESCALER) | STDBM_NORMAL;
    
    g_pADCReg->ADCTSC = ADCTSC_WAIT_PENDOWN;
    g_pADCReg->ADCCLRINT = CLEAR_ADC_INT;
    g_pADCReg->ADCCLRWK = CLEAR_ADCWK_INT;

    g_SampleTick_Low = TSP_TIMER_CNT_LOW;
    g_SampleTick_High = TSP_TIMER_CNT_HIGH;

    // Set Divider MUX for Timer3
    SET_TIMER3_DIVIDER_MUX(g_pPWMReg, TSP_TIMER_DIVIDER);    

    g_pPWMReg->TCNTB3  = g_SampleTick_Low;

    // timer3 interrupt disable
    g_pPWMReg->TINT_CSTAT = TINT_CSTAT_INTMASK(g_pPWMReg->TINT_CSTAT) & ~TIMER3_INTERRUPT_ENABLE;

    // timer3 interrupt status clear
    g_pPWMReg->TINT_CSTAT = TINT_CSTAT_INTMASK(g_pPWMReg->TINT_CSTAT) | TIMER3_PENDING_CLEAR;

    TSPMSG((_T("[TSP] --TSP_PowerOn()\r\n")));
}
Exemplo n.º 2
0
static void OEMInitializeSystemTimer(UINT32 msecPerSysTick, UINT32 countsPerMSec, UINT32 countsMargin)
{
	UINT32 countsPerSysTick;
	volatile S3C6400_PWM_REG *pPWMReg;

	// Validate Input parameters
	countsPerSysTick = msecPerSysTick * countsPerMSec;

	// Initialize S3C6400 Timer
	pPWMReg = (S3C6400_PWM_REG*)OALPAtoUA(S3C6400_BASE_REG_PA_PWM);

	// Set Prescaler 1 (Timer2,3,4)
	pPWMReg->TCFG0 = (pPWMReg->TCFG0 & ~(0xff<<8)) | ((SYS_TIMER_PRESCALER-1)<<8);

	// Set Divider MUX for Timer4
	switch(SYS_TIMER_DIVIDER)
	{
	case 1:
		pPWMReg->TCFG1 = (pPWMReg->TCFG1 & ~(0xf<<16)) | (0<<16);
		break;
	case 2:
		pPWMReg->TCFG1 = (pPWMReg->TCFG1 & ~(0xf<<16)) | (1<<16);
		break;
	case 4:
		pPWMReg->TCFG1 = (pPWMReg->TCFG1 & ~(0xf<<16)) | (2<<16);
		break;
	case 8:
		pPWMReg->TCFG1 = (pPWMReg->TCFG1 & ~(0xf<<16)) | (3<<16);
		break;
	case 16:
		pPWMReg->TCFG1 = (pPWMReg->TCFG1 & ~(0xf<<16)) | (4<<16);
		break;
	default:
		pPWMReg->TCFG1 = (pPWMReg->TCFG1 & ~(0xf<<16)) | (0<<16);
		break;
	}

	// Set Timer4 Count Buffer Register
	pPWMReg->TCNTB4 = countsPerSysTick;

	// Timer4 Clear Interrupt Pending
	//pPWMReg->TINT_CSTAT |= (1<<9);	// Do not use OR/AND operation on TINTC_CSTAT
	pPWMReg->TINT_CSTAT = TINT_CSTAT_INTMASK(pPWMReg->TINT_CSTAT) | TIMER4_PENDING_CLEAR;

	// Timer4 Interrupt Enable
	//pPWMReg->TINT_CSTAT |= (1<<4);	// Do not use OR/AND operation on TINTC_CSTAT
	pPWMReg->TINT_CSTAT = TINT_CSTAT_INTMASK(pPWMReg->TINT_CSTAT) | TIMER4_INTERRUPT_ENABLE;

	// Start Timer4 in Auto Reload mode (Fixed Tick!!!)
	pPWMReg->TCON &= ~(0x7<<20);

	pPWMReg->TCON |= (1<<21);			// Update TCNTB4
	pPWMReg->TCON &= ~(1<<21);

	pPWMReg->TCON |= (1<<22)|(1<<20);	// Auto-reload Mode, Timer4 Start
}
Exemplo n.º 3
0
static VOID
TSP_SampleStop(VOID)
{
    STOP_TIMER3(g_pPWMReg);

    // timer3 interrupt disable, Do not use OR/AND operation on TINTC_CSTAT directly
    g_pPWMReg->TINT_CSTAT = TINT_CSTAT_INTMASK(g_pPWMReg->TINT_CSTAT) & ~TIMER3_INTERRUPT_ENABLE;

    // timer3 interrupt status clear, Do not use OR/AND operation on TINTC_CSTAT directly
    g_pPWMReg->TINT_CSTAT = TINT_CSTAT_INTMASK(g_pPWMReg->TINT_CSTAT) | TIMER3_PENDING_CLEAR;
}
Exemplo n.º 4
0
static VOID
TSP_PowerOn(VOID)
{
	TSPMSG((_T("[TSP] ++TSP_PowerOn()\r\n")));

	g_pADCReg->ADCDLY = ADC_DELAY(TSP_ADC_DELAY);
	g_pADCReg->ADCCON = PRESCALER_EN | PRESCALER_VAL(TSP_ADC_PRESCALER);
	g_pADCReg->ADCTSC = ADCTSC_WAIT_PENDOWN;
	g_pADCReg->ADCCLRINT = CLEAR_ADC_INT;
	g_pADCReg->ADCCLRWK = CLEAR_ADCWK_INT;

	g_SampleTick_Low = TSP_TIMER_CNT_LOW;
	g_SampleTick_High = TSP_TIMER_CNT_HIGH;

	// Set Divider MUX for Timer3
	switch(TSP_TIMER_DIVIDER)
	{
	case 1:
		g_pPWMReg->TCFG1 = (g_pPWMReg->TCFG1 & ~(0xf<<12)) | (0<<12);
		break;
	case 2:
		g_pPWMReg->TCFG1 = (g_pPWMReg->TCFG1 & ~(0xf<<12)) | (1<<12);
		break;
	case 4:
		g_pPWMReg->TCFG1 = (g_pPWMReg->TCFG1 & ~(0xf<<12)) | (2<<12);
		break;
	case 8:
		g_pPWMReg->TCFG1 = (g_pPWMReg->TCFG1 & ~(0xf<<12)) | (3<<12);
		break;
	case 16:
		g_pPWMReg->TCFG1 = (g_pPWMReg->TCFG1 & ~(0xf<<12)) | (4<<12);
		break;
	default:
		g_pPWMReg->TCFG1 = (g_pPWMReg->TCFG1 & ~(0xf<<12)) | (0<<12);
		break;
	}

	g_pPWMReg->TCNTB3  = g_SampleTick_Low;

	// timer3 interrupt disable
	//g_pPWMReg->TINT_CSTAT &= ~(1<<3);	// Do not use OR/AND operation on TINTC_CSTAT
	g_pPWMReg->TINT_CSTAT = TINT_CSTAT_INTMASK(g_pPWMReg->TINT_CSTAT) & ~TIMER3_INTERRUPT_ENABLE;

	// timer3 interrupt status clear
	//g_pPWMReg->TINT_CSTAT |= (1<<8);		// Do not use OR/AND operation on TINTC_CSTAT
	g_pPWMReg->TINT_CSTAT = TINT_CSTAT_INTMASK(g_pPWMReg->TINT_CSTAT) | TIMER3_PENDING_CLEAR;

	TSPMSG((_T("[TSP] --TSP_PowerOn()\r\n")));
}
Exemplo n.º 5
0
static VOID
TSP_SampleStart(VOID)
{
    // timer3 interrupt status clear, Do not use OR/AND operation on TINTC_CSTAT directly
    g_pPWMReg->TINT_CSTAT = TINT_CSTAT_INTMASK(g_pPWMReg->TINT_CSTAT) | TIMER3_PENDING_CLEAR;

    // timer3 interrupt enable, Do not use OR/AND operation on TINTC_CSTAT directly
    g_pPWMReg->TINT_CSTAT = TINT_CSTAT_INTMASK(g_pPWMReg->TINT_CSTAT) | TIMER3_INTERRUPT_ENABLE;

    STOP_TIMER3(g_pPWMReg);

    UPDATE_TCNTB3(g_pPWMReg);
    NOUPDATE_TCNTB3(g_pPWMReg);

    SET_TIMER3_AUTORELOAD(g_pPWMReg);
    START_TIMER3(g_pPWMReg);
}
Exemplo n.º 6
0
static VOID
TSP_SampleStop(VOID)
{
	//TSPMSG((_T("[TSP] ++TSP_SampleStop()\r\n")));

	g_pPWMReg->TCON &= ~(0xf<<16);		// Timer3 stop

	// timer3 interrupt disable
	//g_pPWMReg->TINT_CSTAT &= ~(1<<3);	// Do not use OR/AND operation on TINTC_CSTAT
	g_pPWMReg->TINT_CSTAT = TINT_CSTAT_INTMASK(g_pPWMReg->TINT_CSTAT) & ~TIMER3_INTERRUPT_ENABLE;

	// timer3 interrupt status clear
	//g_pPWMReg->TINT_CSTAT |= (1<<8);		// Do not use OR/AND operation on TINTC_CSTAT
	g_pPWMReg->TINT_CSTAT = TINT_CSTAT_INTMASK(g_pPWMReg->TINT_CSTAT) | TIMER3_PENDING_CLEAR;

	//TSPMSG((_T("[TSP] --TSP_SampleStop()\r\n")));
}
Exemplo n.º 7
0
static VOID
TSP_SampleStart(VOID)
{
	//TSPMSG((_T("[TSP] ++TSP_SampleStart()\r\n")));

	// timer3 interrupt status clear
	//g_pPWMReg->TINT_CSTAT |= (1<<8);		// Do not use OR/AND operation on TINTC_CSTAT
	g_pPWMReg->TINT_CSTAT = TINT_CSTAT_INTMASK(g_pPWMReg->TINT_CSTAT) | TIMER3_PENDING_CLEAR;

	// timer3 interrupt enable
	//g_pPWMReg->TINT_CSTAT |= (1<<3);		// Do not use OR/AND operation on TINTC_CSTAT
	g_pPWMReg->TINT_CSTAT = TINT_CSTAT_INTMASK(g_pPWMReg->TINT_CSTAT) | TIMER3_INTERRUPT_ENABLE;

	g_pPWMReg->TCON &= ~(0xf<<16);	// Timer3 Stop

	g_pPWMReg->TCON |= (1<<17);	// update TCNTB3
	g_pPWMReg->TCON &= ~(1<<17);

	g_pPWMReg->TCON |= ((1<<19)|(1<<16));	// AutoReload mode, Timer3 Start

	//TSPMSG((_T("[TSP] --TSP_SampleStart()\r\n")));
}
Exemplo n.º 8
0
VOID
DdsiTouchPanelGetPoint(TOUCH_PANEL_SAMPLE_FLAGS *pTipState, INT *pUncalX, INT *pUncalY)
{
	static int PrevX=0;
	static int PrevY=0;
	int TmpX = 0;
	int TmpY = 0;

	//TSPMSG((_T("[TSP] ++DdsiTouchPanelGetPoint()\r\n")));

	if (g_pVIC1Reg->VICRAWINTR & (1<<(PHYIRQ_PENDN-VIC1_BIT_OFFSET)))		// gIntrTouch Interrupt Case
	{
		//TSPMSG((_T("[TSP] gIntrTouch(PHYIRQ_PENDN) Case\r\n")));

		*pTipState = TouchSampleValidFlag;

		if ((g_pADCReg->ADCDAT0 & D_UPDOWN_UP)
			|| (g_pADCReg->ADCDAT1 & D_UPDOWN_UP))
		{
			//TSPMSG((_T("[TSP] Pen Up\r\n")));

			g_bTSP_DownFlag = FALSE;

			g_pADCReg->ADCTSC = ADCTSC_WAIT_PENDOWN;

			*pUncalX = PrevX;
			*pUncalY = PrevY;

			TSP_SampleStop();
		}
		else
		{
			//TSPMSG((_T("[TSP] Pen Down\r\n")));

			g_bTSP_DownFlag = TRUE;

			g_pADCReg->ADCTSC = ADCTSC_WAIT_PENUP;

			*pTipState |= TouchSampleIgnore;

			*pUncalX = PrevX;
			*pUncalY = PrevY;

			*pTipState |= TouchSampleDownFlag;

			TSP_SampleStart();
		}

		g_pADCReg->ADCCLRWK = CLEAR_ADCWK_INT;

		InterruptDone(gIntrTouch);		// Not handled in MDD
	}
	else// if (g_pVIC0Reg->VICRAWINTR & (1<<(PHYIRQ_TIMER3)))		// gIntrTouchTimer Interrupt Case
	{
		//TSPMSG((_T("[TSP] gIntrTouchChanged(PHYIRQ_TIMER3) Case\r\n")));

		// Check for Pen-Up case on the event of timer3 interrupt
		if ((g_pADCReg->ADCDAT0 & D_UPDOWN_UP)
			|| (g_pADCReg->ADCDAT1 & D_UPDOWN_UP))
		{
			//TSPMSG((_T("[TSP] Pen Up +\r\n")));

			g_bTSP_DownFlag = FALSE;

			g_pADCReg->ADCTSC = ADCTSC_WAIT_PENDOWN;

			*pUncalX = PrevX;
			*pUncalY = PrevY;

			*pTipState = TouchSampleValidFlag;

			TSP_SampleStop();
		}
		else if (g_bTSP_DownFlag)
		{
			if (TSP_GetXY(&TmpX, &TmpY) == TRUE)
			{
				//TSP_TransXY(&TmpX, &TmpY);

				if(Touch_Pen_Filtering(&TmpX, &TmpY))
				{
					*pTipState = TouchSampleValidFlag | TouchSampleDownFlag;
					*pTipState &= ~TouchSampleIgnore;
				}
				else		// Invalid touch pen
				{
					*pTipState = TouchSampleValidFlag;
					*pTipState |= TouchSampleIgnore;
				}

				*pUncalX = PrevX = TmpX;
				*pUncalY = PrevY = TmpY;

				g_pADCReg->ADCTSC = ADCTSC_WAIT_PENUP;

				//TSPMSG((_T("[TSP] UncalX = %d, UncalY = %d\r\n"), *pUncalX,*pUncalY));
			}
			else
			{
				*pTipState = TouchSampleIgnore;
			}
		}
		else
		{
			TSPERR((_T("[TSP] Unknown State\r\n")));

			*pTipState = TouchSampleIgnore;
			TSP_SampleStop();
		}

		// timer3 interrupt status clear
		//g_pPWMReg->TINT_CSTAT |= (1<<8);		// Do not use OR/AND operation on TINTC_CSTAT
		g_pPWMReg->TINT_CSTAT = TINT_CSTAT_INTMASK(g_pPWMReg->TINT_CSTAT) | TIMER3_PENDING_CLEAR;

		InterruptDone(gIntrTouchChanged);		// Not Handled in MDD
	}

	//TSPMSG((_T("[TSP] --DdsiTouchPanelGetPoint()\r\n")));
}