主题中讨论的其他部件: DRV8842
工具/软件:Code Composer Studio
你好
我正在处理由DRV8842和MSP430G2553组成的嵌入式卡。
我 通过DRV控制24[V]直流电动机,并通过MCU监测其他低功耗外围设备(LED,感应器等...)。
在我的代码中,我可以输入系统工作的秒数,但我突然 注意到,我在软件中确定的时间间隔与实际 执行之间存在间隔。
在卡执行过程中还有大约7秒的间隙。 一张卡的运行时间约 为61秒,另一张卡的运行时间为69秒,其上的代码相同。
我推断了我在项目中使用的ISR。请帮我弄清楚我错过了什么。
谢谢
这是我的项目中ISR的一个示例。 这里也会出现同样的延迟 。
#include <msp430g2553.h>
//*** GPIO端口1的常量声明***********************************************************************************
#define I4 BIT0 // PIN NUM 2
#define RXD BIT1 // PIN NUM 3
#define TXD BIIT2 // PIN NUM 4
#define I1 BIT3 // PIN NUM 5
#define I0 BIT4 // PIN NUM 6
#define FAULTn BIT5 // PIN NUM 7
#define OK_LED BIT6 // PIN NUM 14
//********************************************************************************************************
//*** GPIO端口2的常量声明**********************************************************************************
#define RESETn BIT0 // PIN NUM 8
#define init_1 BIT1 // PIN NUM 9
#define init_2 BIIT2 // PIN NUM 10
#define RST_OUT BIT3 // PIN NUM 11
#define spare BIT4 // PIN NUM 12
#define faild_LED BIT5 // PIN NUM 13
#define I3 BIT6 // PIN NUM 19
#define I2 BIT7 // PIN NUM 18
void Config_TimerA (void);
void Config_GPIO (void);
int cnnt_sec, count_f;
int main (void){
WDTCTL = WDTPW + WDTHOLD;//停止看狗计时器
BCSCTL1 = CALC1_1MHz;
DCOCTL = CALDCO_1MHz;
BCSCTL3 |= LFXT1S_2;// LFXT1 = VLO,时钟默认,
IFG1 &=~OFIFG;
CONFIG_TimerA();
CONFIG_GPIO ();
// P1DIR |= BIT6;
P1OUT |= OK_LED;
count_f=1;
__bis_sr_register (GIE);
同时(1)
{
如果(cnt_sec=60)/60 秒时间间隔,
{
cnt_sec=0;
P1OUT ^= OK_LED;
}
}
}
作废Config_TimerA (void)
{
TACTL = Tassel_1 + MC_1;
CCTL0 |= CCIE;
CCR0 +=1.2万;//一秒间隔
}
#pragma vector = TIMER0_A0_vector
__interrupt void Timer_A (void)
{
CCR0 +=1.2万;//一个SEC的周期
如果(count_f==1)
{
cnt_sec=cnt_sec+1;
}
}
void Config_GPIO (void)
{
// P1DIR ||(I4 +I1+I0 + OK_LED+FAULTn);//保护端口1的数字OUTUPTS
P1DIR ||(I4 +I1+I0 + OK_LED);//保护端口1的数字OUTUPTS
// P1OUT ||(I4 +I1+I0+FAULTn );//输出偏高
P1OUT |= I4;//输出高
P1OUT |= I1;//输出高
P1OUT |= I0;//输出高
P1OUT &=~ FAULTn;//输出高
P1REN |= FAULTn;
P1OUT |= FAULTn;
P1REN |= RXD;
P1OUT |= RXD;
P1REN |= TXD;
P1OUT |= TXD;
P1OUT &=~(OK_LED);//输出低
P2DIR ||(RESETn +INIT_2 +RST_OUT+ SPARE+FAILD_LED+I3+I2);//保护端口2的数字OUTUPTS
P2OUT |= RESETn;//输出高
P2OUT |= RST_OUT;
P2OUT |=故障LED;
P2OUT |= I3;
P2OUT |= I2;
// P2OUT &=~(init_2+spare+faild_LED);//输出低
P2OUT &=~ init_2;
P2OUT &=~Ω 备件;
P2OUT &=~故障LED;
}