void Sysdelay(unsigned int milliSec) { #ifdef DELAY_USE_INTERRUPTS unsigned int countVal = TIMER_OVERFLOW - (milliSec * TIMER_1MS_COUNT); DMTimerCounterSet(SOC_DMTIMER_7_REGS, countVal); flagIsr = FALSE; /* Enable the DMTimer interrupts */ DMTimerIntEnable(SOC_DMTIMER_7_REGS, DMTIMER_INT_OVF_EN_FLAG); /* Start the DMTimer */ DMTimerEnable(SOC_DMTIMER_7_REGS); while(FALSE == flagIsr) ; /* Disable the DMTimer interrupts */ DMTimerIntDisable(SOC_DMTIMER_7_REGS, DMTIMER_INT_OVF_EN_FLAG); #else while(milliSec != 0) { DMTimerCounterSet(SOC_DMTIMER_7_REGS, 0); DMTimerEnable(SOC_DMTIMER_7_REGS); while(DMTimerCounterGet(SOC_DMTIMER_7_REGS) < TIMER_1MS_COUNT); DMTimerDisable(SOC_DMTIMER_7_REGS); milliSec--; } #endif }
/* ** DMTimer interrupt service routine. This will send a character to serial ** console. */ static void DMTimerIsr(void) { /* Disable the DMTimer interrupts */ DMTimerIntDisable(SOC_DMTIMER_2_REGS, DMTIMER_INT_OVF_EN_FLAG); /* Clear the status of the interrupt flags */ DMTimerIntStatusClear(SOC_DMTIMER_2_REGS, DMTIMER_INT_OVF_IT_FLAG); flagIsr = 1; /* Enable the DMTimer interrupts */ DMTimerIntEnable(SOC_DMTIMER_2_REGS, DMTIMER_INT_OVF_EN_FLAG); }
/****************************************************************************** ** FUNCTION DEFINITIONS *******************************************************************************/ int main(void) { /* This function will enable clocks for the DMTimer2 instance */ DMTimer2ModuleClkConfig(); /* Initialize the UART console */ ConsoleUtilsInit(); /* Select the console type based on compile time check */ ConsoleUtilsSetType(CONSOLE_UART); /* Enable IRQ in CPSR */ IntMasterIRQEnable(); /* Register DMTimer2 interrupts on to AINTC */ DMTimerAintcConfigure(); /* Perform the necessary configurations for DMTimer */ DMTimerSetUp(); /* Enable the DMTimer interrupts */ DMTimerIntEnable(SOC_DMTIMER_2_REGS, DMTIMER_INT_OVF_EN_FLAG); ConsoleUtilsPrintf("Tencounter: "); /* Start the DMTimer */ DMTimerEnable(SOC_DMTIMER_2_REGS); while(cntValue) { if(flagIsr == 1) { ConsoleUtilsPrintf("\b%d",(cntValue - 1)); cntValue--; flagIsr = 0; } } /* Stop the DMTimer */ DMTimerDisable(SOC_DMTIMER_2_REGS); PRINT_STATUS(S_PASS); /* Halt the program */ while(1); }
/** * /brief This function starts the timer. * * /milliSec Maximum value = TIMER_OVERFLOW/TIMER_1MS_COUNT. * * /NOTE SysDelay functionality cannot be used till SysStopTimer is called. */ void SysStartTimer(unsigned int milliSec) { #ifdef DELAY_USE_INTERRUPTS unsigned int countVal = TIMER_OVERFLOW - (milliSec * TIMER_1MS_COUNT); DMTimerCounterSet(SOC_DMTIMER_7_REGS, countVal); flagIsr = FALSE; /* Enable the DMTimer interrupts */ DMTimerIntEnable(SOC_DMTIMER_7_REGS, DMTIMER_INT_OVF_EN_FLAG); /* Start the DMTimer */ DMTimerEnable(SOC_DMTIMER_7_REGS); #else DMTimerCounterSet(SOC_DMTIMER_7_REGS, 0); DMTimerEnable(SOC_DMTIMER_7_REGS); flagIsr = milliSec; #endif }
/* ** Configure and start the Timer */ static void TimerSetupAndEnable(void) { /* This function will enable clocks for the DMTimer2 instance */ DMTimer2ModuleClkConfig(); /* Load the counter with the initial count value */ DMTimerCounterSet(TIMER_INST_BASE, TIMER_INITIAL_COUNT); /* Load the load register with the reload count value */ DMTimerReloadSet(TIMER_INST_BASE, TIMER_RLD_COUNT); /* Configure the DMTimer for Auto-reload and compare mode */ DMTimerModeConfigure(TIMER_INST_BASE, DMTIMER_AUTORLD_NOCMP_ENABLE); /* Enable the DMTimer interrupts */ DMTimerIntEnable(TIMER_INST_BASE, DMTIMER_INT_OVF_EN_FLAG); /* Start the DMTimer */ DMTimerEnable(TIMER_INST_BASE); IntSystemEnable(TIMER_INT_NUM); }
/* ** Initializes the touch screen */ void InitTouchScreen(void) { unsigned int i; /* TSC clock config */ TSCADCModuleClkConfig(); /* TSC pin mux */ TSCADCPinMuxSetUp(); /* Timer3 Clock config */ DMTimer3ModuleClkConfig(); /* configures ADC to 3Mhz */ TSCADCConfigureAFEClock(SOC_ADC_TSC_0_REGS, 24000000, 3000000); /* Enable Transistor bias */ TSCADCTSTransistorConfig(SOC_ADC_TSC_0_REGS, TSCADC_TRANSISTOR_ENABLE); /* Map hardware event to Pen Touch IRQ */ TSCADCHWEventMapSet(SOC_ADC_TSC_0_REGS, TSCADC_PEN_TOUCH); /* Set 4 Wire or 5 wire touch screen mode */ TSCADCTSModeConfig(SOC_ADC_TSC_0_REGS, TSCADC_FOUR_WIRE_MODE); TSCADCStepIDTagConfig(SOC_ADC_TSC_0_REGS, 1); /* Disable Write Protection of Step Configuration regs*/ TSCADCStepConfigProtectionDisable(SOC_ADC_TSC_0_REGS); /* Configure ADC to Single ended operation mode */ TSCADCIdleStepOperationModeControl(SOC_ADC_TSC_0_REGS, TSCADC_SINGLE_ENDED_OPER_MODE); /* Configure reference volatage and input to idlestep */ TSCADCIdleStepConfig(SOC_ADC_TSC_0_REGS, TSCADC_NEGATIVE_REF_VSSA, TSCADC_POSITIVE_INP_CHANNEL1, TSCADC_NEGATIVE_INP_ADCREFM, TSCADC_POSITIVE_REF_VDDA); /* Configure the Analog Supply to Touch screen */ TSCADCIdleStepAnalogSupplyConfig(SOC_ADC_TSC_0_REGS, TSCADC_XPPSW_PIN_OFF, TSCADC_XNPSW_PIN_OFF, TSCADC_YPPSW_PIN_OFF); /* **Configure the Analong Ground of Touch screen. */ TSCADCIdleStepAnalogGroundConfig(SOC_ADC_TSC_0_REGS, TSCADC_XNNSW_PIN_OFF, TSCADC_YPNSW_PIN_ON, TSCADC_YNNSW_PIN_ON, TSCADC_WPNSW_PIN_OFF); /* Configure ADC to Single ended operation mode */ TSCADCChargeStepOperationModeControl(SOC_ADC_TSC_0_REGS, TSCADC_SINGLE_ENDED_OPER_MODE); /* Configure reference volatage and input to charge step*/ TSCADCChargeStepConfig(SOC_ADC_TSC_0_REGS, TSCADC_NEGATIVE_REF_XNUR, TSCADC_POSITIVE_INP_CHANNEL2, TSCADC_NEGATIVE_INP_CHANNEL2, TSCADC_POSITIVE_REF_XPUL); /* Configure the Analog Supply to Touch screen */ TSCADCChargeStepAnalogSupplyConfig(SOC_ADC_TSC_0_REGS, TSCADC_XPPSW_PIN_ON, TSCADC_XNPSW_PIN_OFF, TSCADC_XPPSW_PIN_OFF); /* Configure the Analong Ground to Touch screen */ TSCADCChargeStepAnalogGroundConfig(SOC_ADC_TSC_0_REGS, TSCADC_XNNSW_PIN_OFF, TSCADC_YPNSW_PIN_OFF, TSCADC_YNNSW_PIN_ON, TSCADC_WPNSW_PIN_OFF); TSCADCTSChargeStepOpenDelayConfig(SOC_ADC_TSC_0_REGS, 0x200); for(i = 0; i < SAMPLES; i++) { StepConfigX(i); TSCADCTSStepOpenDelayConfig(SOC_ADC_TSC_0_REGS, i, 0x98); } for(i = SAMPLES; i < (2 * SAMPLES); i++) { StepConfigY(i); TSCADCTSStepOpenDelayConfig(SOC_ADC_TSC_0_REGS, i, 0x98); } /* Configure FIFO1 threshold value */ TSCADCFIFOIRQThresholdLevelConfig(SOC_ADC_TSC_0_REGS, TSCADC_FIFO_1, 5); IsTSPress = 0; touchRelease = 0; /* timer setup for touch screen */ IntPrioritySet(SYS_INT_TINT3, 0, AINTC_HOSTINT_ROUTE_IRQ); IntSystemEnable(SYS_INT_TINT3); IntRegister(SYS_INT_TINT3, Timer3Isr); DMTimerModeConfigure(SOC_DMTIMER_3_REGS, DMTIMER_ONESHOT_CMP_ENABLE); DMTimerReloadSet(SOC_DMTIMER_3_REGS, 0xffffffff); DMTimerCompareSet(SOC_DMTIMER_3_REGS, 0xfffff); DMTimerIntStatusClear(SOC_DMTIMER_3_REGS, DMTIMER_INT_MAT_EN_FLAG); /* Enable the DMTimer interrupts */ DMTimerIntEnable(SOC_DMTIMER_3_REGS, DMTIMER_INT_MAT_EN_FLAG); /* Interrupt register */ TouchIntEnable(); /* enable touch */ TouchEnable(); }
static inline void rmpi_timer_interrupt_on (void) { DMTimerIntEnable(SOC_DMTIMER_4_REGS, DMTIMER_INT_OVF_EN_FLAG); }
/* ** Enables the Timer6 Interrupts */ void Timer6IntEnable(void) { /* Enable the DMTimer interrupts */ DMTimerIntEnable(SOC_DMTIMER_6_REGS, DMTIMER_INT_OVF_EN_FLAG); }