Esempio n. 1
0
int main (void)
{
	HW_Init();

	// enquanto a tensão de entrada estiver abaixo de 8V e acima de 16V, não faz nada
	do
	{
		ADCSRA |= (1<<ADSC);
		while (ADCSRA & (1<<ADSC));

	} while ((ADC < MIN_VI_COUNT) || (ADC > MAX_VI_COUNT));

	VoltInp = ADC;

	ADMUX = ((1<<REFS0) | (1<<REFS1)) + VOUT_CH; 	// feedback do conversor boost
	ADCSRA |= (1<<ADIF) | (1<<ADIE);		// limpa o flag e habilita interrupção do ADC

	tPIsat_params.w_kp_pu = eeprom_read_word(&ee_PI_kp);
	tPIsat_params.w_ki_pu = eeprom_read_word(&ee_PI_ki);
	tPIsat_params.sp = eeprom_read_word(&ee_PI_SP);

	ADCSRA |= (1<<ADSC);		// Inicia primeira leitura do ADC
	sei();


	uart_puts_P(PSTR("Inicio VFD\r"));
	vfd_setstring("Felipe Maimon");

	for(;;)
	{
		State_Machine();
	}
}
Esempio n. 2
0
/**
  * @brief  Main program
  * @param  None
  * @retval None
  */
int main(void)
{
  int16_t accData[3];
#ifdef WITH_USART
  char msg[3] = {'0','\r','\n'};
#endif

  HAL_Init();
  HW_Init();
  BlueNRG_Init();

  while (1)
  {
    HCI_Process();
    if (set_connectable) {
      set_bluenrg_connectable();
      set_connectable = 0;
    }

    /* Blink the orange LED */
    if (HAL_GetTick() % 500 == 0)
      BSP_LED_Toggle(LED3);

    if (HAL_GetTick() % 100 == 0) {
      BSP_ACCELERO_GetXYZ(accData);
      Acc_Update(accData);
    }

#ifdef WITH_USART
    msg[0] = (msg[0] == '9')? '0' : msg[0]+1;
    if (HAL_USART_Transmit(&UsartHandle, (uint8_t *)msg, 3, 5000) != HAL_OK)
      ColorfulRingOfDeath();
#endif
  }
}
Esempio n. 3
0
int main(void)
{
	HW_Init();
	
	while(1)
	{	
		if(g_nState == PLAY_STATE)
			PlayService();
		else if(g_nState == ESR_STATE)
			EsrBegin();
		else if(g_nState == PWRDOWN_STATE || g_nState == SLEEP_STATE){
			PlayPwrDownAduio((PEN_STATE)g_nState);
			HW_EnterPowerDown((PEN_STATE)g_nState);
		}else if(g_nState == RECORD_STATE)
			RecordBegin(RECUSEDCODE,REC_PURE);
		else if(g_nState == MVREC_STATE){
			RecordBegin(MVUSEDCODE,REC_MAVO);
			PlayMagicVoice();
		}
	}	
}
Esempio n. 4
0
int main (
  void
  )
{
  static UNSIGNED16 checksum;
  UNSIGNED8 bootCrcValid;
  UNSIGNED8 appCrcValid;

  // Disable all interrupts (just in case we jumped here)
  Disable_interrupt();
  
  // Initialize low-level hardware
  HW_Init();

  // Initialize Flash/EEPROM module and routines
  FLASH_Init();

  // Read node configuration and initialize status/error variables
  MAIN_Init();

  // Initialize Timer
  TIMER_Init();

  // Initialize CAN contoller
  CANHW_Init();

  // Initialize SDO handler
  SDO_Init();

  // Initialize Controls
  bootCrcValid = 0;
  appCrcValid = 0;

#if 0
  // If the bootloader is executed from power-up reset, initiate
  // waiting period of 60 seconds before attempting to start the
  // application.
  // Otherwise, we assume that the bootloader was called from the
  // application. In this case, send the bootup message (and don't
  // wait the 60 seconds).
  if ( gNodeStatus.run_mode == EXECMODE_POWERUP )
  {
    // Set the timer for the main waiting period in number of ticks
    TIMER_Set(TIMER_MAIN, WAIT_TIMEOUT*(1000/TIMERTICK_MS));
    gNodeStatus.run_mode = EXECMODE_TIMER;
  }
  else
  {
    gNodeStatus.run_mode = EXECMODE_NORMAL;
  }
#endif

  // Calculat bootloader checksum
  bootCrcValid = FLASH_Checksum_OK(BL_CHECKSUM_START, BL_CHECKSUM_END, BL_CHECKSUM_ADR, &checksum);

  // Check the bootloader (provides reference for embedded CRC)
  if ((0 == bootCrcValid) || (boot_crc == checksum))
  { // no error - do nothing
    ;
  }
  else
  { // Signal error. Extra info is the calculated checksum.
    MAIN_Signal_Error(ERRCODE_INTERNAL, checksum);
  }

  appCrcValid = FLASH_Checksum_OK(AP_CHECKSUM_START, AP_CHECKSUM_END, AP_CHECKSUM_ADR,   &checksum);

  // Check the main application checksum and set error status if wrong
  if (0 == appCrcValid)
  { // no error - do nothing
    ;
  }
  else
  { // Signal error. Extra info is the calculated checksum.
    MAIN_Signal_Error(ERRCODE_USER, checksum);
    // Don't auto-start application after timeout
    gNodeStatus.run_mode = EXECMODE_NORMAL;
  }

   // start_code: 0=power-up, 1=external, 2=brown-out, 3=watchdog, 4=J-Tag, 5=jump
   if ( (0 == bootCrcValid) ||
        (0 == appCrcValid) ||
        (2 == gNodeStatus.start_code) ||
        (3 == gNodeStatus.start_code) )
   {
      CANHW_Send_Boot();
      
      if ( (0 == bootCrcValid) )
      {
         CANHW_Send_Emergency(0x8000, 1, 0, 0, 0, 0);
      }
      else  if ( (2 == gNodeStatus.start_code) )
      {
         CANHW_Send_Emergency(0x8000, 2, 0, 0, 0, 0);
      }
      else if ( (3 == gNodeStatus.start_code) )
      {
         CANHW_Send_Emergency(0x8000, 3, 0, 0, 0, 0);
      }
      else if ( (0 == appCrcValid) )
      {
         CANHW_Send_Emergency(0x8000, 4, 0, 0, 0, 0);
      }

      gNodeStatus.run_mode = EXECMODE_NORMAL;
   }
   else if ( (0 == gNodeStatus.start_code) ||
             (1 == gNodeStatus.start_code) ||
             (4 == gNodeStatus.start_code) )
   {
      TIMER_Set(TIMER_MAIN, WAIT_TIMEOUT*(1000/TIMERTICK_MS));
      gNodeStatus.run_mode = EXECMODE_TIMER;
   }
   else if ( (5 == gNodeStatus.start_code) )
   {
      gNodeStatus.run_mode = EXECMODE_NORMAL;
   }
   else
   {
      // Set the location of the interrupt vectors to 0
      MCUCR = BIT(IVCE);
      MCUCR = 0x00;
      // Call the absolute address RESVEC_ADR
      ((void(*)(void))RESVEC_ADR)();
   }

  // Endless loop to execute the bootloader. The only exit point is
  // a jump to the application if the condition for execution is
  // fulfilled.
  for ( ;; )
  {
    BOOLEAN message_processed;

    // Update timers
    TIMER_Poll();

    // Serve the watchdog
    COP_Serve();

    // Check for a waiting CAN message and process them (SDO, NMT).
    // This can change the execution mode!
    message_processed = CANHW_Process_Messages();

    // If requested, check the application and jump to it, if successful
    if ( gNodeStatus.run_mode == EXECMODE_RUN )
    {
      // Jump to main application, if the checksum is ok
      if ( FLASH_Checksum_OK(AP_CHECKSUM_START, AP_CHECKSUM_END,
                             AP_CHECKSUM_ADR,   &checksum)     )
      {
        // Set the location of the interrupt vectors to 0
        MCUCR = BIT(IVCE);
        MCUCR = 0x00;
        // Call the absolute address RESVEC_ADR
        ((void(*)(void))RESVEC_ADR)();
      }
      else
      { // Checksum not valid: Don't start application and report error, stay here
        CANHW_Send_Emergency(0x8000, 4, 0, 0, 0, 0);
        MAIN_Signal_Error(ERRCODE_USER, checksum); // Signal error. Extra info is the calculated checksum.
        gNodeStatus.run_mode = EXECMODE_NORMAL;
      }
    }
    else if ( gNodeStatus.run_mode == EXECMODE_TIMER )
    { // check for other conditions when running in timed mode

      if ( message_processed )
      { // After a successfully received message leave the timed mode
        gNodeStatus.run_mode = EXECMODE_NORMAL;
      }
      else if ( TIMER_Expired(TIMER_MAIN) )
      { // Check for initial 60 second waiting period, if expired prepare
        // for running the application.
        gNodeStatus.run_mode = EXECMODE_RUN;
      }
      else
      { // do nothing
        ;
      }
    }
    else
    { // do nothing
      ;
    }
  } // for ever loop

  // don't return from here
  return(0);
}
Esempio n. 5
0
int main(int argc, char **argv)
{
   const char *bitstream = getDefaultBitstreamPath();
   const char *tracefile = NULL;
   double clock = CLOCK_DEFAULT;
   HWPatch patch;
   FTDIDevice dev;
   bool resetFPGA = true;
   bool resetDSI = true;
   bool iohook = false;
   int err, c;

   HWPatch_Init(&patch);

   while (1) {
      int option_index;
      static struct option long_options[] = {
         {"no-fpga-reset", 0, NULL, 'F'},
         {"no-dsi-reset", 0, NULL, 'D'},
         {"bitstream", 1, NULL, 'b'},
         {"fast", 0, NULL, 'f'},
         {"slow", 0, NULL, 's'},
         {"clock", 1, NULL, 'c'},
         {"patch", 1, NULL, 'p'},
         {"iohook", 0, NULL, 'i'},
         {"stop", 1, NULL, 'S'},
         {NULL},
      };

      c = getopt_long(argc, argv, "FDb:fsc:p:iS:", long_options, &option_index);
      if (c == -1)
         break;

      switch (c) {

      case 'F':
         resetFPGA = false;
         break;

      case 'D':
         resetDSI = false;
         break;

      case 'b':
         bitstream = strdup(optarg);
         break;

      case 'f':
         clock = CLOCK_FAST;
         break;

      case 's':
         clock = CLOCK_SLOW;
         break;

      case 'c':
         clock = atof(optarg);
         break;

      case 'p':
         HWPatch_ParseString(&patch, optarg);
         break;

      case 'i':
         iohook = true;
         break;

      case 'S':
         HWTrace_ParseStopCondition(optarg);
         break;

      default:
         usage(argv[0]);
      }
   }

   if (optind == argc - 1) {
      // Exactly one extra argument- a trace file
      tracefile = argv[optind];
   } else if (optind < argc) {
      // Too many extra args
      usage(argv[0]);
   }

   err = FTDIDevice_Open(&dev);
   if (err) {
      fprintf(stderr, "USB: Error opening device\n");
      return 1;
   }

   if (iohook)
      HWTrace_InitIOHookPatch(&patch);

   HW_Init(&dev, resetFPGA ? bitstream : NULL);
   HW_ConfigWrite(&dev, REG_POWERFLAGS, POWERFLAG_DSI_BATT, false);
   HW_SetSystemClock(&dev, clock);
   HW_LoadPatch(&dev, &patch);

   if (tracefile || iohook)
      HW_Trace(&dev, &patch, tracefile, iohook, resetDSI);

   FTDIDevice_Close(&dev);
   IOH_Exit();

   return 0;
}
Esempio n. 6
0
File: main.c Progetto: atupac/ctr
int main(int argc, char **argv)
{
   const char *bitstream = NULL;
   const char *tracefile = NULL;
   FTDIDevice dev;
   int err, c;
   HW_Init();
   

   changeterminal(1);

   while (1) 
   {
      int option_index;
	  char* pchr;
      static struct option long_options[] = 
	  {
         {"bitstream", 1, NULL, 'b'},
         {"patch", 1, NULL, 'p'},
         {"flatpatch", 1, NULL, 'l'},
		 {"server", 0, NULL, 's'},
		 {"gdb", 0, NULL, 'd'},
         {NULL},
      };

      c = getopt_long(argc, argv, "sb:p:l:d", long_options, &option_index);
      if (c == -1)
         break;

      switch (c) 
	  {
	  case 'd':
		 DebuggerSetEnabled(1);
		 break;
	  case 's':
		 ServerSetEnabled(1);
		 break;
      case 'b':
         bitstream = strdup(optarg);
         break;
	  case 'p':
		 HW_LoadPatchFile(optarg);
		 break;
	  case 'l':
		  {
			  char* patchfilename = 0;
			  unsigned int patchaddress = strtoul(optarg, &patchfilename, 0);
			  
			  if (patchfilename != optarg)
				  patchfilename++;
			  
 			  HW_LoadFlatPatchFile(patchaddress, patchfilename);
		  }
		 break;
      default:
         usage(argv[0]);
      }
   }

   if (optind == argc - 1)
   {
      // Exactly one extra argument- a trace file
      tracefile = argv[optind];
   } 
   else if (optind < argc) 
   {
      // Too many extra args
      usage(argv[0]);
   }

   err = FTDIDevice_Open(&dev);
   if (err) 
   {
      fprintf(stderr, "USB: Error opening device\n");
      return 1;
   }

   HW_Setup(&dev, bitstream);
   HW_Trace(&dev, tracefile);

   FTDIDevice_Close(&dev);
   
   changeterminal(0);
}
Esempio n. 7
0
PSPI_PUBLIC_CONTEXT HSP_Init(PVOID Context) 
{
	LPTSTR          				ActivePath = (LPTSTR) Context; // HKLM\Drivers\Active\xx
	PSPI_PUBLIC_CONTEXT		pPublicSpi = NULL;
	BOOL            				bResult = TRUE;
	DWORD           			dwHwIntr=0;

	RETAILMSG(1,(TEXT("++HSP_Init Function\r\n")));
	RETAILMSG(1,(TEXT("Active Path : %s\n"), ActivePath));

	if ( !(pPublicSpi = (PSPI_PUBLIC_CONTEXT)LocalAlloc( LPTR, sizeof(SPI_PUBLIC_CONTEXT) )) )
	{
		RETAILMSG(1,(TEXT("Can't not allocate for SPI Context\n")));
		return NULL;
	}


    if(!HW_Init(pPublicSpi)) 
    {
    	RETAILMSG(1,(TEXT("HW_Init is failed\n")));
    	return NULL;
    } else {
    	RETAILMSG(1,(TEXT("HW_Init is completed\n")));
    }
    
	do 
	{
		InitializeCriticalSection(&(pPublicSpi->CsRxAccess));
		InitializeCriticalSection(&(pPublicSpi->CsTxAccess));

		//Rx Thread
		pPublicSpi->hRxEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
		
		pPublicSpi->hRxThread = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)ThreadForRx, (LPVOID)pPublicSpi, 0, (LPDWORD)&pPublicSpi->dwRxThreadId);
		if (pPublicSpi->hRxThread == NULL)
		{
			RETAILMSG(1,(TEXT("SPI Rx Thread creation error!!!\n")));
			bResult = FALSE;
			break;
		}
		
		pPublicSpi->hRxDoneEvent = CreateEvent(NULL, FALSE, FALSE, NULL);		
		pPublicSpi->hRxIntrDoneEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
		
		//Tx Thread
		pPublicSpi->hTxEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
		
		pPublicSpi->hTxThread = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)ThreadForTx, (LPVOID)pPublicSpi, 0, (LPDWORD)&pPublicSpi->dwTxThreadId);
		if (pPublicSpi->hTxThread == NULL)
		{
			RETAILMSG(1,(TEXT("SPI Dma Thread creation error!!!\n")));
			bResult = FALSE;
			break;
		}
		
		pPublicSpi->hTxDoneEvent = CreateEvent(NULL, FALSE, FALSE, NULL);		
		pPublicSpi->hTxIntrDoneEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
		
		//Spi ISR
		pPublicSpi->dwSpiSysIntr = SYSINTR_NOP;
		dwHwIntr = IRQ_SPI1;		//HS-SPI

		pPublicSpi->hSpiEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
		
		if (!KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, &dwHwIntr, sizeof(DWORD), &pPublicSpi->dwSpiSysIntr, sizeof(DWORD), NULL))
		{
			RETAILMSG(1,(TEXT("Failed to request the SPI sysintr.\n")));
			pPublicSpi->dwSpiSysIntr = SYSINTR_UNDEFINED;
			bResult = FALSE;
			break;
		}

		if (!InterruptInitialize(pPublicSpi->dwSpiSysIntr, pPublicSpi->hSpiEvent, NULL, 0))
		{
			RETAILMSG(1,(TEXT("SPI Interrupt Initialization failed!!!\n")));
			bResult = FALSE;
			break;
		}

		pPublicSpi->hSpiThread = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)ThreadForSpi, (LPVOID)pPublicSpi, 0, (LPDWORD)&pPublicSpi->dwSpiThreadId);
		if (pPublicSpi->hSpiThread == NULL)
		{
			RETAILMSG(1,(TEXT("SPI ISR Thread creation error!!!\n")));
			bResult = FALSE;
			break;
		}
		
		
		//Rx DMA Done ISR
		pPublicSpi->dwRxDmaDoneSysIntr = SYSINTR_NOP;	
		dwHwIntr = IRQ_DMA3;	

		pPublicSpi->hRxDmaDoneDoneEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
		pPublicSpi->hRxDmaDoneEvent = CreateEvent(NULL, FALSE, FALSE, NULL);


		if (!KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, &dwHwIntr, sizeof(DWORD), &pPublicSpi->dwRxDmaDoneSysIntr, sizeof(DWORD), NULL))
		{
			RETAILMSG(1,(TEXT("Failed to request the SPI_DMA sysintr.\n")));
			pPublicSpi->dwRxDmaDoneSysIntr = SYSINTR_UNDEFINED;
			bResult = FALSE;
			break;
		}

		if (!InterruptInitialize(pPublicSpi->dwRxDmaDoneSysIntr, pPublicSpi->hRxDmaDoneEvent, NULL, 0))
		{
			RETAILMSG(1,(TEXT("DMA Interrupt Initialization failed!!!\n")));
			bResult = FALSE;
			break;
		}

		pPublicSpi->hRxDmaDoneThread = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)ThreadForRxDmaDone, (LPVOID)pPublicSpi, 0, (LPDWORD)&pPublicSpi->dwRxDmaDoneThreadId);
		if (pPublicSpi->hRxDmaDoneThread == NULL)
		{
			RETAILMSG(1,(TEXT("SPI Dma Thread creation error!!!\n")));
			bResult = FALSE;
			break;
		}
		
		//Tx DMA Done ISR
		pPublicSpi->dwTxDmaDoneSysIntr = SYSINTR_NOP;
		dwHwIntr = IRQ_DMA4;		
		
		pPublicSpi->hTxDmaDoneDoneEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
		pPublicSpi->hTxDmaDoneEvent = CreateEvent(NULL, FALSE, FALSE, NULL);


		if (!KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, &dwHwIntr, sizeof(DWORD), &pPublicSpi->dwTxDmaDoneSysIntr, sizeof(DWORD), NULL))
		{
			RETAILMSG(1,(TEXT("Failed to request the SPI_DMA sysintr.\n")));
			pPublicSpi->dwTxDmaDoneSysIntr = SYSINTR_UNDEFINED;
			bResult = FALSE;
			break;
		}

		if (!InterruptInitialize(pPublicSpi->dwTxDmaDoneSysIntr, pPublicSpi->hTxDmaDoneEvent, NULL, 0))
		{
			RETAILMSG(1,(TEXT("DMA Interrupt Initialization failed!!!\n")));
			bResult = FALSE;
			break;
		}

		pPublicSpi->hTxDmaDoneThread = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)ThreadForTxDmaDone, (LPVOID)pPublicSpi, 0, (LPDWORD)&pPublicSpi->dwTxDmaDoneThreadId);
		if (pPublicSpi->hTxDmaDoneThread == NULL)
		{
			RETAILMSG(1,(TEXT("SPI Dma Thread creation error!!!\n")));
			bResult = FALSE;
			break;
		}
	} while (0);
	
	
	if(bResult) return pPublicSpi;
	else 		return NULL;
}