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.

[参考译文] LAUNCHXL-CC1310:CC1310中断嵌套问题

Guru**** 2482225 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1223315/launchxl-cc1310-cc1310-interrupt-nest-issue

器件型号:LAUNCHXL-CC1310

您好、专家!

我希望 在执行  INT_AON_RTC_COMB 中断期间实现中断嵌套函数 、该中断将被优先级高于  INT_AON_RTC_COMB 的射频内部中断。 代码示例如下所示:

RF_INIT()函数使用 RFCC26XX_MODE模式.c,中断设置为红线。  但结果是 RF INT 不能中断  INT_AON_RTC_COMB。  问题 是始终等待标志设置。

您能知道如何设置以启用中断嵌套吗? 谢谢!

/*---------------- 初始化和辅助函数------------------------------------------------------- */

/*
*初始化射频驱动器。
*
*输入:无
*返回:无
*/
静态空 RF_init (void)

…………

/*初始化射频驱动器使用的 SWI。 */
swip_params_init (&params.sp);
params.sp.priority = RFCC26XX_hwAttrs.swiPriority;   // swiPriority  == 0xFF、 等于 HwiPCC26XX_nortos.c 中的 INT_PRI_level6设置  
swip_structure (&rf_swiFsmObj、rf_swiFsm、&params.sp);
swip_structure (&rf_swiHwObj、rf_swiHw、&params.sp);

/*初始化射频驱动程序使用的 HWI。 */
HwiP_Params_init (&params.HP);
params.hp.priority = RFCC26XX_hwAttrs.hwiPriority;
HwiP_building (&RF_hwiCpe0Obj、INT_RFC_CPE_0、RF_hwiCpe0PowerFsm、&params.hp);
HwiP_building (&rf_hwiObj、INT_RFC_HW_comb、rf_hwiHw、&params.hp);

公司名称

}

/*------------------ */

void cmd_rx_cb (RF_handle 客户端、RF_CmdHandle 命令、RF_EventMask 事件)

if (Events & RF_EventMdmSoft)

  IS_SYNC_END = 1;
}
if (Events & RF_EventRxEntryDone)

  IS_CCA_STATE_BUSY = 1;
}
}

静态空
rtimer_isr_hook (空)

if (AONRTCEventGet (RTIME_RTC_CH){
AONRTCEventClear (RTIME_RTC_CH);
AONRTCChannelDisable (RTIME_RTC_CH);
IS_CCA_STATE_BUSY = 0;

IS_SYNC_END = 0;


/*发布专有 RX 命令*/
CMD_RX_Handle = RF_postCmd (&RF_netstack、(RF_Op *)&netstack_cmd_rx
RF_PriorityNormal、cmd_rx_cb、
RF_EventMdmSoft|RF_EventRxEntryDone);

while (IS_SYNC_END == 0);          //问题------- 始终等待标志设置

while (IS_CCA_STATE_BUSY=0);
}

}
/*------------------ */
/**
**简明要做
*/
空隙
rtimer_arch_init (void)

uintptr_t 键;
ClockP_Struct clk_object;
ClockP_Params clk_params;
Volatile isr_fxn_t * ramvec_table;

key = HwiP_disable ();

/*
*创建一个虚拟时钟以保证 RAM 矢量表已初始化。
*
*创建虚拟时钟将触发 TimerP 的初始化、即
*随后初始化 driverlib/interrupt.h 模块。 是的
*用于初始化 RAM 矢量表的中断模块。
*
*之后立即销毁时钟对象是安全的。
*/
ClockP_PARAMS_init (&clk_params);
ClockP_structure (&clk_object、rtimer_clock_slub、0、&clk_params);
ClockP_destruct(&clk_object);

/*尝试访问 RAM 矢量表。 */
ramvec_table =(ISR_fxn_t *) HWREG (NVIC_VTABLE);
if (!ramvec_table){
/*
*找不到 RAM 矢量表是一个严重错误。
*永久自锁。
*/
for (;;){/* hang */}
}

/*
* HWI 调度 ISR 位于中断号 INT_AON_RTC_COMB 上
RAM 矢量表中。 获取并存储它。
*/
hwi_dassign_fxn =(hwi_dassign_fxn_t) ramvec_table [INT_AON_RTC_COMB];
if (!hwi_dispatch_fxn){
/*
*在 RAM 矢量表中找不到 HWI 调度 ISR
一个严重的错误。 永久旋转锁定。
*/
for (;;){/* hang */}
}

/*
*使用我们自己的 ISR 挂钩覆盖 INT_AON_RTC_COMB 中断编号、
*它将作为 HWI 分派的中间人 ISR。
*/
IntRegister (INT_AON_RTC_COMB、rtimer_ISR_HOOK);
IntPrioritySet (INT_AON_RTC_COMB、INT_PRI_LEVEL7);

AONEventMcuWakeUpSet (AON_EVENT_MCU_WU3、AON_EVENT_RTC_CH1);
AONRTCCombinedEventConfig (HWIP_RTC_CH | RTIME_RTC_CH);

HwiP_RESTORE (密钥);
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    来自重复线程的其他信息:
    添加一些说明: 我将发送关于其他代码的射频数据包。 以上代码仅用于接收器。 谢谢!