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(); } }
/** * @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 } }
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(); } } }
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); }
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; }
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); }
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; }