Esempio n. 1
0
//--------------------------------------------------------------
// Interrupt (ISR-Function)
// is called when DMA interrupt
//   (In Half Transfer Complete and TransferCompleteInterrupt)
//
//--------------------------------------------------------------
void DMA2_Stream0_IRQHandler(void)
{
	ADC_t *adc = &ADC_UB;

	if (DMA_GetITStatus(DMA2_Stream0, DMA_IT_HTIF0))
	{
		// HalfTransferInterruptComplete interrupt from DMA2 occurred
		DMA_ClearITPendingBit(DMA2_Stream0, DMA_IT_HTIF0);

		if (adc->DmaStatus == ADC_DMA_RUN
		&&	(adc->Status == ADC_RUNNING ||	adc->Status == ADC_PRE_TRIGGER)
			)
		{
			if ((ADC1_DMA_STREAM->CR & DMA_SxCR_CT) == 0)
				// Examined trigger point in quadrant 1
				ADC_searchTrigger(ADC_DMA_Buffer_A, 0, 1);
			else
				// Examined trigger point in quadrant 3
				ADC_searchTrigger(ADC_DMA_Buffer_B, 0, 3);
		}
	}
	else if (DMA_GetITStatus(DMA2_Stream0, DMA_IT_TCIF0))
	{
		// TransferInterruptComplete interrupt from DMA2 occurred
		DMA_ClearITPendingBit(DMA2_Stream0, DMA_IT_TCIF0);

		if (adc->DmaStatus == ADC_DMA_RUN)
		{
			TIM_Cmd(TIM2, DISABLE);

			if (adc->Status != ADC_START)
			{
				if (adc->Status == ADC_TRIGGER_OK)
					adc->Status = ADC_READY;
				else
				{
					TIM_Cmd(TIM2, ENABLE);
					if ((ADC1_DMA_STREAM->CR & DMA_SxCR_CT) != 0)
						// Examined trigger point in quadrant 2
						ADC_searchTrigger(ADC_DMA_Buffer_A, ADC_HALF_ARRAY_LEN, 2);
					else
						// Examined trigger point in quadrant 4
						ADC_searchTrigger(ADC_DMA_Buffer_B, ADC_HALF_ARRAY_LEN, 4);
				}
			}
			else
			{
				TIM_Cmd(TIM2, ENABLE);
				adc->Status = ADC_RUNNING;
			}
		}
		UB_Led_Toggle(LED_GREEN);
	}
}
Esempio n. 2
0
void test_FPU_test(void* p) {
  float ff = 1.0f;
  printf("Start FPU test task.\n");
  for (;;) {
	UB_Led_Toggle(LED_BLUE);
    float s = sinf(ff);
    ff += s;
    // TODO some other test
    vTaskDelay(1000);
  }
  vTaskDelete(NULL);
}
Esempio n. 3
0
int main(void)
{
  uint32_t adr;
  uint8_t sollwert, istwert;
  ErrorStatus ramcheck;

  SystemInit(); // Quarz Einstellungen aktivieren

  // init der LEDs
  UB_Led_Init();

  // init vom externen SDRAM (und test ob es vorhanden ist)
  ramcheck=UB_SDRAM_Init();
  if(ramcheck==SUCCESS) {
    // zum test RAM komplett füllen
    sollwert=0xA1B2;
    for(adr=0;adr<SDRAM_MAX_ADR;adr+=2) {
   	  UB_SDRAM_Write16b(adr,sollwert);
      sollwert++;
    }

    // Ram wieder auslesen und prüfen
    sollwert=0xA1B2;
    for(adr=0;adr<SDRAM_MAX_ADR;adr+=2) {
      istwert=UB_SDRAM_Read16b(adr);
      if(istwert!=sollwert) {
        // RAM-Inhalt fehlerhaft
        ramcheck=ERROR;
      }
      sollwert++;
    }
  }

  while(1)
  {
    if(ramcheck==SUCCESS) {
      // wenn kein Fehler -> gruene LED leuchtet
      UB_Led_On(LED_GREEN);
    }
    else {
      // wenn Fehler -> rote LED blinkt
      UB_Led_Toggle(LED_RED);
      Delay(5000000);
    }
  }
}
Esempio n. 4
0
void LED1on(void)
{
	UB_Led_Toggle(LED1);
}
Esempio n. 5
0
//--------------------------------------------------------------
// start vom Oszi (Endlosloop)
//--------------------------------------------------------------
void oszi_start(void)
{
  MENU_Status_t status;

  p_oszi_draw_background();
  UB_Graphic2D_Copy2DMA(Menu.akt_transparenz);  

  while(1) {
    //---------------------------------------------
    // warten bis GUI-Timer abgelaufen ist
    //---------------------------------------------
    if(GUI_Timer_ms==0) {
      GUI_Timer_ms=GUI_INTERVALL_MS;
      //--------------------------------------
      // User-Button einlesen (fuer RUN/STOP)
      //--------------------------------------
      if(UB_Button_OnClick(BTN_USER)==true) {
        status=MENU_NO_CHANGE;
        if(Menu.trigger.mode==2) { // "single"
          if(Menu.trigger.single==4) {
            Menu.trigger.single=5;  // von "Ready" auf "Stop"
            status=MENU_CHANGE_NORMAL;
          }
        }
        else { // "normal" oder "auto"
          if(Menu.trigger.single==0) {
            Menu.trigger.single=1; // von "Run" auf "Stop"
            status=MENU_CHANGE_NORMAL;
          }
          else if(Menu.trigger.single==1) {
            Menu.trigger.single=2; // von "Stop" auf "Weiter"
            status=MENU_CHANGE_NORMAL;
          }
        }
      }
      else {
        //--------------------------------------
        // Test ob Touch betaetigt
        //--------------------------------------
        status=menu_check_touch();
      }
      if(status!=MENU_NO_CHANGE) {
        p_oszi_draw_background();
        if(status==MENU_CHANGE_FRQ) ADC_change_Frq(Menu.timebase.value);
        if(status==MENU_CHANGE_MODE) {
          ADC_change_Mode(Menu.trigger.mode);
          if(Menu.trigger.mode!=2) {
            Menu.trigger.single=0;
          }
          else {
            Menu.trigger.single=3;
          }
          p_oszi_draw_background(); // nochmal zeichnen, zum update
          ADC_UB.status=ADC_VORLAUF;
          TIM_Cmd(TIM2, ENABLE);
        }
        if(status==MENU_SEND_DATA) {
          p_oszi_draw_background(); // nochmal zeichnen, zum update
          p_oszi_draw_adc();
          // gesendet wird am Ende
        }
      }

      if(Menu.trigger.mode==1) {
        //--------------------------------------
        // Trigger-Mode = "AUTO"
        // Screnn immer neu zeichnen
        //--------------------------------------
        if(Menu.trigger.single==0) {
          if ((ADC1_DMA_STREAM->CR & DMA_SxCR_CT) == 0) {
            ADC_UB.trigger_pos=SCALE_X_MITTE;
            ADC_UB.trigger_quarter=2;
          }
          else {
            ADC_UB.trigger_pos=SCALE_X_MITTE;
            ADC_UB.trigger_quarter=4;
          }
          p_oszi_sort_adc();
          p_oszi_fill_fft();
          if(Menu.fft.mode!=0) fft_calc();
          p_oszi_draw_adc();
          ADC_UB.status=ADC_VORLAUF;
          UB_Led_Toggle(LED_RED);
        }
        else if(Menu.trigger.single==1) {
          // Button "STOP" wurde gedrückt
          // Timer analten
          TIM_Cmd(TIM2, DISABLE);
          if(status!=MENU_NO_CHANGE) p_oszi_draw_adc();
        }
        else if(Menu.trigger.single==2) {
          // Button "START" wurde gedrückt
          Menu.trigger.single=0;
          ADC_UB.status=ADC_VORLAUF;
          TIM_Cmd(TIM2, ENABLE);
          if(status!=MENU_NO_CHANGE) p_oszi_draw_adc();
        }
      }
      else if(Menu.trigger.mode==0) {
        //--------------------------------------
        // Trigger-Mode = "NORMAL"
        // Screnn nur zeichnen, nach Triggerevent
        //--------------------------------------
        if(Menu.trigger.single==0) {
          if(ADC_UB.status==ADC_READY) {
            UB_Led_Toggle(LED_RED);
            p_oszi_sort_adc();
            p_oszi_fill_fft();
            if(Menu.fft.mode!=0) fft_calc();
            p_oszi_draw_adc();
            ADC_UB.status=ADC_VORLAUF;
            TIM_Cmd(TIM2, ENABLE);
          }
          else {
            // oder wenn Menu verändert wurde
            if(status!=MENU_NO_CHANGE) p_oszi_draw_adc();
          }
        }
        else if(Menu.trigger.single==1) {
          // Button "STOP" wurde gedrückt
          // Timer analten
          TIM_Cmd(TIM2, DISABLE);
          if(status!=MENU_NO_CHANGE) p_oszi_draw_adc();
        }
        else if(Menu.trigger.single==2) {
          // Button "START" wurde gedrückt
          Menu.trigger.single=0;
          ADC_UB.status=ADC_VORLAUF;
          TIM_Cmd(TIM2, ENABLE);
          if(status!=MENU_NO_CHANGE) p_oszi_draw_adc();
        }
      }
      else {
        //--------------------------------------
        // Trigger-Mode = "SINGLE"
        // Screnn nur einmal zeichnen, nach Triggerevent
        //--------------------------------------
        if(Menu.trigger.single==3) {
          // warten auf Trigger-Event
          if(ADC_UB.status==ADC_READY) {
            Menu.trigger.single=4;
            UB_Led_Toggle(LED_RED);
            p_oszi_sort_adc();
            p_oszi_fill_fft();
            if(Menu.fft.mode!=0) fft_calc();
            p_oszi_draw_adc();
          }
          else {
            // oder wenn Menu verändert wurde
            if(status!=MENU_NO_CHANGE) p_oszi_draw_adc();
          }
        }
        else if(Menu.trigger.single==5) {
          // Button "Reset" wurde gedrückt
          Menu.trigger.single=3;
          p_oszi_draw_adc();
          ADC_UB.status=ADC_VORLAUF;
          TIM_Cmd(TIM2, ENABLE);
        }
        else {
          // oder wenn Menu verändert wurde
          if(status!=MENU_NO_CHANGE) p_oszi_draw_adc();
        }
      }

      if(GUI.gui_xpos==GUI_XPOS_OFF) {
        // ohne GUI => ohne Transparenz zeichnen
        UB_Graphic2D_Copy1DMA();
      }
      else {
        // mit GUI => mit Transparenz zeichnen
        UB_Graphic2D_Copy2DMA(Menu.akt_transparenz);
      }

      // Refreh vom LCD
      UB_LCD_Refresh();

      // event. Daten senden
      if(Menu.send.data!=0) {
        p_oszi_send_data();
        Menu.send.data=0;
      }
    }
  }
}
int main(void)
{
	RTC_STATUS_t check;
	uint8_t old_sek=0;

	char buf[APP_TX_BUF_SIZE]; // puffer fuer Datenempfang

	SystemInit(); // Quarz Einstellungen aktivieren

	// Init der LEDs
	UB_Led_Init();

	// Init der Buttons
	UB_Button_Init ( );

	// Init und start der RTC
	check=UB_RTC_Init();

	if(check==RTC_UNDEFINED) {
		// RTC war noch nie initialisiert
		UB_Led_On(LED_RED);
	}
	else {
		// RTC war schon initialisiert
		UB_Led_On(LED_GREEN);
	}

	// Init vom USB-OTG-Port als CDC-Device
	// (Virtueller-ComPort)

	/* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
	 *  die nächste Zeile auskommentieren,
	 *  dann funktioniert das Zurücksetzen
	 *  des RTC
	 */
	UB_USB_CDC_Init();

	while ( 1 )
	{
		// wenn Button gedrückt -> RTC zurücksetzen
		if ( UB_Button_Read ( BTN_USER ) )
		{
			// orange LED ein
			UB_Led_On ( LED_ORANGE );
			// RTC zurücksetzen
			ResetRTC ( );
			// warten bis Button gelöst
			while ( UB_Button_Read ( BTN_USER ) );
			// die LED noch ein Weilchen an lassen
			Delay ( 10000000 );
			UB_Led_Off ( LED_ORANGE );
		}
		// aktuelle RTC-Zeit auslesen
		UB_RTC_GetClock(RTC_DEC);
		if(UB_RTC.sek!=old_sek) {
			// wenn eine Sekunde um ist
			old_sek=UB_RTC.sek;
			UB_Led_Toggle(LED_BLUE);

			// aktuelle Zeit als String formatieren
			sprintf ( buf, "%02d.%02d.%02d %02d:%02d:%02d",
					UB_RTC.tag, UB_RTC.monat, UB_RTC.jahr,
					UB_RTC.std, UB_RTC.min, UB_RTC.sek );
			// an Semihosting senden
			printf ( "%s\r\n", buf );

			// Test ob USB-Verbindung zum PC besteht
			if(UB_USB_CDC_GetStatus()==USB_CDC_CONNECTED)
			{
				// an PC senden
				UB_USB_CDC_SendString ( buf, LFCR );
			}
		}
	}
}