Пример #1
0
static void setup_pwms(void)
{
  /* for pin alternate functions, refer to CD00277537.pdf, table 4 */

  TIM_TimeBaseInitTypeDef TIM_TimeBase;
  GPIO_InitTypeDef GPIO_InitStruct;

  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

  /* configure gpio */
  GPIO_StructInit(&GPIO_InitStruct);
  GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;
  GPIO_InitStruct.GPIO_Speed = GPIO_Speed_40MHz;
  GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
  GPIO_Init(GPIOB, &GPIO_InitStruct);
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource4, GPIO_AF_TIM3);
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource5, GPIO_AF_TIM3);

  /* init timebase. PWM freq equals 10 khz */
  TIM_TimeBaseStructInit(&TIM_TimeBase);
  TIM_TimeBase.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBase.TIM_Prescaler = 8 - 1; /* for 1 Mhz clock */
  TIM_TimeBase.TIM_Period = 0x100 - 1; /* 10 khz */
  TIM_TimeBase.TIM_ClockDivision = TIM_CKD_DIV1;
  TIM_TimeBaseInit(TIM3, &TIM_TimeBase);

  set_lpwm(100);
  set_rpwm(100);

  TIM_Cmd(TIM3, ENABLE);
}
Пример #2
0
void TIM2_IRQHandler(void)
{
  /* 10hz frequency */

  /* todo: reduce the scope by capturing variables */
  disableInterrupts();

  /* forward */
  if ((dir != 1) || (speed <= 0)) goto on_done;

  if (lenc < speed) lpwm += 2; /* I_up */
  else if (lenc > speed) lpwm -= 2;

  if (renc < speed) rpwm += 2;
  else if (renc > speed) rpwm -= 2;

  err = clamp(err + lenc - renc, -128, 128);

  /* reset encoder counters */
  lenc = 0;
  renc = 0;

  lpwm = clamp(CONFIG_START_POWER_FWD + lpwm - err, 0, 255);
  rpwm = clamp(CONFIG_START_POWER_FWD + rpwm - err, 0, 255);

  set_lpwm(lpwm);
  set_rpwm(rpwm);

 on_done:
  TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
  enableInterrupts();
}
Пример #3
0
void mcs_stop(void)
{
  disableInterrupts();

  set_lpwm(128);
  set_rpwm(128);

  enableInterrupts();
}
Пример #4
0
void pnp_sleep_wk(void *context)
{
	_irqL irqL;
	_adapter *padapter = (_adapter *)context;
	struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
	struct pwrctrl_priv *pwrctrl = &padapter->pwrctrlpriv;


	RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("pnp_sleep_wk ===>\n"));

	_enter_critical(&pmlmepriv->lock, &irqL );

	if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)
	{
		indicate_disconnect(padapter); //will clr Linked_state; before this function, we must have chked whether  issue dis-assoc_cmd or not
		free_assoc_resources(padapter);
#ifndef CONFIG_POWER_DOWN_MODE
		disassoc_cmd(padapter);
#endif
	}

	_exit_critical(&pmlmepriv->lock, &irqL );

	RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("pnp_sleep_wk:fwstate:%d\n", pmlmepriv->fw_state));

#ifdef CONFIG_POWER_DOWN_MODE
	//before enter powerdown mode, we must ensure FW in S4 state.
	if (padapter->pwrctrlpriv.pwr_mode > PS_MODE_ACTIVE) {
		padapter->pwrctrlpriv.pwr_mode = PS_MODE_ACTIVE;
		_enter_pwrlock(&(padapter->pwrctrlpriv.lock));
		set_rpwm(padapter, PS_STATE_S4);
		_exit_pwrlock(&(padapter->pwrctrlpriv.lock));
	}

	while (pwrctrl->cpwm != PS_STATE_S4) {
		//waiting FW to become ACTIVE.
		msleep_os(10);
	}
#endif

	write16(padapter, SDIO_HIMR, 0);

	pwrctrl->pnp_bstop_trx = _TRUE;

	padapter->hw_init_completed = _FALSE;

	NdisMSetInformationComplete(padapter->hndis_adapter, NDIS_STATUS_SUCCESS);

	RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("pnp_sleep_wk <===\n"));
}