void sc_extint_clear(ioportid_t port, uint8_t pin) { uint8_t need_stop = 1; uint8_t i; EXTChannelConfig cfg; (void)port; chMtxLock(&cfg_mtx); chDbgAssert(pin < EXT_MAX_CHANNELS , "EXT pin number outside range"); chDbgAssert(extcfg.channels[pin].cb != NULL, "EXT pin cb not registered"); // FIXME: should check that port matches as well? cfg.cb = NULL; cfg.mode = EXT_CH_MODE_DISABLED; extSetChannelMode(&EXTD1, pin, &cfg); for (i = 0; i < EXT_MAX_CHANNELS; ++i) { if (extcfg.channels[pin].cb != NULL) { need_stop = 0; break; } } if (need_stop) { extStop(&EXTD1); } chMtxUnlock(&cfg_mtx); }
//----------------------------------------------------------------------------- int kuroBoxStop(void) { kbg_setLED3(1); extStop(&EXTD1); kuroBoxExternalDisplayStop(); kuroBoxConfigStop(); kuroBoxMenuStop(); kuroBoxWriterStop(); kuroBoxVectorNavStop(&VND1); kuroBoxTimeStop(); kuroBoxGPSStop(); kuroBoxButtonsStop(); kuroBoxScreenStop(); kuroBoxADCStop(); #ifdef HAVE_BLINK_THREAD chThdTerminate(blinkerThread); chThdWait(blinkerThread); #endif // HAVE_BLINK_THREAD sdcStop(&SDCD1); spiStop(&SPID1); kuroBoxSerialStop(); chSysDisable(); kbg_setLED1(0); kbg_setLED2(0); kbg_setLED3(0); return KB_OK; }
void sc_pwr_rtc_sleep(int timeout_sec) { EXTChannelConfig cfg; EXTConfig extcfg; DEBUG_TOGGLE(1, true); // Allow RTC write RTC->WPR = 0xCA; RTC->WPR = 0x53; while (!(RTC->ISR & RTC_ISR_WUTWF)){ RTC->CR &= ~RTC_CR_WUTE; } DEBUG_TOGGLE(2, true); RTC->CR &= (~7); // Clear WUCKSEL RTC->CR |= 4; // Wakeup clock = ck_spre (1Hz) RTC->WUTR = timeout_sec; DEBUG_TOGGLE(3, true); // Start the wakeup timer PWR->CR |= PWR_CR_CWUF; RTC->ISR &= ~RTC_ISR_WUTF; RTC->CR |= RTC_CR_WUTE | RTC_CR_WUTIE; DEBUG_TOGGLE(4, true); bzero(&cfg, sizeof(cfg)); bzero(&extcfg, sizeof(extcfg)); cfg.mode = EXT_CH_MODE_RISING_EDGE | EXT_CH_MODE_AUTOSTART; cfg.cb = _empty_cb; extStart(&EXTD1, &extcfg); extSetChannelMode(&EXTD1, 22, &cfg); DEBUG_TOGGLE(5, true); SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; PWR->CR |= (PWR_CR_LPDS/* | PWR_CR_FPDS*/ | PWR_CR_CSBF | PWR_CR_CWUF); PWR->CR &= ~PWR_CR_PDDS; __WFI(); SCB->SCR &= ~SCB_SCR_SLEEPDEEP_Msk; stm32_clock_init(); DEBUG_TOGGLE(6, true); extChannelDisable(&EXTD1, 22); extStop(&EXTD1); RTC->CR &= ~RTC_CR_WUTE; RTC->ISR &= ~RTC_ISR_WUTF; RTC->WPR = 0; // Relock registers }
/** \brief DeInit/Cleanup HydraNFC functions * * \param con t_hydra_console*: hydra console (optional can be NULL if unused) * \return void * */ void hydranfc_cleanup(t_hydra_console *con) { (void)con; if(key_sniff_thread != NULL) { chThdTerminate(key_sniff_thread); chThdWait(key_sniff_thread); key_sniff_thread = NULL; } bsp_spi_deinit(BSP_DEV_SPI2); extStop(&EXTD1); /* deinit GPIO config (reinit using hydrabus_init() */ deinit_gpio(); }
void ExtiPnc::stop(void){ extStop(&EXTD1); ready = false; }
static THD_FUNCTION(ThreadButton, arg) { (void)arg; bool bfs; bool bns; chRegSetThreadName("ON_ext"); while(true){ /** lock "pause" interupt task **/ chSysLock(); tp_button = chThdGetSelfX(); chSchGoSleepS(CH_STATE_SUSPENDED); chSysUnlock(); extStop(&EXTD1); /**disable EXT driver **/ pwmEnableChannel(&PWMD4, 1, 255); chThdSleep(5000); pwmEnableChannel(&PWMD4, 1, 0); chThdSleep(5000); pwmEnableChannel(&PWMD4, 1, 255); chThdSleep(5000); pwmEnableChannel(&PWMD4, 1, 0); chThdSleep(5000); pwmEnableChannel(&PWMD4, 1, 255); chThdSleep(5000); pwmEnableChannel(&PWMD4, 1, 0); chThdSleep(5000); pwmEnableChannel(&PWMD4, 1, 255); chThdSleep(5000); pwmEnableChannel(&PWMD4, 1, 0); chThdSleep(5000); pwmEnableChannel(&PWMD4, 1, 255); chThdSleep(5000); pwmEnableChannel(&PWMD4, 1, 0); chThdSleep(5000); pwmEnableChannel(&PWMD4, 1, 255); chThdSleep(5000); pwmEnableChannel(&PWMD4, 1, 0); chThdSleep(5000); pwmEnableChannel(&PWMD4, 1, 255); chThdSleep(5000); pwmEnableChannel(&PWMD4, 1, 0); chThdSleep(5000); /** READ button pin**/ bns = palReadPad(GPIOC,button_ID); if ( !bns){ switch(button_ID){ case 0: CanWriteDATA( DEVICE_ID_IN_BCC , BCC_ID ,inttofloat(TPMCCV)); //CanWriteDATA( 101 ,1202 ,inttofloat(8)); break; case 1: CanWriteDATA( DEVICE_ID_IN_BCC ,BCC_ID ,inttofloat(FCMCCV)); //CanWriteDATA( 101 ,1202 ,inttofloat(4)); break; case 2: CanWriteDATA( DEVICE_ID_IN_BCC ,BCC_ID ,inttofloat(OPMCCV)); //CanWriteDATA( 101 ,1202 ,inttofloat(2)); break; case 3: CanWriteDATA( DEVICE_ID_IN_BCC ,BCC_ID ,inttofloat(SBMCCV)); //CanWriteDATA( 101 ,1202 ,inttofloat(1)); break; } } StartEXT(); /** EXT driver On agen **/ } }