freeRTOS操作系统机器人实现
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

130 lines
3.3 KiB

/**
******************************************************************************
* @file bsp_cap.c
* @author Radkil
* @brief Timer capture device file
******************************************************************************
* @attention
******************************************************************************
*/
#include "bsp_cap.h"
#ifdef USE_TIMER
#include "com.h"
volatile uint8_t g_timer2_is_full = 0;
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if (htim==(&htim2))
{
g_timer2_is_full = 1;
}
}
void tim_main_loop(void)
{
static int iOnceFlag = 1;
if (iOnceFlag)
{
HAL_TIM_Base_Start_IT(&htim2);
iOnceFlag = 0;
}
if (g_timer2_is_full)
{
void Myprint_timer(void);
Myprint_timer();
g_timer2_is_full = 0;
}
}
#if 0
int lua_capture_val[20] = {0, 0, 0, 0};
uint8_t TIMCH_CAPTURE_STA[20]={0};
uint32_t TIMCH_CAPTURE_VAL[20];
void CAP_init(void)
{
HAL_TIM_IC_Start_IT(&CAP_tim1,TIM_CHANNEL_1);
// HAL_TIM_IC_Start_IT(&CAP_tim1,TIM_CHANNEL_2);
// HAL_TIM_IC_Start_IT(&CAP_tim1,TIM_CHANNEL_3);
// HAL_TIM_IC_Start_IT(&CAP_tim1,TIM_CHANNEL_4);
__HAL_TIM_ENABLE_IT(&CAP_tim1,TIM_IT_UPDATE);
}
static void __HAL_TIM_IC_CaptureCallback(uint8_t i,TIM_HandleTypeDef *htim, uint32_t chn, uint32_t por1,uint32_t por2)
{
if((TIMCH_CAPTURE_STA[i]&0X80)==0)
{
if(TIMCH_CAPTURE_STA[i]&0X40)
{
TIMCH_CAPTURE_STA[i]|=0X80;
TIMCH_CAPTURE_VAL[i]=HAL_TIM_ReadCapturedValue(htim,chn);
TIM_RESET_CAPTUREPOLARITY(htim,chn);
TIM_SET_CAPTUREPOLARITY(htim,chn,por1);
}else
{
TIMCH_CAPTURE_STA[i]=0;
TIMCH_CAPTURE_VAL[i]=0;
TIMCH_CAPTURE_STA[i]|=0X40;
__HAL_TIM_DISABLE(htim);
__HAL_TIM_SET_COUNTER(htim,0);
TIM_RESET_CAPTUREPOLARITY(htim,chn);
TIM_SET_CAPTUREPOLARITY(htim,chn,por2);
__HAL_TIM_ENABLE(htim);
}
}
}
bool __Get_Capture(uint8_t i)
{
if(TIMCH_CAPTURE_STA[i]&0X80)
{
lua_capture_val[i]=TIMCH_CAPTURE_STA[i]&0X3F;
lua_capture_val[i]*=0XFFFFFFFF;
lua_capture_val[i]+=TIMCH_CAPTURE_VAL[i];
TIMCH_CAPTURE_STA[i]=0;
return 1;
}
else
return 0;
}
static void __HAL_TIM_PeriodElapsedCallback(uint8_t i)
{
if((TIMCH_CAPTURE_STA[i]&0X80)==0)
{
if(TIMCH_CAPTURE_STA[i]&0X40)
{
if((TIMCH_CAPTURE_STA[i]&0X3F)==0X3F)
{
TIMCH_CAPTURE_STA[i]|=0X80;
TIMCH_CAPTURE_VAL[i]=0XFFFFFFFF;
}else TIMCH_CAPTURE_STA[i]++;
}
}
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim==(&CAP_tim1))
{
__HAL_TIM_PeriodElapsedCallback(0);
/* __HAL_TIM_PeriodElapsedCallback(1); */
/* __HAL_TIM_PeriodElapsedCallback(2); */
/* __HAL_TIM_PeriodElapsedCallback(3); */
}
}
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
if(htim==(&CAP_tim1))
{
__HAL_TIM_IC_CaptureCallback(0,&CAP_tim1,TIM_CHANNEL_1,TIM_ICPOLARITY_RISING,TIM_ICPOLARITY_FALLING);
/* __HAL_TIM_IC_CaptureCallback(1,&CAP_tim1,TIM_CHANNEL_2,TIM_ICPOLARITY_RISING,TIM_ICPOLARITY_FALLING); */
/* __HAL_TIM_IC_CaptureCallback(2,&CAP_tim1,TIM_CHANNEL_3,TIM_ICPOLARITY_RISING,TIM_ICPOLARITY_FALLING); */
/* __HAL_TIM_IC_CaptureCallback(3,&CAP_tim1,TIM_CHANNEL_4,TIM_ICPOLARITY_RISING,TIM_ICPOLARITY_FALLING); */
}
}
#endif
#endif