Обновление
This commit is contained in:
parent
497d5664c9
commit
1b3d136707
|
|
@ -10,6 +10,11 @@
|
|||
#include "fc7xxx_driver_tpu.h"
|
||||
#include "interrupt_manager.h"
|
||||
|
||||
typedef struct {
|
||||
uint32_t ActiveTime;
|
||||
uint32_t PeriodTime;
|
||||
} tPwmCaptureData;
|
||||
|
||||
typedef struct {
|
||||
|
||||
TPU_InterruptCfgType etpu_Int_config_tbl;
|
||||
|
|
@ -17,19 +22,20 @@ typedef struct {
|
|||
|
||||
uint8_t TPU_CAPTURE_CHANNEL;
|
||||
|
||||
osMessageQueueId_t q_u32PeriodActiveTime;
|
||||
|
||||
} tPwmCaptureFlagchip;
|
||||
|
||||
|
||||
void PWM_Capture_Initial(
|
||||
tPwmCaptureFlagchip *env,
|
||||
uint32_t PeriodTime,
|
||||
uint32_t ActiveTime,
|
||||
bool isDeInit,
|
||||
uint8_t TPU_CAPTURE_CHANNEL,
|
||||
uint8 TPU0_CH_PRIORITY,
|
||||
uint8 TPU_PRIORITY,
|
||||
TPU_EventCallbackType Bsp_Tpu_PwmCallback,
|
||||
TPU_TCR1OverflowCallbackType Bsp_Tpu_OverflowCallBack);
|
||||
|
||||
tPwmIO vPwmCaptureGetIo(tPwmCaptureFlagchip *env);
|
||||
tPwmCaptureIO vPwmCaptureGetIo(tPwmCaptureFlagchip *env);
|
||||
|
||||
void Get_Set_Tpu_PwmCaptureCallback(tPwmCaptureFlagchip *env);
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
//
|
||||
#include <SystemDelayInterface.h>
|
||||
#include "PwmCaptureFlagchip.h"
|
||||
|
||||
#include "PwmFlagchip.h"
|
||||
|
||||
void Get_Set_Tpu_PwmCaptureCallback(tPwmCaptureFlagchip *env) {
|
||||
if (env->etpu_captureconfig_tbl.eMeasureMode == TPU_PeriodMeasurement) {
|
||||
|
|
@ -11,22 +11,28 @@ void Get_Set_Tpu_PwmCaptureCallback(tPwmCaptureFlagchip *env) {
|
|||
} else {
|
||||
TPU_CaptureMeasActivePeriodServiceReq(env->TPU_CAPTURE_CHANNEL, &env->etpu_captureconfig_tbl);
|
||||
}
|
||||
|
||||
tPwmCaptureData data;
|
||||
data.ActiveTime = env->etpu_captureconfig_tbl.u32ActiveTime;
|
||||
data.PeriodTime = env->etpu_captureconfig_tbl.u32PeriodTime;
|
||||
|
||||
osMessageQueuePut(env->q_u32PeriodActiveTime, &data, 0, 0);
|
||||
}
|
||||
|
||||
void PWM_Capture_Initial(
|
||||
tPwmCaptureFlagchip *env,
|
||||
uint32_t PeriodTime,
|
||||
uint32_t ActiveTime,
|
||||
bool isDeInit,
|
||||
uint8_t TPU_CAPTURE_CHANNEL,
|
||||
uint8 TPU0_CH_PRIORITY,
|
||||
uint8 TPU_PRIORITY,
|
||||
TPU_EventCallbackType Bsp_Tpu_PwmCallback,
|
||||
TPU_TCR1OverflowCallbackType Bsp_Tpu_OverflowCallBack) {
|
||||
|
||||
env->q_u32PeriodActiveTime = osMessageQueueNew(1, sizeof(tPwmCaptureData), NULL);
|
||||
|
||||
env->etpu_captureconfig_tbl.u32PeriodTime = 0u;
|
||||
env->etpu_captureconfig_tbl.eMeasureMode = TPU_DutyMeasurementActiveHigh;
|
||||
env->etpu_captureconfig_tbl.eInputType = TPUE_DETECT_FALLING_EDGE_ONLY;
|
||||
env->etpu_captureconfig_tbl.u32SampleTime = 80000; // Ensure sample time > period
|
||||
env->etpu_captureconfig_tbl.u32SampleTime = PERIOD_TICKS * 4;//80000; // Ensure sample time > period
|
||||
env->etpu_captureconfig_tbl.u32ActiveTime = 0;
|
||||
env->etpu_captureconfig_tbl.LastTime = 0;
|
||||
env->etpu_captureconfig_tbl.StartTime = 0;
|
||||
|
|
@ -42,34 +48,64 @@ void PWM_Capture_Initial(
|
|||
|
||||
env->TPU_CAPTURE_CHANNEL = TPU_CAPTURE_CHANNEL;
|
||||
|
||||
|
||||
TPU_DeInit();
|
||||
if (isDeInit) {
|
||||
TPU_DeInit();
|
||||
}
|
||||
TPU_Init();
|
||||
TPU_CaptureModeInit(TPU_CAPTURE_CHANNEL, &env->etpu_captureconfig_tbl);
|
||||
TPU_InitChannelInterrupt(TPU_CAPTURE_CHANNEL, &env->etpu_Int_config_tbl);
|
||||
|
||||
if (TPU_CAPTURE_CHANNEL <= 7) {
|
||||
NVIC_SetPriority(TPU0_CH0_7_IRQn, TPU_PRIORITY);
|
||||
NVIC_EnableIRQ(TPU0_CH0_7_IRQn);
|
||||
NVIC_SetPriority(TPU0_CH0_7_IRQn, 1);
|
||||
} else if (TPU_CAPTURE_CHANNEL <= 15) {
|
||||
NVIC_SetPriority(TPU0_CH8_15_IRQn, TPU_PRIORITY);
|
||||
NVIC_EnableIRQ(TPU0_CH8_15_IRQn);
|
||||
NVIC_SetPriority(TPU0_CH8_15_IRQn, 2);
|
||||
} else if (TPU_CAPTURE_CHANNEL <= 23) {
|
||||
NVIC_SetPriority(TPU0_CH16_23_IRQn, TPU_PRIORITY);
|
||||
NVIC_EnableIRQ(TPU0_CH16_23_IRQn);
|
||||
NVIC_SetPriority(TPU0_CH16_23_IRQn, 3);
|
||||
} else if (TPU_CAPTURE_CHANNEL <= 31) {
|
||||
NVIC_SetPriority(TPU0_CH24_31_IRQn, TPU_PRIORITY);
|
||||
NVIC_EnableIRQ(TPU0_CH24_31_IRQn);
|
||||
NVIC_SetPriority(TPU0_CH24_31_IRQn, 4);
|
||||
}
|
||||
|
||||
}
|
||||
/*
|
||||
tPwmIO vPwmCaptureGetIo(tPwmCaptureFlagchip *env) {
|
||||
tPwmIO io = {
|
||||
|
||||
static uint8_t vGetPwm(tPwmCaptureFlagchip *env) {
|
||||
|
||||
uint8_t percent = 0;
|
||||
|
||||
tPwmCaptureData data;
|
||||
|
||||
osStatus_t cPeriodActiveTime = osMessageQueueGet(env->q_u32PeriodActiveTime, &data, 0, 1000);
|
||||
|
||||
if (cPeriodActiveTime == osOK) {
|
||||
|
||||
if ((data.ActiveTime == 0) || (data.PeriodTime == 0)) {
|
||||
|
||||
cPeriodActiveTime = osMessageQueueGet(env->q_u32PeriodActiveTime, &data, 0, 1000);
|
||||
|
||||
if (cPeriodActiveTime == osOK) {
|
||||
percent = data.ActiveTime * 100 / data.PeriodTime;
|
||||
}
|
||||
|
||||
} else {
|
||||
percent = data.ActiveTime * 100 / data.PeriodTime;
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
}
|
||||
|
||||
return percent;
|
||||
}
|
||||
|
||||
tPwmCaptureIO vPwmCaptureGetIo(tPwmCaptureFlagchip *env) {
|
||||
|
||||
tPwmCaptureIO io = {
|
||||
.env = env,
|
||||
.run = (PwmIOTransaction) vPwmRun,
|
||||
.setActivePercent = (PwmIOTransactionSetActivePercent) setActivePercent
|
||||
.getPwm = (PwmIOCaptureTransaction) vGetPwm,
|
||||
};
|
||||
|
||||
return io;
|
||||
}
|
||||
*/
|
||||
Loading…
Reference in New Issue