大家好、我有一个要使用 UART 中断传输的循环字符缓冲区、但是代码从启用中断的函数中退出后、我的代码进入默认处理程序。 我已经注释掉了使用中断的所有其他函数、并且仅对 UART 进行 AM 测试。 是否有人知道为什么会继续使用默认处理程序?
空 UART7_IRQHandler (空)
{
uint32_t ui32Status7;
//
//获取中断状态。
//
ui32Status7 = UARTIntStatus (UART7_BASE、TRUE);
if (((ui32Status7 & UART_INT_RX)== UART_INT_RX){
CHAR 字节= UARTCharGetNonBlocking (UART7_BASE);
Coordinator.gpsManager.pbuffer.push (字节);
UARTIntClear (UART7_BASE、UART_INT_RX);
}
否则、如果(((ui32Status7 & UART_INT_TX)== UART_INT_TX){
coordinator.gpsManager.sendNextByte();
UARTIntClear (UART7_BASE、UART_INT_TX);
UARTIntRegister (INT_UART7、UART7_IRQHandler);
}
}
void GPSManager::Process(TransitPack::PacketType 类型,vector 数据)
{
if (type = TransitPacket::GPSConfig)
{
deviceBusy = true;
prepareToSend (data); //代码在运行函数后卡在此处,然后进入默认处理程序
}
}
void Manager::prepareToSend (向量 TX_DATA)
{
unsigned int i = 0;
int length = TX_DATA.SIZE ();
对于(i = 0;i < length;i++)//通过数组递增,请在字符串末尾查找空指针(0)
{
char temp = TX_DATA[i];
transmit.push (temp);
// deviceBusy = true;
}
UARTIntEnable (UART、UART_INT_TX);
UARTCharPut (UART、Transmit.Pop ()));
}
/*这是当处理器收到意外的*/时调用的代码
/*中断。 这只是进入一个无限循环、保持系统状态*/
//供调试器检查。
空 Default_Handler (空)
{
/* ULP Advisor 可免除故障陷阱*/
#ifdef __TI_ARM__
#pragma diag_push
#pragma CHECK_ULP ("-2.1")
#endif
/*输入无限循环。 *
while (1)
{
}
#ifdef __TI_ARM__
#pragma diag_pop
#endif
}