主题中讨论的其他器件:MSP430FR6877
您好!
我尝试在 LPM4模式下使用 MSP4133以实现功耗敏感型操作、为此、我使用的是32.768kHz 的外部晶体振荡器。
所需的功能如下所示。
我的模块中有两个通过 UART 连接的微控制器。
在另一个微控制器(MSP430fr6877)上按下某个按钮时、它会通过 UART 向4133模块发送特定的符号/字符。 4133模块有2个屏幕、1 -总升2 -流速、
接收到该字符后、4133模块应显示第二个屏幕一段时间、然后跳回到默认屏幕、即屏幕1。 但是,当接收到该字符时,第二个屏幕将显示为空白, 并在经过一段时间后返回到默认屏幕。 当我尝试在按下另一个控制器上的按钮后暂停程序时,程序停止进入 fs_add.asm 或 fs_div.asm。
我将所有浮点变量更改为整数、问题仍然存在。
以下是相关代码
//UART 中断
#if defined (__TI_Compiler_version__)|| defined (__IAR_SYSTEMS_ICC__)
#pragma vector=USCI_A0_vector
__interrupt void USCI_A0_ISR (void)
#Elif 已定义(_ GNU _)
void __attribute__((interrupt (USCI_A1_vector))) USCI_A1_ISR (void)
#else
#错误编译器不受支持!
#endif
{
__ bic_SR_register_on_exit (LPM4_bits);
switch (__even_in_range (UCA0IV、USCI_UART_UCTXCPTIFG))
{
USCI_NONE:中止;
案例 USCI_UART_UCRXIFG:
while (!(UCA0IFG&UCTXIFG));
gucrcvChar = UCA0RXBUF;
gucRxBuffer[guiRXIndex]= gucrcvChar;
if (gucrcvChar='*') //用于在流速和电流升之间切换的循环。
{
displayflowratebag^=1;
if (displayflowratebag==0)
{
Flowrate Display_Count = 0;
LCDM7 |= 0x00;
LCDM13 = 0x00;
LCDM10 |= 0x00;
}
///clear_data ();
计数= 1;
}
// guiRXIndex++;
中断;
USCI_UART_UCTXIFG 情况:中断;
案例 USCI_UART_UCSTTIFG:中断;
案例 USCI_UART_UCTXCPTIFG:中断;
}
}
//显示环路。
while (1)
{
if ((gulPulseTimeCount >(RefPulseTimeCount * 2))&&((RampFlag=1)||(RPMRampFlag==1))
{
tempFloat = 0;
PtoPFlowrate=0;
RPM_flowrate=0;
TempIndex = 0;
RPM_tempindex=0;
START_TIMER=0;
PtoPstart_timer_flag=0;
avgarr[0]= 0;
avgarr[1]= 0;
avgarr[2]= 0;
avgarr[3]=0;
avgarr[4]=0;
RPMavgarr[0]= 0;
RPMavgarr[1]= 0;
RPMavgarr[2]= 0;
RPMavgarr[3]=0;
RPMavgarr[4]=0;
gulPulseTimeCount = 0;
//pulseofftime = 0;
// RampFlag = 0;
// RPMRampFlag=0;
}
if (GUC_SetupMode)
{
Setup_Mode ();//设置模式以编辑比例因子
}
if (gucReset_TT_Flag)
{
GucReset_TT_Flag = 0;
SYSCFG0 &=~PFWP;//将 FRAM 写使能编程
FRAM_GUD_TT_LTR = 0;
SYSCFG0 |= PFWP;//程序 FRAM 受写保护(不可写)
Wait();
}
if ((Gui_dispParameter=1)&&(guc_SetupMode=0)&&(displayflowratefLAL=1)&&(flowrate Display_Count <=25000))
{
if ((PtoPFlowRate > MIN_flowrate)&&(START_TIMER >= 200))
{
tempFloat=RPM_flowrate;
nop();
}
否则
{
tempFloat= PtoPFlowRate;
}
if (count)
{
clear_data();
计数= 0;
}
Display_FLOW (tempFloat);
}
if ((Gui_dispParameter=1)&&(guc_SetupMode=0)&&(displayflowratefala==0))
{
Display_TOTAL ((unsigned long int) FRAM_GUD_TT_LTR);
}
__ bis_SR_register (LPM4_BITS | GIE);
__ no_operation ();//表示调试器
}
}
非常感谢您提供宝贵意见。
此致
Pratik.