Tool/software: Code Composer Studio
Hi,
I'm trying to use the Hibernate RTC module to keep track of time, but when I set the interrupt time, instead of interrupting every 60 seconds, it seems that is interrupting many times faster (really, MANY times faster). Also, after setting up RTC I cannot exit the program by pressing enter, it "resets" the program everytime I do that. I've tried to copy similar examples from the internet, but it always gives me the same behaviour.
What might cause this? I'm configuring interrupts the wrong way?
/* * adc.c * * Created on: 24 de jan de 2017 * Author: Helder Sales */ #include "adc.h" #include "../wdog/wdog.h" #include "../../includes.h" #include "../../../command/read/read.h" //To verify char unsigned char ch; //Number of input pins and type uint8_t numarg, Inputs, pinPE, pinPK; //Time uint8_t minute, hour; inline unsigned char ADC_InitADCPins(char *g_cInput) { //argv static char *argv[8 + 1]; char *pcChar; uint_fast8_t argc = 0; bool bFindArg = true; pcChar = g_cInput; while(*pcChar) { if(*pcChar == ' ') { *pcChar = 0; bFindArg = true; } else if(bFindArg) { argv[argc] = pcChar; argc++; bFindArg = false; } pcChar++; } char *num = argv[1]; unsigned int aux; uint8_t condition = sscanf(num, "%u%c", &aux, &ch); pinPE = strcmp(argv[0], "PE"); pinPK = strcmp(argv[0], "PK"); numarg = argc; Inputs = aux; if((pinPE != 0 && pinPK != 0) || condition != 1) { Inputs = 0; return(Inputs); } //Enable pin J ROM_SysCtlPeripheralDisable(SYSCTL_PERIPH_GPIOJ); ROM_SysCtlPeripheralReset(SYSCTL_PERIPH_GPIOJ); ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOJ); while(!ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOJ)); //Configures pin PJ0 as input ROM_GPIOPinTypeGPIOInput(GPIO_PORTJ_BASE, GPIO_PIN_0); //General config (pull-up) GPIOPadConfigSet(GPIO_PORTJ_BASE, GPIO_PIN_0, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU); if(pinPE == 0) { //Enable pin E ROM_SysCtlPeripheralDisable(SYSCTL_PERIPH_GPIOE); ROM_SysCtlPeripheralReset(SYSCTL_PERIPH_GPIOE); ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE); while(!ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOE)); if(Inputs == 1) //Enable pin PE0 as ADC ROM_GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_0); if(Inputs == 2) //Enable pin PE0/PE1 as ADC ROM_GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1); if(Inputs == 3) //Enable pin PE0/PE1/PE2 as ADC ROM_GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2); if(Inputs == 4) //Enable pin PE0/PE1/PE2/PE3 as ADC ROM_GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3); } else if(pinPK == 0) { //Enable pin K ROM_SysCtlPeripheralDisable(SYSCTL_PERIPH_GPIOK); ROM_SysCtlPeripheralReset(SYSCTL_PERIPH_GPIOK); ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOK); while(!ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOK)); if(Inputs == 1) //Enable pin PK0 as ADC ROM_GPIOPinTypeADC(GPIO_PORTK_BASE, GPIO_PIN_0); if(Inputs == 2) //Enable pin PK0/PK1 as ADC ROM_GPIOPinTypeADC(GPIO_PORTK_BASE, GPIO_PIN_0 | GPIO_PIN_1); if(Inputs == 3) //Enable pin PK0/PK1/PK2 as ADC ROM_GPIOPinTypeADC(GPIO_PORTK_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2); if(Inputs == 4) //Enable pin PK0/PK1/PK2/PK3 as ADC ROM_GPIOPinTypeADC(GPIO_PORTK_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3); } return(Inputs); } inline void ADC_InitADC(unsigned char Inputs, unsigned char oversamplevalue) { //Enable ADC0 ROM_SysCtlPeripheralDisable(SYSCTL_PERIPH_ADC0); ROM_SysCtlPeripheralReset(SYSCTL_PERIPH_ADC0); ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0); while(!ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_ADC0)); //Enable ADC1 ROM_SysCtlPeripheralDisable(SYSCTL_PERIPH_ADC1); ROM_SysCtlPeripheralReset(SYSCTL_PERIPH_ADC1); ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC1); while(!ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_ADC1)); //Configures ADC0 sequence 2, trigger by the processor, priority 0 (highest) ROM_ADCSequenceConfigure(ADC0_BASE, 2, ADC_TRIGGER_PROCESSOR, 0); //Configures ADC1 sequence 3, trigger by the processor, priority 1 ROM_ADCSequenceConfigure(ADC1_BASE, 3, ADC_TRIGGER_PROCESSOR, 1); //Step 0 sequence 2, MCU's temp sampling, sequence (0 to the highest), configures interrupt after sampling, tells ADC1 this is the last conversion ROM_ADCSequenceStepConfigure(ADC1_BASE, 3, 0, ADC_CTL_TS | ADC_CTL_IE | ADC_CTL_END); if(pinPE == 0) { if(Inputs == 1) { //Step 0 sequence 2, sampling of channel 0, sequence (0 to the highest), configures interrupt after sampling, tells ADC that CH19 is the last conversion //(to know more about channels, see datasheet pg. 1056) ROM_ADCSequenceStepConfigure(ADC0_BASE, 2, 0, ADC_CTL_CH3 | ADC_CTL_IE | ADC_CTL_END); } else if(Inputs == 2) { //Step 0 sequence 2, sampling of channel 0/1, sequence (0 to the highest), configures interrupt after sampling, tells ADC that CH19 is the last conversion ROM_ADCSequenceStepConfigure(ADC0_BASE, 2, 0, ADC_CTL_CH3); ROM_ADCSequenceStepConfigure(ADC0_BASE, 2, 1, ADC_CTL_CH2 | ADC_CTL_IE | ADC_CTL_END); } else if(Inputs == 3) { //Step 0 sequence 2, sampling of channel 0/1/2, sequence (0 to the highest), configures interrupt after sampling, tells ADC that CH19 is the last conversion ROM_ADCSequenceStepConfigure(ADC0_BASE, 2, 0, ADC_CTL_CH3); ROM_ADCSequenceStepConfigure(ADC0_BASE, 2, 1, ADC_CTL_CH2); ROM_ADCSequenceStepConfigure(ADC0_BASE, 2, 2, ADC_CTL_CH1 | ADC_CTL_IE | ADC_CTL_END); } else if(Inputs == 4) { //Step 0 sequence 2, sampling of channel 0/1/2/3, sequence (0 to the highest), configures interrupt after sampling, tells ADC that CH19 is the last conversion ROM_ADCSequenceStepConfigure(ADC0_BASE, 2, 0, ADC_CTL_CH3); ROM_ADCSequenceStepConfigure(ADC0_BASE, 2, 1, ADC_CTL_CH2); ROM_ADCSequenceStepConfigure(ADC0_BASE, 2, 2, ADC_CTL_CH1); ROM_ADCSequenceStepConfigure(ADC0_BASE, 2, 3, ADC_CTL_CH0 | ADC_CTL_IE | ADC_CTL_END); } } else if(pinPK == 0) { if(Inputs == 1) { //Step 0 sequence 2, sampling of channel 16, sequence (0 to the highest), configures interrupt after sampling, tells ADC that CH19 is the last conversion ROM_ADCSequenceStepConfigure(ADC0_BASE, 2, 0, ADC_CTL_CH16 | ADC_CTL_IE | ADC_CTL_END); } else if(Inputs == 2) { //Step 0 sequence 2, sampling of channel 16/17, sequence (0 to the highest), configures interrupt after sampling, tells ADC that CH19 is the last conversion ROM_ADCSequenceStepConfigure(ADC0_BASE, 2, 0, ADC_CTL_CH16); ROM_ADCSequenceStepConfigure(ADC0_BASE, 2, 1, ADC_CTL_CH17 | ADC_CTL_IE | ADC_CTL_END); } else if(Inputs == 3) { //Step 0 sequence 2, sampling of channel 16/17/18, sequence (0 to the highest), configures interrupt after sampling, tells ADC that CH19 is the last conversion ROM_ADCSequenceStepConfigure(ADC0_BASE, 2, 0, ADC_CTL_CH16); ROM_ADCSequenceStepConfigure(ADC0_BASE, 2, 1, ADC_CTL_CH17); ROM_ADCSequenceStepConfigure(ADC0_BASE, 2, 2, ADC_CTL_CH18 | ADC_CTL_IE | ADC_CTL_END); } else if(Inputs == 4) { //Step 0 sequence 2, sampling of channel 16/17/18/19, sequence (0 to the highest), configures interrupt after sampling, tells ADC that CH19 is the last conversion ROM_ADCSequenceStepConfigure(ADC0_BASE, 2, 0, ADC_CTL_CH16); ROM_ADCSequenceStepConfigure(ADC0_BASE, 2, 1, ADC_CTL_CH17); ROM_ADCSequenceStepConfigure(ADC0_BASE, 2, 2, ADC_CTL_CH18); ROM_ADCSequenceStepConfigure(ADC0_BASE, 2, 3, ADC_CTL_CH19 | ADC_CTL_IE | ADC_CTL_END); } } //Configures the ADC to 2MSPS (PLL/15 = 32MHz, Sampling rate full) ADCClockConfigSet(ADC0_BASE, ADC_CLOCK_SRC_PLL | ADC_CLOCK_RATE_FULL, 15); //Configures the ADC to 125KSPS (PLL/30 = 16MHz, Sampling rate 1/8th) ADCClockConfigSet(ADC1_BASE, ADC_CLOCK_SRC_PLL | ADC_CLOCK_RATE_EIGHTH, 30); //Oversampling (mean of samples, effective speed = (MSPS)*(oversample value)) ROM_ADCHardwareOversampleConfigure(ADC0_BASE, oversamplevalue); ROM_ADCHardwareOversampleConfigure(ADC1_BASE, 64); //habilita ADC0 sequence 2 ROM_ADCSequenceEnable(ADC0_BASE, 2); //habilita ADC1 sequence 3 ROM_ADCSequenceEnable(ADC1_BASE, 3); } inline void ADC_InitHibernateRTC(void) { //Enable Hibernation Module ROM_SysCtlPeripheralDisable(SYSCTL_PERIPH_HIBERNATE); ROM_SysCtlPeripheralReset(SYSCTL_PERIPH_HIBERNATE); ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_HIBERNATE); while(!ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_HIBERNATE)); ROM_HibernateEnableExpClk(120000000); ROM_HibernateClockConfig(HIBERNATE_OSC_HIGHDRIVE); ROM_HibernateRTCSet(0); ROM_HibernateRTCMatchSet(0, 60); ROM_HibernateIntEnable(HIBERNATE_INT_RTC_MATCH_0); HibernateIntRegister(HibernateRTCIntHandler); } inline void Init_Timer1(unsigned int freq) { //Enable Timer 1 ROM_SysCtlPeripheralDisable(SYSCTL_PERIPH_TIMER1); ROM_SysCtlPeripheralReset(SYSCTL_PERIPH_TIMER1); ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER1); while(!ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_TIMER1)); //Timer 1 clock = PIOSC ROM_TimerClockSourceSet(TIMER1_BASE, TIMER_CLOCK_PIOSC); ROM_TimerConfigure(TIMER1_BASE, TIMER_CFG_PERIODIC); uint32_t uiPeriod = 16000000/freq; ROM_TimerLoadSet(TIMER1_BASE, TIMER_A, uiPeriod -1); ROM_IntPrioritySet(INT_TIMER1A, 1); ROM_IntEnable(INT_TIMER1A); ROM_TimerIntEnable(TIMER1_BASE, TIMER_TIMA_TIMEOUT); ROM_TimerEnable(TIMER1_BASE, TIMER_A); } void Timer1IntHandler(void) { ROM_TimerIntClear(TIMER1_BASE, TIMER_TIMA_TIMEOUT); //Array with the length of the FIFO used (ver datasheet pag. 1056) uint32_t ADC0Values[4]; uint32_t ADC1Values[1]; //Convert ADC value to temp uint8_t TempValueC; //Convert ADC0Values to voltage uint16_t Value1, Value2, Value3, Value4; static uint16_t Value1max = 0; static uint16_t Value2max = 0; static uint16_t Value3max = 0; static uint16_t Value4max = 0; static uint16_t Value1min = 4095*0.8058608059; static uint16_t Value2min = 4095*0.8058608059; static uint16_t Value3min = 4095*0.8058608059; static uint16_t Value4min = 4095*0.8058608059; //Clears ADC interrupt status ROM_ADCIntClear(ADC0_BASE, 2); ROM_ADCIntClear(ADC1_BASE, 3); //Enable the triggers for the conversion ROM_ADCProcessorTrigger(ADC0_BASE, 2); ROM_ADCProcessorTrigger(ADC1_BASE, 3); //Waits the conversion to be completed while(!ROM_ADCIntStatus(ADC0_BASE, 2, false) || !ROM_ADCIntStatus(ADC1_BASE, 3, false)); //Reads the values obtained by the ADC ROM_ADCSequenceDataGet(ADC0_BASE, 2, ADC0Values); ROM_ADCSequenceDataGet(ADC1_BASE, 3, ADC1Values); //Converts ADC values to temperature TempValueC = (uint8_t)(147.5 - ((75.0 * 3.3 * (float)ADC1Values[0])) / 4096.0); if(Inputs == 4) { //Converts ADC values to voltage Value1 = ADC0Values[0]*0.8058608059; Value2 = ADC0Values[1]*0.8058608059; Value3 = ADC0Values[2]*0.8058608059; Value4 = ADC0Values[3]*0.8058608059; if(Value1max < Value1) Value1max = Value1; if(Value2max < Value2) Value2max = Value2; if(Value3max < Value3) Value3max = Value3; if(Value4max < Value4) Value4max = Value4; if(Value1min > Value1) Value1min = Value1; if(Value2min > Value2) Value2min = Value2; if(Value3min > Value3) Value3min = Value3; if(Value4min > Value4) Value4min = Value4; if(pinPE == 0) //Print ADC results UARTprintf("PE0 reading = %04u mV || Max. PE0 = %04u mV || Min. PE0 = %04u mV\n" "PE1 reading = %04u mV || Max. PE1 = %04u mV || Min. PE1 = %04u mV\n" "PE2 reading = %04u mV || Max. PE2 = %04u mV || Min. PE2 = %04u mV\n" "PE3 reading = %04u mV || Max. PE3 = %04u mV || Min. PE3 = %04u mV\n\n" "Elapsed time: %02uhrs %02umin %02usec MCU Temp: %u*C\x1b[5A\r", Value1, Value1max, Value1min, Value2, Value2max, Value2min, Value3, Value3max, Value3min, Value4, Value4max, Value4min, hour, minute, ROM_HibernateRTCGet(), TempValueC); else UARTprintf("PK0 reading = %04u mV || Max. PK0 = %04u mV || Min. PK0 = %04u mV\n" "PK1 reading = %04u mV || Max. PK1 = %04u mV || Min. PK1 = %04u mV\n" "PK2 reading = %04u mV || Max. PK2 = %04u mV || Min. PK2 = %04u mV\n" "PK3 reading = %04u mV || Max. PK3 = %04u mV || Min. PK3 = %04u mV\n\n" "Elapsed time: %02uhrs %02umin %02usec MCU Temp: %u*C\x1b[5A\r", Value1, Value1max, Value1min, Value2, Value2max, Value2min, Value3, Value3max, Value3min, Value4, Value4max, Value4min, hour, minute, ROM_HibernateRTCGet(), TempValueC); } else if(Inputs == 3) { //Converts ADC values to voltage Value1 = ADC0Values[0]*0.8058608059; Value2 = ADC0Values[1]*0.8058608059; Value3 = ADC0Values[2]*0.8058608059; if(Value1max < Value1) Value1max = Value1; if(Value2max < Value2) Value2max = Value2; if(Value3max < Value3) Value3max = Value3; if(Value1min > Value1) Value1min = Value1; if(Value2min > Value2) Value2min = Value2; if(Value3min > Value3) Value3min = Value3; if(pinPE == 0) //Print ADC results UARTprintf("PE0 reading = %04u mV || Max. PE0 = %04u mV || Min. PE0 = %04u mV\n" "PE1 reading = %04u mV || Max. PE1 = %04u mV || Min. PE1 = %04u mV\n" "PE2 reading = %04u mV || Max. PE2 = %04u mV || Min. PE2 = %04u mV\n\n" "Elapsed time: %02uhrs %02umin %02usec MCU Temp: %u*C\x1b[4A\r", Value1, Value1max, Value1min, Value2, Value2max, Value2min, Value3, Value3max, Value3min, hour, minute, ROM_HibernateRTCGet(), TempValueC); else //Print ADC results UARTprintf("PK0 reading = %04u mV || Max. PK0 = %04u mV || Min. PK0 = %04u mV\n" "PK1 reading = %04u mV || Max. PK1 = %04u mV || Min. PK1 = %04u mV\n" "PK2 reading = %04u mV || Max. PK2 = %04u mV || Min. PK2 = %04u mV\n\n" "Elapsed time: %02uhrs %02umin %02usec MCU Temp: %u*C\x1b[4A\r", Value1, Value1max, Value1min, Value2, Value2max, Value2min, Value3, Value3max, Value3min, hour, minute, ROM_HibernateRTCGet(), TempValueC); } else if(Inputs == 2) { //Converts ADC values to voltage Value1 = ADC0Values[0]*0.8058608059; Value2 = ADC0Values[1]*0.8058608059; if(Value1max < Value1) Value1max = Value1; if(Value2max < Value2) Value2max = Value2; if(Value1min > Value1) Value1min = Value1; if(Value2min > Value2) Value2min = Value2; if(pinPE == 0) //Print ADC results UARTprintf("PE0 reading = %04u mV || Max. PE0 = %04u mV || Min. PE0 = %04u mV\n" "PE1 reading = %04u mV || Max. PE1 = %04u mV || Min. PE1 = %04u mV\n\n" "Elapsed time: %02uhrs %02umin %02usec MCU Temp: %u*C\x1b[3A\r", Value1, Value1max, Value1min, Value2, Value2max, Value2min, hour, minute, ROM_HibernateRTCGet(), TempValueC); else //Print ADC results UARTprintf("PK0 reading = %04u mV || Max. PK0 = %04u mV || Min. PK0 = %04u mV\n" "PK1 reading = %04u mV || Max. PK1 = %04u mV || Min. PK1 = %04u mV\n\n" "Elapsed time: %02uhrs %02umin %02usec MCU Temp: %u*C\x1b[3A\r", Value1, Value1max, Value1min, Value2, Value2max, Value2min, hour, minute, ROM_HibernateRTCGet(), TempValueC); } else if(Inputs == 1) { //Converts ADC values to voltage Value1 = ADC0Values[0]*0.8058608059; if(Value1max < Value1) Value1max = Value1; if(Value1min > Value1) Value1min = Value1; if(pinPE == 0) //Print ADC results UARTprintf("PE0 reading = %04u mV || Max. PE0 = %04u mV || Min. PE0 = %04u mV\n\n" "Elapsed time: %02uhrs %02umin %02usec MCU Temp: %u*C\x1b[2A\r", Value1, Value1max, Value1min, hour, minute, ROM_HibernateRTCGet(), TempValueC); else //Print ADC results UARTprintf("PK0 reading = %04u mV || Max. PK0 = %04u mV || Min. PK0 = %04u mV\n\n" "Elapsed time: %02uhrs %02umin %02usec MCU Temp: %u*C\x1b[2A\r", Value1, Value1max, Value1min, hour, minute, ROM_HibernateRTCGet(), TempValueC); } if(Value1min == 0 && ROM_SysCtlPeripheralReady(SYSCTL_PERIPH_WDOG0)) { FeedWatchdog = false; while(1); } } void HibernateRTCIntHandler(void) { ROM_HibernateIntClear(HIBERNATE_INT_RTC_MATCH_0); minute++; if(minute == 60) { hour++; minute = 0; } ROM_HibernateRTCSet(0); HibernateRTCMatchSet(0, 60); } inline void ADC_Loop(unsigned int freq) { hour = 0; minute = 0; UARTFlushRx(); Init_Timer1(freq); ADC_InitHibernateRTC(); ROM_HibernateRTCEnable(); while(UARTPeek('\r') == -1); UARTFlushRx(); ROM_IntDisable(INT_TIMER1A); ROM_HibernateIntDisable(HIBERNATE_INT_RTC_MATCH_0); ROM_TimerIntClear(TIMER1_BASE, TIMER_TIMA_TIMEOUT); ROM_HibernateIntClear(HIBERNATE_INT_RTC_MATCH_0); ROM_TimerDisable(TIMER1_BASE, TIMER_A); HibernateIntUnregister(); ROM_SysCtlPeripheralDisable(SYSCTL_PERIPH_HIBERNATE); ROM_SysCtlPeripheralDisable(SYSCTL_PERIPH_GPIOE); ROM_SysCtlPeripheralDisable(SYSCTL_PERIPH_GPIOJ); ROM_SysCtlPeripheralDisable(SYSCTL_PERIPH_ADC0); ROM_SysCtlPeripheralDisable(SYSCTL_PERIPH_TIMER1); ROM_SysCtlPeripheralReset(SYSCTL_PERIPH_GPIOE); ROM_SysCtlPeripheralReset(SYSCTL_PERIPH_GPIOJ); ROM_SysCtlPeripheralReset(SYSCTL_PERIPH_ADC0); ROM_SysCtlPeripheralReset(SYSCTL_PERIPH_TIMER1); ROM_SysCtlPeripheralReset(SYSCTL_PERIPH_HIBERNATE); if(Inputs == 4) UARTprintf("\n\n\n\n\n\nProgram terminated.\n"); if(Inputs == 3) UARTprintf("\n\n\n\n\nProgram terminated.\n"); if(Inputs == 2) UARTprintf("\n\n\n\nProgram terminated.\n"); if(Inputs == 1) UARTprintf("\n\n\nProgram terminated.\n"); } inline int ADC_main(int argc, char *argv[]) { //text to indicate which pins are active char text[8][32] = {"PE0", "PE0/PE1", "PE0/PE1/PE2", "PE0/PE1/PE2/PE3", "PK0", "PK0/PK1", "PK0/PK1/PK2", "PK0/PK1/PK2/PK3"}; unsigned int freq, oversamplevalue; char *num1 = argv[1]; char *num2 = argv[3]; uint8_t condition = sscanf(num1, "%u%c", &freq, &ch); if(freq <= 0 || argc == 1 || argc == 3 || argc > 4 || condition != 1) return(CMD_ERROR); else if(strcmp(argv[2], "oversample") == 0) { uint8_t condition2 = sscanf(num2, "%u%c", &oversamplevalue, &ch); if((oversamplevalue == 2 || oversamplevalue == 4 || oversamplevalue == 8 || oversamplevalue == 16 || oversamplevalue == 32 || oversamplevalue == 64) && condition2 == 1) { UARTprintf("\nAnalog Digital Converter\n" "Type: Single Ended.\n" "Oversampling: %u\n" "Update rate: %u Hz\n\n" "Choose the port and the number of inputs (PE/PK, 1-4)\n\n" ">>", oversamplevalue, freq); Read_Command(); Inputs = ADC_InitADCPins(g_cInput_Read()); ADC_InitADC(Inputs, oversamplevalue); if(Inputs < 1 || Inputs > 4 || numarg > 2) return(CMD_ERROR); } else if(condition2 != 1) return(CMD_ERROR); else { UARTprintf("\nOnly 2, 4, 8, 16, 32 and 64 are accepted for HW oversampling\n"); return(CMD_ERROR); } } else if(argc == 2) { UARTprintf("\nAnalog Digital Converter\n" "Type: Single Ended.\n" "Oversampling: Deactivated\n" "Update rate: %u Hz\n\n" "Choose the port and the number of inputs (PE/PK, 1-4)\n\n" ">>", freq); Read_Command(); Inputs = ADC_InitADCPins(g_cInput_Read()); ADC_InitADC(Inputs, 0); if(Inputs < 1 || Inputs > 4 || numarg > 2) return(CMD_ERROR); } if(pinPE == 0) UARTprintf("\nNumber of inputs: %u\n" "Inputs: %s\n\n" "Press \"Enter\" or User Switch 1 to initiate.\n" "After the program is running, press \"Enter\" again to exit.\n", Inputs, &text[Inputs-1]); else UARTprintf("\nNumber of inputs: %u\n" "Inputs: %s\n\n" "Press \"Enter\" or User Switch 1 to initiate.\n" "After the program is running, press \"Enter\" again to exit.\n", Inputs, &text[Inputs+3]); while(1) { //GPIOPinRead = 0 or GPIO_PIN_0 if(!ROM_GPIOPinRead(GPIO_PORTJ_BASE, GPIO_PIN_0)) { UARTprintf("\n"); break; } if(UARTPeek('\r') != -1) break; } ADC_Loop(freq); return(CMD_SUCESS); }