/*
* pwm_key_read.c
*
* Created on: 2023Äê7ÔÂ10ÈÕ
* Author: luo
*/
#include "pwm_key_read.h"
#include "all.h"
#include "MyPrintf.h"
#define T_100us_CNT 19230 //100000ns/5.2ns=19230.7
#define T_10us_CNT 1923 //10000ns/5.2ns=1923.07
#define T_12us_CNT 2307 //12000ns/5.2ns=2307
#define T_500us_CNT 96154
PWM_KEY_t Pwm_Key;
uint32_t pwm_frc_cnt_buf[MAX_PWM_BUF_LEN];
uint32_t over_time_cnt_time_buf[MAX_PWM_BUF_LEN];
//============================add by luo 23-0719 test input pwm frequany========================================
//excute in gpio intruupt
static uint8_t pwm_get_step;
void pwmGpioIsr()
{
static uint32_t pre_time_systik_10us=0;
static uint16_t i;
static uint32_t pwm_cnt=0;
static uint8_t pwm_H_cnt,pwm_L_cnt;
static uint32_t pre_systik_cnt,diff_cnt,diff_cnt1;
static uint32_t systik_cnt_start=0,over_time_cnt=0;
uint32_t cur_time;
static bool led_flg;
if(PWM_INTR_CHECK)
{
PWM_INTR_CLEAR1;
PWM_INTR_CLEAR0;
//----------test speed------------
#if 1
led_flg^=1;
if(led_flg)
//if(PWM_H_L_CHECK)
{
GPIO_Init_way1(GPIO_P19, GPIO_Mode_Out_HIGH);
//PIN_18_HIGH;
}
else
{
GPIO_Init_way1(GPIO_P19, GPIO_Mode_Out_LOW);
//PIN_18_LOW;
}
#endif
//-----------------test time---------------------------
#if 0
pwm_cnt++;
cur_time=SYS_TICK_CNT;//systick counter 1 is 5.2ns
//if(pre_systik_cnt!=cur_time)
{
//diff_cnt=(pre_systik_cnt>cur_time)? pre_systik_cnt-cur_time : pre_systik_cnt+(sys_info.systick_reload-cur_time);
//pre_systik_cnt=cur_time;
over_time_cnt=(systik_cnt_start>cur_time)? systik_cnt_start-cur_time : systik_cnt_start+(sys_info.systick_reload-cur_time);//set start count pwm time
if(over_time_cnt>=192300)
{
pwm_frc_cnt_buf[i]=pwm_cnt;
i++;
if(i>=250)i=0;
systik_cnt_start=cur_time;
pwm_cnt=0;
}
}
#endif
//-------------------------------------------
#if 1
cur_time=SYS_TICK_CNT;//systick counter 1 is 5.2ns
pwm_cnt++;
if(pre_systik_cnt!=cur_time)
{
diff_cnt=(pre_systik_cnt>cur_time)? pre_systik_cnt-cur_time : pre_systik_cnt+(sys_info.systick_reload-cur_time);
pre_systik_cnt=cur_time;
}
over_time_cnt=(systik_cnt_start>cur_time)? systik_cnt_start-cur_time : systik_cnt_start+(sys_info.systick_reload-cur_time);//set start count pwm time
switch (pwm_get_step)
{
case GET_IDLE:
if(diff_cnt<T_10us_CNT)
{
Pwm_Key.getFlag=GET_START;
pwm_get_step=GET_START;
systik_cnt_start=cur_time;//set start count pwm time
pwm_cnt=0;
i=0;
}
else if(diff_cnt>=T_12us_CNT)
{
Pwm_Key.getFlag=GET_IDLE;
pwm_get_step=GET_IDLE;
pwm_cnt=0;
i=0;
}
break;
case GET_START:
if(diff_cnt>=T_12us_CNT)
{
systik_cnt_start=cur_time;//set start count pwm time
over_time_cnt_time_buf[i]=over_time_cnt;
pwm_frc_cnt_buf[i]=pwm_cnt;
pwm_cnt=0;
i++;
Pwm_Key.date_len=i;
pwm_get_step=GET_OK;//add by luo 23-0721
}
/*if(pwm_frc_cnt_buf[i]<11)//not 100khz
{
pwm_get_step=GET_IDLE;
}
else
{
pwm_get_step=GET_OK;
pwm_cnt=0;
i++;
Pwm_Key.date_len=i;
}*/
break;
case GET_DATE:
if(diff_cnt>=T_10us_CNT)
{
systik_cnt_start=cur_time;//set start count pwm time
over_time_cnt_time_buf[i]=over_time_cnt;
pwm_frc_cnt_buf[i]=pwm_cnt;
pwm_cnt=0;
pwm_get_step=GET_OK;
i++;
Pwm_Key.date_len=i;
}
break;
case GET_OK:
Pwm_Key.getFlag=GET_OK;
break;
default:
break;
}
#endif
}
}
#if 1
void test_pwm_cnt()
{
static struct timer_t time1;
static uint8_t i=0;
if(IsTimeOut(&time1)>0)
{
TimeOutSet(&time1,1000);
MyPrintf("%d\r\n",pwm_frc_cnt_buf[5]);
}
/*if(Pwm_Key.getFlag==GET_OK)
{
for(i=0;i<Pwm_Key.date_len;i++)
{
//MyPrintf("[%d]%d ",i,pwm_frc_cnt_buf[i]);
MyPrintf("pause=%d cnt=%d \r\n",pwm_frc_cnt_buf[i],over_time_cnt_time_buf[i]);
}
Pwm_Key.getFlag=GET_IDLE;
pwm_get_step=GET_IDLE;
}*/
}
#endif