Browse Source

update

master
Yuenold 3 years ago
parent
commit
8f9c95fec0
  1. 5
      APP/light.c
  2. 7
      APP/light.h
  3. 70
      APP/main.c
  4. 4
      APP/main.h
  5. 32
      APP/ozone_pwm_control.c
  6. 5
      APP/ozone_pwm_control.h
  7. 78
      APP/pwm.c
  8. 18
      APP/pwm.h
  9. 1204
      project_ozone/Listings/project_o.map
  10. 2
      project_ozone/Listings/startup_es8p5066.lst
  11. 116
      project_ozone/project_o.uvgui.admin
  12. 2
      project_ozone/project_o.uvopt
  13. 7
      project_ozone/project_o.uvproj

5
APP/light.c

@ -120,6 +120,8 @@ static void prv_time_light_control_schedule() {
prv_set_timing_light_mode(CLOSE_ALL_LED);
}
}
} else {
prv_set_timing_light_mode(CLOSE_ALL_LED);
}
}
@ -129,7 +131,7 @@ static void prv_time_light_control_schedule() {
void light_module_set_rgb_mode(rgb_light_mode_t mode) {
printf("light_module_set_rgb_mode %d\n", mode);
s_rgb_light_mode_config = RGB_COLOR_BLUE;
s_rgb_light_mode_config = mode;
prv_light_module_set_rgb_mode(mode);
}
@ -148,6 +150,7 @@ void light_module_close_all_light(void) {
light_module_set_rgb_mode(RGB_CLOSE);
light_module_set_autoshutdown_indicator_light(false);
light_module_set_rgb_flicker_mode(false);
prv_set_timing_light_mode(CLOSE_ALL_LED);
s_errornum = 0;
s_flicker = false;
s_autoshutdown_light_state = false;

7
APP/light.h

@ -9,9 +9,10 @@
typedef enum {
RGB_CLOSE = 0, /*关闭灯*/
RGB_COLOR_RED = 1, /*打开红灯*/
RGB_COLOR_GERRN = 2, /*打开绿灯*/
RGB_COLOR_BLUE = 3, /*打开蓝灯*/
RGB_COLOR_GERRN = 1, /*打开绿灯*/
RGB_COLOR_BLUE = 2, /*打开蓝灯*/
RGB_COLOR_RED = 3, /*打开红灯*/
} rgb_light_mode_t;
typedef enum {

70
APP/main.c

@ -41,17 +41,13 @@ static bool pwm_modble_enable_falg; //Ӳ
/***********************************************************************************************************************
* =======================================================HOOK======================================================== *
***********************************************************************************************************************/
void HOOK_pwm_module_set_pwm_duty(uint32_t frequency, uint32_t duty) {
set_pwm_modbul_freq_duty(frequency, duty);
port_fan_set(true); //
void HOOK_pwm_module_set_pwm_duty(uint32_t frequencyhz, uint32_t duty) {
set_pwm_modbul_freq_duty(frequencyhz, duty);
pwm_modble_enable_falg = true;
printf("work\r\n");
}
void HOOK_pwm_stop(void) {
set_pwm_modbul_freq_duty(1, 0); //PWM输出
port_fan_set(false); //
set_pwm_modbul_freq_duty(1000, 0); //PWM输出
pwm_modble_enable_falg = false;
printf("rest\r\n");
}
bool HOOK_pwm_is_enable(void) { return pwm_modble_enable_falg; }
int hook_get_autoshutdown_timecount() { return g_auto_shutdown_countdown_s; }
@ -84,9 +80,9 @@ void update_ozone_work_level(bool interval_work, WORK_LEVEL_T level) {
}
if (interval_work) {
ozone_pwm_control_module_set_pwm_output_2(1, 0, INTERVAL_WORK_PERIOD_MS,INTERVAL_WORK_DUTY);
ozone_pwm_control_module_set_pwm_output_2(1000, duty, INTERVAL_WORK_PERIOD_MS, INTERVAL_WORK_DUTY);
} else {
set_pwm_modbul_freq_duty(1, duty);
set_pwm_modbul_freq_duty(1000, duty);
}
light_module_set_rgb_mode(lightmode);
light_module_set_rgb_flicker_mode(interval_work);
@ -103,6 +99,7 @@ void shutdown(void) {
g_auto_shutdown_countdown_s = 0;
update_ozone_work_level(false, WORK_LEVEL_CLOSE);
port_fan_set(false); //
light_module_close_all_light();
}
@ -184,18 +181,28 @@ void onkey(zkey_t *key, zkey_state_t key_state) {
if (!g_auto_shutdown_flag) {
g_auto_shutdown_flag = true;
g_auto_shutdown_countdown_s = 0;
light_module_set_autoshutdown_indicator_light(true);
}
g_auto_shutdown_countdown_s += AUTO_SHUTDOWN_ONE_LIGHT_EQ_TIME_S;
if (g_auto_shutdown_countdown_s > AUTO_SHUTDOWN_ONE_LIGHT_EQ_TIME_S * 4) {
g_auto_shutdown_countdown_s = 0;
g_auto_shutdown_flag = false;
light_module_set_autoshutdown_indicator_light(false);
}
} else if (key == &s_keys[1] && key->cur_state == zks_falling_edge) {
/**
* @brief
*/
printf("process key[1] event\r\n");
if (g_setting_level == WORK_LEVEL_HIGHT) {
g_setting_level = WORK_LEVEL_LOW;
update_ozone_work_level(g_setting_interval_work_flag, WORK_LEVEL_LOW);
} else if (g_setting_level == WORK_LEVEL_MIDDLE) {
g_setting_level = WORK_LEVEL_HIGHT;
update_ozone_work_level(g_setting_interval_work_flag, WORK_LEVEL_HIGHT);
} else if (g_setting_level == WORK_LEVEL_LOW) {
g_setting_level = WORK_LEVEL_MIDDLE;
update_ozone_work_level(g_setting_interval_work_flag, WORK_LEVEL_MIDDLE);
}
} else if (key == &s_keys[2] && key->cur_state == zks_falling_edge) {
@ -213,6 +220,16 @@ void onkey(zkey_t *key, zkey_state_t key_state) {
shutdown();
}
}
#define DO_IT_EACH_MS(time) \
{ \
static uint32_t __ticket = 0; \
if (port_haspassedms(__ticket) > time) { \
__ticket = get_sys_ticket();
#define END() \
} \
}
/***********************************************************************************************************************
* =============================================================================================================
***********************************************************************************************************************/
@ -226,7 +243,6 @@ int main(void) {
unused_gpio_init();
gpio_init();
uart0_init();
t16_pa4_init();
//
zkey_init(&key_module);
@ -241,18 +257,17 @@ int main(void) {
/*******************************************************************************************************************
* ===================================================================================================== *
*******************************************************************************************************************/
port_do_debug_light_state();
DO_IT_EACH_MS(200) {
static uint8_t debug_led_state = 1;
debug_led_state = !debug_led_state;
port_debug_set(debug_led_state);
}
END()
/***********************************************************************************************************************
* =================================================================================================== *
***********************************************************************************************************************/
{
static uint32_t keylastprocess = 0;
if (port_haspassedms(keylastprocess) > KEY_PERIOD) {
keylastprocess = get_sys_ticket();
zkey_do_loop_in_each_period(NULL);
}
}
DO_IT_EACH_MS(KEY_PERIOD) { zkey_do_loop_in_each_period(NULL); }
END();
/***********************************************************************************************************************
* =============================================================================================== *
***********************************************************************************************************************/
@ -267,14 +282,11 @@ int main(void) {
* ======================================================================================================= *
***********************************************************************************************************************/
//
DO_IT_EACH_MS(1000) {
if (g_power_flag && g_auto_shutdown_flag) {
static uint32_t ticket = 0;
ticket = get_sys_ticket();
//
if (port_haspassedms(ticket) > 1000) {
ticket = get_sys_ticket();
if (g_auto_shutdown_countdown_s > 0) {
g_auto_shutdown_countdown_s -= 1;
printf("auto shutdown countdown %d\n", g_auto_shutdown_countdown_s);
} else {
g_auto_shutdown_flag = false;
/**
@ -283,16 +295,12 @@ int main(void) {
shutdown();
}
}
//
}
END();
/***********************************************************************************************************************
* =======================================================================================================
***********************************************************************************************************************/
{
static uint32_t ticket = 0;
if (port_haspassedms(ticket) > EXCEPTION_CHECK_PERIOD) {
ticket = get_sys_ticket();
DO_IT_EACH_MS(EXCEPTION_CHECK_PERIOD) {
/**
* @brief
* ADC的数值是否超出规定范围
@ -300,7 +308,7 @@ int main(void) {
if (false) {
}
}
}
END();
// End..................................
}
}

4
APP/main.h

@ -24,9 +24,9 @@
typedef enum {
WORK_LEVEL_CLOSE = 0, /*关闭PWM输出,关闭RGB*/
WORK_LEVEL_HIGHT = 1, /*高档*/
WORK_LEVEL_LOW = 1, /*低档*/
WORK_LEVEL_MIDDLE = 2, /*中档*/
WORK_LEVEL_LOW = 3, /*低档*/
WORK_LEVEL_HIGHT = 3, /*高档*/
} WORK_LEVEL_T;
typedef struct {

32
APP/ozone_pwm_control.c

@ -1,13 +1,13 @@
#include "ozone_pwm_control.h"
uint32_t s_hardware_frequency; //msPWM频率
uint32_t s_hardware_frequency; // hz
uint32_t s_hardware_duty; //msPWM占空比
uint32_t s_large_period; //ms
uint32_t s_large_duty = 100; //ms
uint32_t begin_ticket;
bool ozone_pwm_control_enable_falg = false;
void HOOK_pwm_module_set_pwm_duty(uint32_t frequency, uint32_t duty);
void HOOK_pwm_module_set_pwm_duty(uint32_t frequencyhz, uint32_t duty);
void HOOK_pwm_stop(void);
bool HOOK_pwm_is_enable(void);
@ -15,8 +15,6 @@ static void prv_update_begin_ticket(void) {
begin_ticket = get_sys_ticket(); //
}
void ozone_pwm_control_enable(void) { ozone_pwm_control_enable_falg = true; }
void ozone_pwm_control_disable(void) { ozone_pwm_control_enable_falg = false; }
bool ozone_pwm_control_is_enable(void) { return ozone_pwm_control_enable_falg; }
/**
@ -25,14 +23,8 @@ bool ozone_pwm_control_is_enable(void) { return ozone_pwm_control_enable_falg; }
* @param freq
* @param duty
*/
void ozone_pwm_control_module_set_pwm_output_1(uint32_t large_period, uint8_t large_duty) {
s_large_period = large_period;
s_large_duty = large_duty;
prv_update_begin_ticket();
ozone_pwm_control_enable();
if (large_duty == 100) {
ozone_pwm_control_disable();
}
void ozone_pwm_control_module_set_pwm_output_1(uint32_t freqhz, uint8_t hardware_duty) {
ozone_pwm_control_module_set_pwm_output_2(freqhz, hardware_duty, 100 * 1000, 100);
}
/**
* @brief PWM
@ -42,27 +34,25 @@ void ozone_pwm_control_module_set_pwm_output_1(uint32_t large_period, uint8_t la
* @param large_period
* @param large_duty
*/
void ozone_pwm_control_module_set_pwm_output_2(uint32_t hardware_period, uint8_t hardware_duty, uint32_t large_period,
uint8_t large_duty) {
s_hardware_frequency = hardware_period;
void ozone_pwm_control_module_set_pwm_output_2(uint32_t freqhz, uint8_t hardware_duty, uint32_t large_period, uint8_t large_duty) {
s_hardware_frequency = freqhz;
s_hardware_duty = hardware_duty;
s_large_period = large_period;
s_large_duty = large_duty;
prv_update_begin_ticket();
ozone_pwm_control_enable();
HOOK_pwm_module_set_pwm_duty(hardware_period, hardware_duty);
if (large_duty == 100) {
ozone_pwm_control_disable();
}
ozone_pwm_control_enable_falg = true;
HOOK_pwm_module_set_pwm_duty(freqhz, hardware_duty);
}
void ozone_pwm_control_module_stop_pwm(void) {}
void ozone_pwm_control_module_stop_pwm(void) { ozone_pwm_control_enable_falg = false; }
void ozone_pwm_control_module_loop(void) {
static uint32_t hardware_frequency;
static uint32_t hardware_duty;
if (ozone_pwm_control_is_enable() == false) { //使退
if (HOOK_pwm_is_enable()) {
HOOK_pwm_stop();
}
return;
}
if (port_haspassedms(begin_ticket) % s_large_period <= s_large_period * s_large_duty / 100) {

5
APP/ozone_pwm_control.h

@ -9,10 +9,11 @@
#include "port.h"
#include "system_ES8P5066.h"
void ozone_pwm_control_module_set_pwm_output_1(uint32_t large_period, uint8_t large_duty);
void ozone_pwm_control_module_set_pwm_output_1(uint32_t hardware_period, uint8_t hardware_duty);
void ozone_pwm_control_module_set_pwm_output_2(uint32_t hardware_period, uint8_t hardware_duty, uint32_t large_period,
uint8_t large_duty);
void ozone_pwm_control_module_set_pwm(uint32_t frequency, uint32_t duty);
void ozone_pwm_control_module_stop_pwm(void);
void ozone_pwm_control_module_loop(void);

78
APP/pwm.c

@ -1,6 +1,25 @@
#include "pwm.h"
#define CLCK 48
void t16_pa4_init(void) {
static double calculate_top(double target_frequency_hz) {
int clck = 0;
int top = 0;
clck = CLCK * 1000 * 1000;
top = clck / target_frequency_hz;
return top;
}
void set_pwm_t16_pa4(int freqhz, float duty) {
double top_double = calculate_top(freqhz / 1000.0); //TOP
uint16_t top = (uint16_t)top_double;
uint16_t Mat2 = (uint16_t)top_double * (duty / 100.0);
uint16_t Mat3 = top;
if (Mat2 >= top) Mat2 = top - 1;
/////////////////////////////////////////////////
T16Nx_Disable(T16N0);
// PA4 T16N0_1
T16Nx_BaseInitStruType x;
T16Nx_PWMInitStruType y;
@ -14,8 +33,7 @@ void t16_pa4_init(void) {
/* 配置T16N0通道1输出 */
y.T16Nx_MOE0 = Disable;
y.T16Nx_MOE1 = Enable;
y.T16Nx_POL0 =
POSITIVE; //
y.T16Nx_POL0 = POSITIVE; //
y.T16Nx_POL1 = POSITIVE;
y.T16Nx_PWMMODE = T16Nx_PWMMode_INDEP; //
y.PWMDZE = Disable; // PWM互补模式死区使能
@ -34,11 +52,12 @@ void t16_pa4_init(void) {
T16Nx_MAT3Out1Config(T16N0,
T16Nx_Out_High); //
//
T16Nx_SetCNT1(T16N0, 0); //
T16Nx_SetMAT2(T16N0, 0); //
T16Nx_SetMAT3(T16N0, 0); //
T16Nx_SetMAT2(T16N0, Mat2); //
T16Nx_SetMAT3(T16N0, Mat3); //
////48M/48000=1khZ(PWM的周期由TOP1决定为TOP+11ms)
T16Nx_SetTOP1(T16N0, 0);
T16Nx_SetTOP1(T16N0, top);
//
/* 配置输出管脚 */
GPIO_InitSettingType initset;
@ -57,53 +76,16 @@ void t16_pa4_init(void) {
}
//######################################################
static double calculate_top(double target_frequency) {
int clck = 0;
int target_frequency_hz = 0;
int top = 0;
clck = CLCK * 1000 * 1000;
target_frequency_hz = (int)target_frequency * 1000;
// printf("target_frequency_hz%d\n", target_frequency_hz);
top = clck / target_frequency_hz;
// printf("top%d\t\n", top);
return top;
}
static double calculate_MAT2(double top, double duty) {
double percentage_duty = 0;
double Mat2 = 0;
percentage_duty = duty / 100;
Mat2 = top * percentage_duty;
return Mat2;
}
/**
* @brief pwm的周期占空比
*
* @param frequency
* @param duty
*/
void set_pwm_modbul_freq_duty(uint32_t frequency, uint32_t duty) {
double top = 0;
double Mat2 = 0;
if (frequency > CLCK * 1000) {
printf("out of range\n");
return;
}
top = calculate_top(frequency); //TOP
if (top == 0) {
return;
}
Mat2 = calculate_MAT2(top, duty);
printf("top:\t%2.lf\n", top);
printf("MAT2:\t%2.lf\n", Mat2);
printf("MAT3:\t%2.lf\n", top);
T16Nx_Disable(T16N0);
t16_pa4_init();
T16Nx_SetMAT2(T16N0, Mat2);
if (duty == 100) {
T16Nx_SetMAT3(T16N0, top - 1);
} else {
T16Nx_SetMAT3(T16N0, top);
}
T16Nx_SetTOP1(T16N0, top);
void set_pwm_modbul_freq_duty(uint32_t frequencyhz, uint32_t duty) {
printf("set_pwm_modbul_freq_duty freq:%d,duty%d\n", frequencyhz, duty);
set_pwm_t16_pa4(frequencyhz,duty);
printf("set_pwm_modbul_freq_duty freq:%d,duty%d\n", frequencyhz, duty);
}
//######################################################

18
APP/pwm.h

@ -6,23 +6,7 @@
#include "port.h"
#include "system_ES8P5066.h"
typedef struct {
uint32_t s_hardware_frequency; // KhzPWM频率
uint32_t s_hardware_duty; // PWM占空比
uint32_t s_large_period; // ms
uint32_t s_large_duty; //
} pwm_message_t;
typedef struct {
uint32_t hardware_frequency; // KhzPWM频率
uint32_t hardware_duty; // PWM占空比
uint32_t large_period; // ms
uint32_t large_duty; //
} shutdown_before_message_t;
void t16_pa4_init(void);
void set_pwm_modbul_freq_duty(uint32_t frequency, uint32_t duty);
void set_pwm_modbul_freq_duty(uint32_t frequencyhz, uint32_t duty);
#endif

1204
project_ozone/Listings/project_o.map
File diff suppressed because it is too large
View File

2
project_ozone/Listings/startup_es8p5066.lst

@ -304,7 +304,7 @@ ARM Macro Assembler Page 5
Command Line: --debug --xref --diag_suppress=9931 --cpu=Cortex-M0 --apcs=interw
ork --depend=.\objects\startup_es8p5066.d -o.\objects\startup_es8p5066.o -IC:\K
eil_v5\ARM\RV31\INC -IC:\Keil_v5\ARM\CMSIS\Include -IC:\Keil_v5\ARM\INC\HR --pr
edefine="__MICROLIB SETA 1" --predefine="__UVISION_VERSION SETA 536" --list=.\l
edefine="__MICROLIB SETA 1" --predefine="__UVISION_VERSION SETA 527" --list=.\l
istings\startup_es8p5066.lst ..\MDK_StartUp\startup_ES8P5066.s

116
project_ozone/project_o.uvgui.admin
File diff suppressed because it is too large
View File

2
project_ozone/project_o.uvopt

@ -103,7 +103,7 @@
<bEvRecOn>1</bEvRecOn>
<bSchkAxf>0</bSchkAxf>
<bTchkAxf>0</bTchkAxf>
<nTsel>12</nTsel>
<nTsel>3</nTsel>
<sDll></sDll>
<sDllPa></sDllPa>
<sDlgDll></sDlgDll>

7
project_ozone/project_o.uvproj

@ -10,7 +10,7 @@
<TargetName>Target 1</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>5060960::V5.06 update 7 (build 960)::ARMCC</pCCUsed>
<pCCUsed>5060750::V5.06 update 6 (build 750)::ARMCC</pCCUsed>
<uAC6>0</uAC6>
<TargetOption>
<TargetCommonOption>
@ -149,7 +149,7 @@
<RestoreSysVw>1</RestoreSysVw>
</Target>
<RunDebugAfterBuild>0</RunDebugAfterBuild>
<TargetSelection>12</TargetSelection>
<TargetSelection>3</TargetSelection>
<SimDlls>
<CpuDll></CpuDll>
<CpuDllArguments></CpuDllArguments>
@ -224,7 +224,6 @@
<uocXRam>0</uocXRam>
<RvdsVP>0</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
@ -391,7 +390,7 @@
<NoWarn>0</NoWarn>
<uSurpInc>0</uSurpInc>
<useXO>0</useXO>
<ClangAsOpt>4</ClangAsOpt>
<uClangAs>0</uClangAs>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>

Loading…
Cancel
Save