📄 openloop.c
字号:
#include "f2407_C.h"
#define pwm_half_per 1000 /*PWM调制频率*/
/*4000 PWM=5Khz*/
/*2000 PWM=10Khz*//*systemclock=40M*/
unsigned int hall=0x000;
/*禁止总中断子程序*/
void inline disable()
{
asm(" setc INTM");
}
/*开总中断子程序*/
void inline enable()
{
asm(" clrc INTM");
}
void initial()
{
disable();
asm(" clrc SXM"); /* 抑制符号位扩展 */
asm(" clrc OVM"); /* 累加器中结果正常溢出 */
asm(" clrc CNF"); /* B0被配置为数据存储空间 */
*SCSR1=0x8101; /* CLKIN=10M,CLKOUT=4*CLKIN=40M */
*WDCR=0x0E8; /* 不使能看门狗,因为SCSR2中的WDOVERRIDE
即WD保护位缺省值为1,故可以用软件禁止看门狗 */
*IMR=0x0000; /* 禁止所有中断 */
*IFR=0x0FFFF; /* 清除全部中断标志,"写1清0" */
WSGR=0x0000; /* 禁止所有的等待状态 */
}
void EVA_init(void)
{
*SCSR1=*SCSR1|0x0004; /*enable EVA clock*/
*MCRA=(*MCRA|0x0FC0)&0x0FFC7; /* IO引脚配置 */
/*
bit 15 no change: 0=IOPB7, 1=TCLKINA
bit 14 no change: 0=IOPB6, 1=TDIRA
bit 13 no change: 0=IOPB5, 1=T2PWM/T2CMP
bit 1 no change: 0=IOPB4, 1=T1PWM/T1CMP
bit 11 1: 0=IOPB3, 1=PWM6
bit 10 1: 0=IOPB2, 1=PWM5
bit 9 1: 0=IOPB1, 1=PWM4
bit 8 1: 0=IOPB0, 1=PWM3
bit 7 1: 0=IOPA7, 1=PWM2
bit 6 1: 0=IOPA6, 1=PWM1
bit 5 0: 0=IOPA5, 1=CAP3
bit 4 0: 0=IOPA4, 1=CAP2/QEP2
bit 3 0: 0=IOPA3, 1=CAP1/QEP1
bit 2 no change: 0=IOPA2, 1=XINT1
bit 1 no change: 0=IOPA1, 1=SCIRXD
bit 0 no change: 0=IOPA0, 1=SCITXD
*/
*PADATDIR=*PADATDIR&0x0C7FF; /*将IOPA3,IOPA4,IOPA5配置为输入方式*/
*T1CON=0x0800; /*连续增/减计数模式,不分频*/
*T1PR=pwm_half_per; /*设置PWM频率为20kHz*/
*T1CNT=0x00;
*ACTRA=0x0FFF;
*CMPR1=pwm_half_per*3/10; /*设置PWM占空比为70%*/
*CMPR2=pwm_half_per*3/10;
*CMPR3=pwm_half_per*3/10;
*COMCONA=0x8200;
}
void main()
{
initial( ); /* 系统初始化 */
EVA_init();
*T1CON=*T1CON|0x0040; /*启动定时器1*/
while(1)
{
hall=*PADATDIR&0x0038; /*屏蔽掉其它位,仅剩下三个霍尔信号*/
switch(hall)
{
case 0x0008: *ACTRA=0x03FD; break; /*PWM1-PWM6 ANC*/
case 0x0010: *ACTRA=0x0FD3; break; /*PWM3-PWM2 BNA*/
case 0x0020: *ACTRA=0x0D3F; break; /*PWM5-PWM4 CNB*/
case 0x0018: *ACTRA=0x03DF; break; /*PWM3-PWM6 BNC*/
case 0x0028: *ACTRA=0x0F3D; break; /*PWM1-PWM4 ANB*/
case 0x0030: *ACTRA=0x0DF3; break; /*PWM5-PWM2 CNA*/
case 0x0000:
case 0x0038:
default: *ACTRA=0x0333; break;
}
}
}
// 直接返回中断服务程序
void interrupt nothing( )
{
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -