Exemplo n.º 1
0
/*
   Gibt ein paar Töne der Tonleiter aus.

   Ein Rechtecksignal der Frequenz des Tons wird mit dem
   Systicktimer erzeugt.

   Der Timer startet mit der Frequenz 2*Frequenz_des_Tons und
   pro Schwingung 2 Mal aufgerufen. Beim ersten Mal wird das
   Rechtecksignal ein- und beim zweiten Mal wieder ausgeschatlet.

   Die Tonausgabe liegt an am Pin PA4.
   Es wird eine einfache Tonleiter, pro Ton 1/2 Sekunde, ausgegeben.

   Schaltung:
      Ausgabe-Pin --> 2K -> Kopfhörer -> GND
   Am Ausgabepin muss ein etwa 1K bis 2K grosser Vorwiderstand vor
   dem Kopfhörer angeschlossen sein. Danach der Kopfhörer und dann
   0V (-, Erde, GND).

   Grösse des Wiederstandes:

   Sei Impedanz des Kopfhörers 240 Ohm Rk:

   Die Leistung P sollte kleiner 1mW betragen.

   P = I * V = V/(Rk+Rv) * (I*Rk) = (V/(Rk+Rv))**2 * Rk
   V = 3.3V, Rk = 240 Ohm, und Vorwiederstand Rv = 2K
   ==> P = 0.5mW

   Am besten wird der Kopfhörer über einen "Audio jack" /
   Klinkenbuchse 3.5mm angeschlossen.

*/
int main(void)
{
   enable_gpio_clockcntrl(GPIO_PORTA_BIT/*switch+audio out*/|GPIO_PORTE_BIT/*led*/);

   config_input_gpio(GPIO_PORTA, GPIO_PIN0, GPIO_PULL_OFF);
   config_output_gpio(GPIO_PORTA, GPIO_PIN4);
   config_output_gpio(GPIO_PORTE, GPIO_PINS(15,8));
   config_systick(8000000/*dummy*/, systickcfg_CORECLK|systickcfg_INTERRUPT);

   write1_gpio(GPIO_PORTE, GPIO_PIN8);

   while (1) {
      if (read_gpio(GPIO_PORTA, GPIO_PIN0) == 1) {
         setperiod_systick(note_period[C1]);
         counter = 0;
         isON = 1;
         start_systick();
         for (unsigned tone = C1+1; tone <= C2; ++tone) {
            unsigned led = 8 + (tone & 7);
            setpins_gpio(GPIO_PORTE, GPIO_PINS(led,led), GPIO_PINS(15,8)&~led);
            while (4000000 > counter) ;
            while (! isON) ;
            while (isON) ;
            counter = 0;
            setperiod_systick(note_period[tone]);
         }
         stop_systick();
         while (read_gpio(GPIO_PORTA, GPIO_PIN0) == 1) ;
      }
   }

}
Exemplo n.º 2
0
/*
   Gibt mit 11025 Hz gesampeltes Geräusch an Pin PA4 und PA5 mittels Digital-Analog-Converter aus.

   Eine 3.5mm Kopfhörerbuchse sollte an die Anschlüsse GND, PA4 und PA5
   angeschlossen werden per Steckbrett und Jumper-Kabel. Ein Vorwiderstand
   zwischen GND und Buchse von mind. 100Ohm und fertig.
   Kopfhörer angeschlossen, nun kann der Sound akustisch wahrgenommen werden.

   Ein Druck auf den User-Button erzeugt ein Schussgeräusch, dann ein UFO und danach erklingt eine Explosion.
   Wird die Usertaste erneut gedrückt, bevor das Geräusch ausgeklungen ist, wird die Ausgabe
   wiederholt, beginnend mit dem Schussgeräusch.

*/
int main(void)
{
   enable_gpio_clockcntrl(GPIO_PORTA_BIT/*switch+audio-out*/|GPIO_PORTE_BIT/*led*/);
   enable_dac_clockcntrl();

   config_input_gpio(GPIO_PORTA, GPIO_PIN0, GPIO_PULL_OFF);
   // Wichtig: Zuerst IOPIN auf analog umschalten, damit keine parasitären Ströme fliessen
   config_analog_gpio(GPIO_PORTA, GPIO_PIN4);
#if defined(USE_EXTI_LINE9)
   config_output_gpio(GPIO_PORTA, GPIO_PIN9);
#endif
   config_output_gpio(GPIO_PORTE, GPIO_PINS(15,8));
#if defined(USE_SWTRIGGER)
   config_dac(DAC1, dac_channel_DUAL, daccfg_ENABLE_CHANNEL|daccfg_ENABLE_TRIGGER|daccfg_TRIGGER_SOFTWARE);
#elif defined(USE_EXTI_LINE9)
   config_dac(DAC1, dac_channel_DUAL, daccfg_ENABLE_CHANNEL|daccfg_ENABLE_TRIGGER|daccfg_TRIGGER_EXTI_LINE9);
#else
   config_dac(DAC1, dac_channel_DUAL, daccfg_ENABLE_CHANNEL|daccfg_DISABLE_TRIGGER);
#endif
   if (isenabled_dac(DAC1, dac_channel_1) != 1
      || isenabled_dac(DAC1, dac_channel_2) != 1
      || isenabled_dac(DAC1, dac_channel_DUAL) != 1) {
      // error
      write1_gpio(GPIO_PORTE, GPIO_PINS(15,8));
   }

   config_systick((8000000+11025/2) / 11025, systickcfg_CORECLK|systickcfg_INTERRUPT);

   write1_gpio(GPIO_PORTE, GPIO_PIN8);

   while (1) {
      if (read_gpio(GPIO_PORTA, GPIO_PIN0) == 1) {
         stop_systick();
         counter = 0;
         soundnr = 0;
         start_systick();
         write1_gpio(GPIO_PORTE, GPIO_PIN9);
         while (read_gpio(GPIO_PORTA, GPIO_PIN0) == 1) ;
         write0_gpio(GPIO_PORTE, GPIO_PIN9);
      }
   }

}
Exemplo n.º 3
0
int main(int argc, char const *argv[])
{
    switch_on_hse();
    construct_exceptions();
    construct_nvic();
    construct_systick();
    construct_scheduler();
    construct_app();
    construct_rcc();
    construct_gpio();
    construct_tim14();

    start_exceptions();
    start_nvic();
    start_systick();
    start_rcc();
    start_gpio();
    start_tim14();

    start_app();
    /* must be last */
    start_scheduler();
}
Exemplo n.º 4
0
int
main (void)
{

  SystemCoreClockUpdate ();
  GPIOInit ();

  while (GPIOGetValue (BTN_PORT, BTN_PIN) == 0)
    ;

  POWER_ON;

  SSP_IOConfig (SSP_NUM); /* initialize SSP port, share pins with SPI1
   on port2(p2.0-3). */
  SSP_Init (SSP_NUM);
  UARTInit (115200);

  LED1_ON;

  TIMInit (0, 2 * SystemCoreClock);
  TIMInit (1, SystemCoreClock);
  TIMInit16 (1, SystemCoreClock);
  TIMInit16 (0, SystemCoreClock);
  enable_timer16 (0);

  // Initialize SYstick
  SysTick_Config ( SYSTICK_DELAY);

  MSP5701_init ();
  SST25_init ();

  //LED1_BLINK;

  // TODO: insert code here

  NVIC_ClearPendingIRQ (EINT0_IRQn);
  NVIC_ClearPendingIRQ (EINT1_IRQn);
  NVIC_EnableIRQ (EINT0_IRQn);
  NVIC_EnableIRQ (EINT1_IRQn);

  clearAllEvents();

  while (1)
    {

      if (checkEvent(BtnPressed))
	{
	  // Start measuring.
	  //GPIOSetValue(LED1_PORT, LED1_PIN, ~GPIOGetValue(LED1_PORT,LED1_PIN)&0x1);
	  clearEvent(BtnPressed);

	  if (measure == 1)
	    {
	      measure = 0;
	      live = 0;
	      /* Save data info */
	      storage_save_data_info (&actual_record);
	      meas_pointer = 0;
	      stop_systick ();
	    }
	  else
	    {
	      measure = 1;
	      meas_pointer = 0;
	      storage_init (&actual_record);
	      start_systick ();
	    }
	  clearEvent(BtnPressed);
	}
      if (checkEvent(PowerOff))
	{
	  // Turn off device.
	  storage_save_data_info (&actual_record);
	  meas_pointer = 0;
	  measure = 0;
	  LED1_OFF;
	  LED2_OFF;
	  UARTSend ((uint8_t*) "sleep\r\n", 7);
	  POWER_OFF
	  ;
	  while (1)
	    ;
	  clearEvent(PowerOff);

	}
      if (checkEvent(UART_data))
	{
	  clearEvent(UART_data);
	  uint8_t command = get_uart_char ();
	  switch (command)
	    {
	    case 'e':
	      stop_systick ();
	      SST25_erase (0, SIZE_FULL);
	      break;
	    case 'r':
	      measure = 0;
	      /* Save data info */
	      if (actual_record.rec_index != -1)
		{
		  storage_save_data_info (&actual_record);
		}
	      meas_pointer = 0;
	      stop_systick ();
	      send_data ();
	      break;
	    case 'l':
	      sleep = 0;
	      measure = 1;
	      live = 1;
	      start_systick ();
	      break;
	    case 'n':
	      live = 0;
	      measure = 1;
	      storage_init (&actual_record);
	      start_systick ();
	      sleep = 1;
	      break;
	    case 's':
	      live = 0;
	      sleep = 1;
	      measure = 0;
	      /* Save data info */
	      storage_save_data_info (&actual_record);
	      meas_pointer = 0;
	      stop_systick ();
	      break;
	    default:
	      break;
	    }
	}

      if (TimeTick & measure)
	{

	  TimeTick = 0;
	  /* Do stuff */

	  MSP5701_measure_press (&press);
	  if (live == 0)
	    {
	      memcpy ((uint8_t*) (meas_buffer + meas_pointer), &press,
		      sizeof(press));
	      meas_pointer += sizeof(press);
	      if (meas_pointer >= SAMPLE_BUFFER_LENGTH - 1)
		{
		  /* Store samples in external memory */
		  uint32_t length_written = storage_save_data (
		      &actual_record, meas_buffer, SAMPLE_BUFFER_LENGTH);
		  meas_pointer = 0;
		  if (length_written != SAMPLE_BUFFER_LENGTH)
		    {
		      /* Run out of memory - stop measuring */
		      measure = 0;
		      meas_pointer = 0;
		      storage_save_data_info (&actual_record);
		      /* Turn off device */
		      POWER_OFF
		      ;
		    }
		}
	    }
	  else
	    {
	      /*Transmit live*/
	      UARTSend ((uint8_t*) &press, 4);
	      UARTSend ((uint8_t*) "\r\n", 2);

	    }

	}
      if (sleep == 1)
	{
	  __WFI ();
	}
    }
  return 0;
}