📄 main.c
字号:
/**********************************************************************
* 程序说明
*
* 该程序是BLDC控制主程序。在主程序中调用设置子程序,初始化系统变量和常数
* ,使能中断,然后进入主循环。在主循环中清看门狗WDT,运行中等事件(10msec)
* 和慢速事件(100msec)处理程序。
**********************************************************************/
#include "general.h"
#include "hardware.h"
#include "defs.h"
#include "extern_globals.h"
/*********************************************************************/
extern void setup_ports(void);
extern void setup_motor_pwms(void);
extern void setup_adc(void);
extern void setup_qei(void);
extern void setup_timers(void);
#ifdef DEVELOPMODE
extern void setup_uart(void);
extern void serial_handler(void);
extern void process_parameters(void);
#endif
extern void medium_event_handler(void);
extern void slow_event_handler(void);
int main()
{
unsigned char i;
run_state=INITIALIZING;
//设置外围设备
setup_ports();
setup_motor_pwms();//在setup_motor_pwms()写数到寄存器时,中断不能运行
setup_adc();
setup_qei();
setup_timers();
setup_uart();
IFS2bits.FLTAIF=0; //清故障A 输入中断标志状态位
//使能所有类型的数学错误陷阱
INTCON1bits.OVATE=TRUE;
INTCON1bits.OVBTE=TRUE;
INTCON1bits.COVTE=TRUE;
// 使故障A 输入中断优先级为最高7,其他为缺省值4
IPC10bits.FLTAIP=7;
// 使能PWM,故障A和A/D 转换完成中断,在这里没有使能
// T1(用于输出比较)和T2(用于捕捉过零事件)中断
IEC2bits.PWMIE = 1;
IEC2bits.FLTAIE= 1;
IEC0bits.ADIE = 1;
// 设定ACQUIRE2标志,捕捉三相电压并对偏移作校正
control_flags.ACQUIRE2=TRUE;
// 清ACQUIRE2标志
control_flags.ACQUIRE2=FALSE;
//计算相关的变量
for (i=0;i<NO_PARAMETERS;i++)
{
param=i;
process_parameters();
}
// 设定参数使其回到菜单起始处
param=0;
// 主循环
while(1)
{
ClrWdt();
medium_event_handler();
slow_event_handler();
#ifdef DEVELOPMODE
if (run_state == STANDBY)
serial_handler();
#endif
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -