大家好、
我正在处理 Lora 项目、我的要求是发送数据后、如果 TX 未完成、 我希望等待达到超时。 为此、在发送我称为计时器的数据后、我在 while 循环中等待、以检查是否执行了计时器中断。 即使我选中 TAR 寄存器、也会被填充并正常工作。 在 TCCR0 定时器溢出中断后、中断不起作用。 下面是我的示例代码
定时器代码:
void timer_init (void)
{
TA1CCR0 = 0;//最初、停止计时器
TA1CCTL0 |= CCIE;//为 CCR0启用中断。
TA1CTL = tassel_2 + ID_0 + MC_1;//选择 SMCLK、SMCLK/1、向上计数模式
}
#pragma vector = Timer1_A0_vector
_interrupt void Timer_A (void)
{
OFCount++;
if (OFCount >= 200)
{
sx1262.rf_Reach 超时= 1;
OFCount = 0;
}
}
TX 代码:
void Tx_Start (uint8_t * txbuf、uint8_t PAYLOAD_LENGTH)
{
SetStandby (1);//0:STDBY_RC;1:STDBY_XOSC
SetBufferBaseAddress (0、0);//(TX_BASE_addr、RX_BASE_addr)
WriteBuffer (0、txbuf、PAYLOAD_LENGTH);//(offset、* data、length)
SetPacketParams (PAYLOAD_LENGTH);//PreambleLength;HeaderType;PayloadLength;CRCType;InvertIQ
SetDioIrqParams (TxDone_IRQ);//TxDone IRQ
//定义同步字值
SetTx (0);//timeout = 0
Sx1262_Flag.is _TX = 1;//启动标识和启动指示器
timer_init();
TA1CCR0 = 1000-1;
Sx1262_Flag.RF_TIMEOUT = 0;
Sx1262_Flag.RF_REACH 超时= 0;//清除发送超时标志
//等待 IRQ TxDone 或超时
while (!rf_IRQ ())
{
if (Sx1262_Flag.RF_REACH 超时)//在发送超时时时时复位模块
{
UART_WRITE ("RF 超时...\n");
ClearIrqStatus (TxDone_IRQ);//清除 IRQ TxDone 标志
SetStandby (1);//0:STDBY_RC;1:STDBY_XOSC
RESET_sx1262 ();//重置射频
sx1262_Config();
中断;
}
Sx1262_Flag.IRQ_Status = GetIrqStatus();
if (TxDone_IRQ&Sx1262_Flag.IRQ_Status) break;
}
Sx1262_Flag.IRQ_Status = GetIrqStatus();
ClearIrqStatus (TxDone_IRQ);//清除 IRQ TxDone 标志
}
请提出建议。
提前感谢。