Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
0
//-----------------------------------------------------------------------------
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;
}
Ejemplo n.º 3
0
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
}
Ejemplo n.º 4
0
/** \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();
}
Ejemplo n.º 5
0
void ExtiPnc::stop(void){
  extStop(&EXTD1);
  ready = false;
}
Ejemplo n.º 6
0
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 **/
    }
}