This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!
IM 我的应用程序、使用 USART1接收来自其他 控制单元的命令、一旦接收到地址、就会触发计时器、计时器过期时、会发出软件生成的 Port1中断来解释内容
这是 USART1 RX 中断例程
#pragma LOCATION ="Vector_UART1"
#pragma vector=UART1RX_vector
_interrupt void RX_VMU_byte (void)
{
IF (URCTL1 & URXWIE)
{
IF (RXBUF1 = BMS_ID)
{
URCTL1 &=~URXWIE;//地址和数据
VMU_Frame_Rcv_Counter = VMUmdTimerStrt; =>开始计时器!!!!!!!!!!!!!!!!
VMU_Rec_Num = 0;
}
}
其他
{
VMURS485Buf[VMU_Rec_Num]= RXBUF1;
if (VMU_Rec_Num < MAX_SIZE)
{
VMU_Rec_Num++;
}
}
}
这是计时器中断
#pragma LOCATION ="Vector_TimerB"
#pragma vector=TIMERB0_vector
_interrupt void Timer_B (void)
{
#ifdef EnableVMURS485Com
if (VMU_Frame_Rcv_Counter!=定时器停止)
{
IF (((VMU_Frame_Rcv_Counter > 0)&&(VMU_Rec_Num <(MaxVMUMulWrtCmdByte-1))))
{
VMU_Frame_Rcv_Counter --;
}
其他
{
SET_BRUSA_CHGR_COM (); // P1IFG |= BIT1 =>生成 Port1软件中断!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
VMU_Frame_Rcv_Counter =定时器停止;
}
#endif
}
这是 Port1中断
#pragma LOCATION ="Vector_Port1"
#pragma vector=Port1_vector
_interrupt void BRUS_CHGR_100ms_timer (void)
{
U8结果;
IF (P1IFG 和 BIT1)
{
VMU_Frame_Rcv_Counter =定时器停止;
CLR_BRUSA_CHGR_COM ();
_EINT();//允许短整型:1. Timer_B 内部和2。 RX_Byte 3。 VMU_RX_Byte
结果= VMU_FRM_analysis();
if (结果==MulRd)
{
Reply_MULRD_CMD (VMURS485Buf[1]、VMURS485Buf[2]、VMURS485Buf[4]);
VMU_TIMEOUT_Counter = 0;
}
否则、如果(结果= MulWrt)
{
Reply_MULWRT_CMD (VMURS485Buf[1]、VMURS485Buf[2]、VMURS485Buf[5]);
VMU_TIMEOUT_Counter = 0;
}
其他
{
;
}
}
URCTL1 |= URXWIE;
}
很好地编译和链接应用程序、并使用生成的 TXT 文件进行测试、一切都很好、很棒。
但是、当我将应用程序转换为可下载的版本时、使用闪存中的引导加载 程序下载应用程序、软件生成的 Port1中断机制将不再起作用。
不产生端口1中断。
实际上、如果我将解释移动到可下载代码中的计时器、则它将再次起作用。
这很奇怪。
最恰当的考虑。
这里有两个问题:
1.您是否尝试通过 JTAG 下载应用程序?它是否起作用?
2.应用程序代码 无法触发 Port1中断,以便其它函数正常工作? 执行代码的剂量?
您好、Gary、
注意事项。
您好、Gary、
您提醒我检查我的引导加载程序,我发现了问题。 我未将 E000放置到端口2矢量地址、而不是端口1矢量。
谢谢你。
最恰当的考虑。