Browse Source

update

master
Yuenold 3 years ago
parent
commit
a94272ba2d
  1. 5
      .vscode/settings.json
  2. 18
      APP/key.c
  3. 196
      APP/light.c
  4. 63
      APP/light.h
  5. 57
      APP/main.c
  6. 3
      APP/main.h
  7. 156
      APP/ozone_pwm_control.c
  8. 42
      APP/ozone_pwm_control.h
  9. 6
      APP/ozone_work.h
  10. 152
      APP/pwm.c
  11. 35
      APP/pwm.h
  12. 1228
      project_ozone/Listings/project_o.map
  13. 193
      project_ozone/project_o.uvgui.admin
  14. 52
      project_ozone/project_o.uvopt
  15. 10
      project_ozone/project_o.uvproj

5
.vscode/settings.json

@ -13,6 +13,9 @@
"port.h": "c",
"lib_wdt.h": "c",
"ozone_work.h": "c",
"adc.h": "c"
"adc.h": "c",
"systick.h": "c",
"ozone_pwm_control.h": "c",
"stdbool.h": "c"
}
}

18
APP/key.c

@ -111,8 +111,8 @@ void onkey(zkey_t *key, zkey_state_t key_state) {
POWER_KEY_TRIGGER_TIME / KEY_SCAN_PERIOD) //3s
{
key->hasProcessed = true;
// printf("key0 zks_falling_edge\r\n");
set_ozone_work_time();
printf("key0 zks_falling_edge\r\n");
// set_ozone_work_time();
// set_timing_time(running_time.timing_time_state);
} else if (key == &s_keys[1] && //
key->cur_state == zks_rising_edge && //
@ -121,16 +121,16 @@ void onkey(zkey_t *key, zkey_state_t key_state) {
POWER_KEY_TRIGGER_TIME / KEY_SCAN_PERIOD) {
key->hasProcessed = true;
// key_control_switch_gears(g_switch_gears);
// printf("key1 zks_rising_edge\r\n");
set_ozen_gears(g_ozen_gears);
printf("key1 zks_rising_edge\r\n");
// set_ozen_gears(g_ozen_gears);
} else if (key == &s_keys[2] && //
key->cur_state == zks_rising_edge && //
!key->hasProcessed && //
key->keep_state_count <=
POWER_KEY_TRIGGER_TIME / KEY_SCAN_PERIOD) {
key->hasProcessed = true;
// printf("key2 zks_rising_edge\r\n");
set_interval_time();
printf("key2 zks_rising_edge\r\n");
// set_interval_time();
// set_interval_time(running_time.interval_time_state);
} else if (key == &s_keys[3] && //
key->cur_state == zks_rising_edge && //
@ -138,8 +138,8 @@ void onkey(zkey_t *key, zkey_state_t key_state) {
key->keep_state_count <=
POWER_KEY_TRIGGER_TIME / KEY_SCAN_PERIOD) {
key->hasProcessed = true;
// printf("key3 zks_rising_edge\r\n");
process_switch_key();
printf("key3 zks_rising_edge\r\n");
process_switch_key();
// set_interval_time(running_time.interval_time_state);
}
} else {
@ -148,7 +148,7 @@ void onkey(zkey_t *key, zkey_state_t key_state) {
!key->hasProcessed && //
key->keep_state_count <= POWER_KEY_TRIGGER_TIME / KEY_SCAN_PERIOD) {
key->hasProcessed = true;
// printf("key3 zks_rising_edge\r\n");
printf("key zks_rising_edge\r\n");
process_switch_key();
// set_interval_time(running_time.interval_time_state);
}

196
APP/light.c

@ -0,0 +1,196 @@
#include "light.h"
rgb_message_t rgb_message;
TIMING_MODE_T timing_mode;
ERROR_MODE_T error_mode;
timing_message_t timing_message;
/**
* @brief ,
*
*/
void light_module_set_rgb_mode(RGB_MODE_T mode) {
if (mode == OPEN_RED_LIGHT) {
port_led_r_set(true);
port_led_g_set(false);
port_led_b_set(false);
rgb_message.turn_off_the_mode_before_rgb = OPEN_RED_LIGHT;
} else if (mode == OPEN_GREEN_LIGHT) {
port_led_r_set(false);
port_led_g_set(true);
port_led_b_set(false);
rgb_message.turn_off_the_mode_before_rgb = OPEN_GREEN_LIGHT;
} else if (mode == OPEN_BLUE_LIGHT) {
port_led_r_set(false);
port_led_g_set(false);
port_led_b_set(true);
rgb_message.turn_off_the_mode_before_rgb = OPEN_BLUE_LIGHT;
} else if (mode == CLOSE_RGB_LIGHT) {
rgb_message.turn_off_the_mode_before_rgb = OPEN_BLUE_LIGHT;
port_led_r_set(false);
port_led_g_set(false);
port_led_b_set(false);
}
}
/**
* @brief rgb闪烁或者不闪烁
*
* @param mode
*/
void light_module_set_rgb_flicker_mode(bool state) {
if (state == false) {
rgb_message.rgb_flicker_mode = false;
} else if (state == true) {
rgb_message.rgb_flicker_mode = true;
}
}
void process_rgb_flicker_mode() {
static uint32_t rgb_flicker_ticket = 0;
static uint8_t rgb_ticket_count = 0;
if (port_haspassedms(rgb_flicker_ticket) > 1000) {
rgb_flicker_ticket = get_sys_ticket();
if (rgb_ticket_count < 3) {
// turn_off_the_mode_before_rgb保存了关闭之前的RGB亮灯的模式
light_module_set_rgb_mode(rgb_message.turn_off_the_mode_before_rgb);
} else {
light_module_set_rgb_mode(CLOSE_RGB_LIGHT);
rgb_ticket_count = 0;
}
rgb_ticket_count++;
}
}
/**
* @brief 30min 60min 90min 120min分别打开led3 led2 led1 led0灯
*
* @param mode
*/
void light_module_set_timing_light_mode(TIMING_MODE_T mode) {
if (mode == OPEN_ONE_LED) {
port_led0_set(true);
port_led1_set(false);
port_led2_set(false);
port_led3_set(false);
} else if (mode == OPEN_TWO_LED) {
port_led0_set(true);
port_led1_set(true);
port_led2_set(false);
port_led3_set(false);
} else if (mode == OPEN_THREE_LED) {
port_led0_set(true);
port_led1_set(true);
port_led2_set(true);
port_led3_set(false);
} else if (mode == OPEN_FOUR_LED) {
port_led0_set(true);
port_led1_set(true);
port_led2_set(true);
port_led3_set(true);
} else if (mode == CLOSE_ALL_LED) {
port_led0_set(false);
port_led1_set(false);
port_led2_set(false);
port_led3_set(false);
}
timing_message.now_timing_mode=mode;
}
/**
* @brief
*
* @param mode
*/
void light_module_set_error_light_mode(uint8_t mode) {
if (mode == ERROR_MODE0) {
port_led0_set(false);
port_led1_set(false);
port_led2_set(false);
port_led3_set(false);
} else if (mode == ERROR_MODE1) {
port_led0_set(false);
port_led1_set(false);
port_led2_set(false);
port_led3_set(false);
} else if (mode == ERROR_MODE2) {
port_led0_set(false);
port_led1_set(false);
port_led2_set(false);
port_led3_set(false);
} else if (mode == ERROR_MODE3) {
port_led0_set(false);
port_led1_set(false);
port_led2_set(false);
port_led3_set(false);
}
}
/**
* @brief rgbled0~led3
*
*/
void light_module_close_all_light(void) {
light_module_set_rgb_mode(CLOSE_RGB_LIGHT);
light_module_set_timing_light_mode(CLOSE_ALL_LED);
light_module_set_rgb_flicker_mode(false);
}
/**
* @brief RGB的亮灭
*
*/
void test_set_rgb_mode(void) {
printf("try_test_set_rgb_mode\r\n");
static int i = 0;
if (i == 0) {
i = 1;
light_module_set_rgb_mode(OPEN_RED_LIGHT);
} else if (i == 1) {
i = 2;
light_module_set_rgb_mode(OPEN_GREEN_LIGHT);
} else if (i == 2) {
i = 3;
light_module_set_rgb_mode(OPEN_BLUE_LIGHT);
} else if (i == 3) {
i = 0;
light_module_set_rgb_mode(CLOSE_RGB_LIGHT);
}
}
/**
* @brief led0~led3的亮灭
*
*/
void test_set_led_mode(void) {
printf("try_test_set_led_mode\r\n");
static int j = 0;
if (j == 0) {
j = 1;
light_module_set_timing_light_mode(OPEN_ONE_LED);
} else if (j == 1) {
j = 2;
light_module_set_timing_light_mode(OPEN_TWO_LED);
} else if (j == 2) {
j = 3;
light_module_set_timing_light_mode(OPEN_THREE_LED);
} else if (j == 3) {
j = 4;
light_module_set_timing_light_mode(OPEN_FOUR_LED);
} else if (j == 4) {
j = 0;
light_module_set_timing_light_mode(CLOSE_ALL_LED);
}
}
/**
* @brief rgb闪烁或者不闪烁
*
*/
void test_set_rgb_flicker_mode(void) {
printf("test_light_module_set_rgb_flicker_mode\r\n");
static bool m = false;
if (m == 0) {
light_module_set_rgb_flicker_mode(true);
} else if (m == 1) {
light_module_set_rgb_flicker_mode(false);
}
m = !m;
}

63
APP/light.h

@ -0,0 +1,63 @@
#ifndef _LIGHT_H_
#define _LIGHT_H_
#include "lib_config.h"
#include "port.h"
#include "system_ES8P5066.h"
#include "systick.h"
typedef enum {
OPEN_RED_LIGHT = 0, /*打开红灯*/
OPEN_GREEN_LIGHT = 1, /*打开绿灯*/
OPEN_BLUE_LIGHT = 2, /*打开蓝灯*/
CLOSE_RGB_LIGHT = 3, /*关闭灯*/
} RGB_MODE_T;
typedef struct {
RGB_MODE_T turn_off_the_mode_before_rgb;
bool rgb_flicker_mode;
bool already_set_rgb_mode;
} rgb_message_t;
typedef enum {
OPEN_ONE_LED = 0, /*打开LED0*/
OPEN_TWO_LED = 1, /*打开LED0 打开LED1*/
OPEN_THREE_LED = 2, /*打开LED0 打开LED1 打开LED2*/
OPEN_FOUR_LED = 3, /*打开LED0 打开LED1 打开LED2 打开LED3*/
CLOSE_ALL_LED = 4, /*关闭LED0 LED1 LED2 LED3*/
} TIMING_MODE_T;
typedef struct {
TIMING_MODE_T now_timing_mode;
} timing_message_t;
typedef enum {
ERROR_MODE0 = 0, /*打开LED0*/
ERROR_MODE1 = 1, /*打开LED1*/
ERROR_MODE2 = 2, /*打开LED2*/
ERROR_MODE3 = 3, /*打开LED3*/
} ERROR_MODE_T;
void light_module_set_rgb_mode(RGB_MODE_T mode);
//void light_module_set_rgb_flicker_mode(RGB_FLICKER_MODE_T mode);
void light_module_set_timing_light_mode(TIMING_MODE_T mode);
void light_module_set_error_light_mode(uint8_t error_mode);
void light_module_close_all_light(void);
void process_rgb_flicker_mode(void);
// light_module_processs(){
// process_rgb_flicker_mode();
// };
void light_module_schedule(void);
void test_set_rgb_mode(void);
void test_set_led_mode(void);
void test_set_rgb_flicker_mode(void);
#endif

57
APP/main.c

@ -11,9 +11,10 @@
**********************************************************/
#include "main.h"
#include <stdbool.h> //定义布尔
extern ozone_message_t ozone_message;
// extern ozone_message_t ozone_message;
extern zkey_module_t key_module;
bool rgb_flicker_state = false;
extern rgb_message_t rgb_message;
/***********************************************************************************************************************
* ===========================================================================================================
**
@ -47,7 +48,17 @@ void feed_iwdt(void) {
//############### ##############//
/**
* @brief ,
*
*/
void power_on_ozone_working_status(void) {
// PWM频率1Khz0,0pwm一直输出高电平
HOOK_pwm_module_set_pwm_duty(1, 0);
light_module_set_timing_light_mode(CLOSE_ALL_LED);
light_module_set_rgb_mode(OPEN_RED_LIGHT);
port_fan_set(true); //
}
/***********************************************************************************************************************
* =============================================================================================================
@ -63,24 +74,34 @@ int main(void) {
gpio_init();
zkey_init(&key_module);
t16n0_1_init(); //PA4输出pwm
iwdt_init();
power_on_ozone_work_state(); //
// iwdt_init();
power_on_ozone_working_status();
// power_on_ozone_work_state(); //
// ADCInit("A",4);
//printf("Initialization completed\r\n");
// printf("Initialization completed\r\n");
while (1) {
// port_do_debug_light_state();
port_key_state();
if (get_ozone_starting_up_state() == true) { //
if (ozone_message.ozone_work_state == 2)
is_ozone_work_time_over();
if (ozone_message.ozone_interva_state == true){
set_rgb_flicker();//rgb亮3灭1
is_ozone_interva_time_over();
}
adc_loop_gather();
} else if (get_ozone_starting_up_state() == false) { //
}
//test_iwdt();
feed_iwdt(); //
// if (get_ozone_starting_up_state() == true) { //
// // if (ozone_message.ozone_work_state == 2)
// // is_ozone_work_time_over();
// // if (ozone_message.ozone_interva_state == true) {
// // set_rgb_flicker(); //rgb亮3灭1
// // is_ozone_interva_time_over();
// // }
// pwm_module_loop();
// if (rgb_message.rgb_flicker_mode == true) {
// process_rgb_flicker_mode();
// rgb_message.already_set_rgb_mode = false;
// } else if (rgb_message.rgb_flicker_mode == false) {
// if (rgb_message.already_set_rgb_mode == false)
// light_module_set_rgb_mode(rgb_message.turn_off_the_mode_before_rgb);
// rgb_message.already_set_rgb_mode = true;
// }
// // adc_loop_gather();
// } else if (get_ozone_starting_up_state() == false) { //
// }
// test_iwdt();
// feed_iwdt(); //
}
}

3
APP/main.h

@ -13,7 +13,7 @@
#include "system_ES8P5066.h"
#include "lib_config.h"
#include "systick.h"
//#include "light.h"
#include "light.h"
//#include "gpio.h"
#include "irqhandler.h"
#include "port.h"
@ -21,6 +21,7 @@
#include "uart0.h"
#include "timer.h"
#include "ozone_work.h"
#include "pwm.h"
void Uart0Init(void);
void Uart0SendBuff(uint8_t *buff);
void port_do_debug_light_state(void);

156
APP/ozone_pwm_control.c

@ -0,0 +1,156 @@
// #include "ozone_pwm_control.h"
// #define TIMINT_TIM 1800000
// #define INTERVAL_TIM 300000
// #define CLCK 48
// ozone_messages_t ozone_messages;
// extern timing_message_t timing_message;
// extern uint32_t g_duty[4]; // PWMd的占空比
// extern uint32_t g_frequency;
// extern ozone_message_t ozone_message;
// /**
// * @brief
// * *
// * @brief
// *
// * @param ozone_interval_period
// * @param ozone_interval_duty
// */
// void ozone_pwm_control_set_pwm2(uint32_t ozone_interval_period,uint32_t ozone_interval_duty){
// }
// /**
// * @brief PWM工作时间的模式
// *
// * @param mode
// */
// void set_ozone_work_mode(OZONE_WOEK_MODE_T mode) {
// if (mode == HAS_BEEN_WORKING) {
// set_ozone_work_gears(ozone_messages.will_be_set_work_gears);
// } else if (mode == TIMING_WORK) {
// ozone_pwm_control_set_pwm_output_1(ozone_messages.ozone_timing_duty);
// } else if (mode == TIMING_INTERVAL_WORK) {
// ozone_pwm_control_set_pwm_output_2(ozone_messages.ozone_timing_duty,
// ozone_messages.ozone_interval_duty);
// } else if (mode == STOP_PWM_WORK) {
// ozone_pwm_control_stop_pwm();
// }
// ozone_messages.now_ozone_woek_mode = mode;
// }
// /**
// * @brief PWM工作档位
// *
// * @param mode
// */
// void set_ozone_work_gears(OZONE_WOEK_GEARS_T gears) {
// if (gears == LOW_END) {
// ozone_pwm_control_set_pwm_duty(ozone_messages.ozone_pwm_frequency,
// ozone_messages.ozone_pwm_duty);
// } else if (gears == MIDDLE_GRADE) {
// ozone_pwm_control_set_pwm_duty(ozone_messages.ozone_pwm_frequency,
// ozone_messages.ozone_pwm_duty);
// } else if (gears == SLAP_UP) {
// ozone_pwm_control_set_pwm_duty(ozone_messages.ozone_pwm_frequency,
// ozone_messages.ozone_pwm_duty);
// }
// ozone_messages.now_ozone_woek_gears = gears;
// }
// //######################################################
// 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;
// }
// double calculate_MAT2(double top, double duty) {
// double percentage_duty = 0;
// double Mat2 = 0;
// percentage_duty = duty / 100;
// Mat2 = top * percentage_duty;
// return Mat2;
// }
// void ozone_pwm_control_set_pwm_duty(uint32_t set_frequency, uint32_t set_duty) {
// double top = 0;
// double Mat2 = 0;
// if (set_frequency > CLCK * 1000) {
// printf("out of range\n");
// return;
// }
// top = calculate_top(set_frequency); //TOP
// if (top == 0) {
// return;
// }
// Mat2 = calculate_MAT2(top, set_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);
// t16n0_1_init();
// T16Nx_SetMAT2(T16N0, Mat2);
// T16Nx_SetMAT3(T16N0, top);
// T16Nx_SetTOP1(T16N0, top);
// }
// //######################################################
// /**
// * @brief
// *
// * @param pwm_timing_duty
// */
// void ozone_pwm_control_set_pwm_output_1(uint32_t pwm_timing_duty) {}
// /**
// * @brief
// *
// * @param pwm_duty
// * @param pwm_interval_duty
// */
// void ozone_pwm_control_set_pwm_output_2(uint32_t pwm_timing_duty,
// uint32_t pwm_interval_duty) {}
// /**
// * @brief pwm输出
// *
// */
// void ozone_pwm_control_stop_pwm(void) { stop_ozone_work(); }
// /**
// * @brief
// *
// */
// void try_shutdown(void) {
// if (port_haspassedms(ozone_message.count_down_begin_sys_time) >= TIMINT_TIM) {
// ozone_message.count_down_begin_sys_time = get_sys_ticket();
// if (ozone_message.timing_rank == 1) { //
// set_timing_light_mode(CLOSE_ALL_LED);
// printf("time over\r\n");
// } else { //30min,30min关闭一个led
// printf("time minus 30min\r\n");
// set_timing_light_mode(timing_message.now_timing_mode - 1);
// }
// }
// }
// /**
// * @brief pwm输出
// *
// */
// void stop_ozone_work(void) {
// set_ozone_work_mode(STOP_PWM_WORK); //PWM输出
// port_fan_set(false); //
// close_all_light(); //rgbled0~led3
// }

42
APP/ozone_pwm_control.h

@ -0,0 +1,42 @@
// #ifndef _OZONE_PWM_CONTROL_H_
// #define _OZONE_PWM_CONTROL_H_
// #include "lib_config.h"
// #include "light.h"
// #include "ozone_work.h"
// #include "port.h"
// #include "system_ES8P5066.h"
// typedef enum {
// HAS_BEEN_WORKING = 0, /*一直工作*/
// TIMING_WORK = 1, /*定时工作*/
// TIMING_INTERVAL_WORK = 2, /*在定时期间,间歇工作*/
// STOP_PWM_WORK = 3, /*停止工作*/
// } OZONE_WOEK_MODE_T;
// typedef enum {
// LOW_END = 1, /*低档工作*/
// MIDDLE_GRADE = 2, /*中档工作*/
// SLAP_UP = 3, /*高档工作*/
// } OZONE_WOEK_GEARS_T;
// typedef struct {
// OZONE_WOEK_MODE_T now_ozone_woek_mode; /*现在的工作模式*/
// OZONE_WOEK_GEARS_T will_be_set_work_gears; /*将要的工作档位*/
// OZONE_WOEK_GEARS_T now_ozone_woek_gears; /*现在的工作档位*/
// uint32_t ozone_pwm_duty;
// uint32_t ozone_pwm_frequency;
// uint32_t ozone_timing_duty;
// uint32_t ozone_interval_duty;
// } ozone_messages_t;
// void set_ozone_work_mode(OZONE_WOEK_MODE_T mode);
// void set_ozone_work_gears(OZONE_WOEK_GEARS_T gears);
// void ozone_pwm_control_set_pwm_duty(uint32_t frequency, uint32_t duty) ;
// void ozone_pwm_control_set_pwm_output_1(uint32_t pwm_timing_duty);
// void ozone_pwm_control_set_pwm_output_2(uint32_t pwm_timing_duty,
// uint32_t pwm_interval_duty);
// void ozone_pwm_control_stop_pwm(void);
// void try_shutdown(void);
// void stop_ozone_work(void);
// #endif

6
APP/ozone_work.h

@ -5,7 +5,7 @@
#include "port.h"
#include "systick.h"
#include "timer.h"
#include <stdbool.h> //¶¨Òå²¼¶û
#include <stdbool.h>
#include <stdint.h>
#include <string.h>
@ -35,8 +35,8 @@ typedef struct {
bool switch_key_state;
bool interva_flag;
bool ozone_interva_state;
int ozone_work_state; // 0?????1?????2????
uint8_t timing_rank; // 1??30min?2??60min,3??90min,4??120min
int ozone_work_state;
uint8_t timing_rank;
uint32_t ozone_work_time;
uint32_t ozone_interval_time;
uint32_t count_down_begin_sys_time;

152
APP/pwm.c

@ -0,0 +1,152 @@
#include "pwm.h"
#define TIMING_TICK 1800000
#define INTERVAL_TICK 30000
#define CLCK 48
uint32_t s_hardware_period; //ms
uint32_t s_hardware_duty; //ms
/**
* @brief s_large_duty是由s_large_period与INTERVAL_TIME决定
* s_large_duty = INTERVAL_TIME/s_large_period
* s_large_period=1800000
* s_large_duty = (30000/1800000)*100
*
*/
uint32_t s_large_period; //ms
uint32_t s_large_duty = 100; //ms
uint32_t begin_ticket;
uint8_t update_large_period_count;
bool enableFlag = false;
void HOOK_pwm_module_set_pwm_duty(uint32_t frequency, uint32_t duty) {
ozone_pwm_control_set_pwm_duty(frequency, duty);
}
void HOOK_pwm_stop(void) {
HOOK_pwm_module_set_pwm_duty(0, 0); //PWM输出
port_fan_set(false); //
}
bool HOOK_pwm_is_enable(void) { return enableFlag; }
void update_large_period(void) {
uint32_t large_period;
update_large_period_count++;
switch (update_large_period_count) {
case 1:
large_period = 1 * TIMING_TICK;
break;
case 2:
large_period = 2 * TIMING_TICK;
break;
case 3:
large_period = 3 * TIMING_TICK;
break;
case 4:
large_period = 4 * TIMING_TICK;
break;
case 5:
update_large_period_count = 0;
large_period = 0 * TIMING_TICK;
break;
}
pwm_module_set_pwm_output_1(
large_period, s_large_duty); //
}
/**
* @brief 100
* 300000
* @param freq
* @param duty
*/
void pwm_module_set_pwm_output_1(uint32_t large_period, uint32_t large_duty) {
pwm_module_set_pwm_output_2(s_hardware_period, s_hardware_duty, large_period,
large_duty);
}
/**
* @brief PWM
*
* @param hardware_period pwm频率
* @param hardware_duty pwm占空比
* @param large_period
* @param large_duty
*/
void pwm_module_set_pwm_output_2(uint32_t hardware_period,
uint32_t hardware_duty, uint32_t large_period,
uint32_t large_duty) {
s_hardware_period = hardware_period;
s_hardware_duty = hardware_duty;
s_large_period = large_period;
s_large_duty = large_duty;
begin_ticket = get_sys_ticket();
enableFlag = true;
HOOK_pwm_module_set_pwm_duty(s_hardware_period, s_hardware_duty);
}
void pwm_module_stop_pwm(void) { enableFlag = false; }
void pwm_module_loop(void) {
if (!enableFlag) {
HOOK_pwm_stop();
return;
}
if (port_haspassedms(begin_ticket) % s_large_period <=
s_large_period * s_large_duty / 100) {
if (!HOOK_pwm_is_enable()) {
HOOK_pwm_module_set_pwm_duty(s_hardware_period, s_hardware_duty);
}
} else {
enableFlag = false;
HOOK_pwm_stop();
}
}
//######################################################
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;
}
double calculate_MAT2(double top, double duty) {
double percentage_duty = 0;
double Mat2 = 0;
percentage_duty = duty / 100;
Mat2 = top * percentage_duty;
return Mat2;
}
void ozone_pwm_control_set_pwm_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);
t16n0_1_init();
T16Nx_SetMAT2(T16N0, Mat2);
if (duty == 100) {
T16Nx_SetMAT3(T16N0, top - 1);
} else {
T16Nx_SetMAT3(T16N0, top);
}
T16Nx_SetTOP1(T16N0, top);
}
//######################################################

35
APP/pwm.h

@ -0,0 +1,35 @@
#ifndef _pwm_module_H_
#define _pwm_module_H_
#include "lib_config.h"
#include "light.h"
#include "ozone_work.h"
#include "port.h"
#include "system_ES8P5066.h"
void HOOK_pwm_module_set_pwm_duty(uint32_t frequency, uint32_t duty);
void HOOK_pwm_stop(void);
bool HOOK_pwm_is_enable(void);
void pwm_module_set_pwm_output_1(uint32_t large_period, uint32_t large_duty);
void pwm_module_set_pwm_output_2(uint32_t hardware_period,
uint32_t hardware_duty, uint32_t large_period,
uint32_t large_duty);
void ozone_pwm_control_set_pwm_duty(uint32_t frequency, uint32_t duty);
void pwm_module_stop_pwm(void);
void update_large_period(void);
void pwm_module_loop(void);
#endif
// 2Сʱ
// 50
// 80
// 3Сʱ
// 1Сʱ
// if(haspassed(beigin)/Сʱ%2<=1){
// ¹Ø
// }else{
// }

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

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

52
project_ozone/project_o.uvopt

@ -296,6 +296,30 @@
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>9</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\APP\light.c</PathWithFileName>
<FilenameWithoutPath>light.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>10</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\APP\pwm.c</PathWithFileName>
<FilenameWithoutPath>pwm.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
@ -306,7 +330,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>9</FileNumber>
<FileNumber>11</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -326,7 +350,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>10</FileNumber>
<FileNumber>12</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -338,7 +362,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>11</FileNumber>
<FileNumber>13</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -350,7 +374,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>12</FileNumber>
<FileNumber>14</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -362,7 +386,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>13</FileNumber>
<FileNumber>15</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -374,7 +398,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>14</FileNumber>
<FileNumber>16</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -386,7 +410,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>15</FileNumber>
<FileNumber>17</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -398,7 +422,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>16</FileNumber>
<FileNumber>18</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -410,7 +434,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>17</FileNumber>
<FileNumber>19</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -422,7 +446,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>18</FileNumber>
<FileNumber>20</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -434,7 +458,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>19</FileNumber>
<FileNumber>21</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -446,7 +470,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>20</FileNumber>
<FileNumber>22</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -466,7 +490,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>21</FileNumber>
<FileNumber>23</FileNumber>
<FileType>2</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -486,7 +510,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>22</FileNumber>
<FileNumber>24</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>

10
project_ozone/project_o.uvproj

@ -461,6 +461,16 @@
<FileType>1</FileType>
<FilePath>..\APP\adc.c</FilePath>
</File>
<File>
<FileName>light.c</FileName>
<FileType>1</FileType>
<FilePath>..\APP\light.c</FilePath>
</File>
<File>
<FileName>pwm.c</FileName>
<FileType>1</FileType>
<FilePath>..\APP\pwm.c</FilePath>
</File>
</Files>
</Group>
<Group>

Loading…
Cancel
Save