您好!
我正在尝试在 C++上的某个类中包含 UART 的 ISR、但在执行 _bis_SR_register (GIE)时、它似乎进入了一个无限陷阱、并且显示没有 ISR、
这是我的主函数。 我的类协调器头文件如下所示、它包含 ISR。 是否有其他方法可以使用 C++实现 ISR?
#include "Coordinator.h"
int main (空)
{
WDTCTL = WDTPW | WDTHOLD; //停止看门狗
initGPIO(); //初始化 GPIO 引脚
initClockTo8MHz();//初始化时钟
inituart();//初始化 UART 通信
协调人协调员=协调人();
_bis_SR_register (GIE); // 中断被启用
while (1){
coordinator.process();//连续读取解析缓冲区,一旦"$"被读取,将开始在 packetbuffer 中存储字符,直到"/n"个字符,然后运行 NMEAParse 函数
}
}
类协调器
{
公共:
枚举串行端口{
ARES、
GPS、
调制解调器
};
协调员();
void process();
Virtual ~Coordinator();
专用:
CircularBuffer mGPSBuffer;
void send (uint16数据、串行端口串行端口);
#pragma vector=USCI_A1_vector
_interrupt void USCI_A1_ISR (void)
{
switch (__evo_in_range (UCA1IV、USCI_UART_UCTXCPTIFG))
{
USCI_NONE 案例:中断;
USCI_UART_UCRXIFG 案例:
if (mGPSBuffer.overflow){ //如果写入缓冲区位于读取缓冲区后面,则中断以防止覆盖尚未读取的数据
中断;
}
否则{
字符字节= UCA1RXBUF;
mGPSBuffer.PUSH (字节);
}
中断;
案例 USCI_UART_UCTXIFG:中断;
案例 USCI_UART_UCSTTIFG:中断;
案例 USCI_UART_UCTXCPTIFG:中断;
}
}
};
#endif /* Coordinator_H_*
#include "Coordinator.h"
int main (void){ WDTCTL = WDTPW | WDTHOLD; //停止看门狗 initGPIO(); //初始化 GPIO 引脚 initClockTo8MHz;//初始化时钟 initUART ();//初始化 UART 通信
协调器协调器=协调器(); __bis_SR_register (GIE); // 中断被启用
while (1){ coordinator.process();//连续读取解析缓冲区,一旦"$"被读取,将开始在 packetbuffer 中存储字符,直到"/n"个字符,然后运行 NMEAParse 函数 }