您好、专家!
我希望 在执行 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 (¶ms.sp);
params.sp.priority = RFCC26XX_hwAttrs.swiPriority; // swiPriority == 0xFF、 等于 HwiPCC26XX_nortos.c 中的 INT_PRI_level6设置
swip_structure (&rf_swiFsmObj、rf_swiFsm、¶ms.sp);
swip_structure (&rf_swiHwObj、rf_swiHw、¶ms.sp);
/*初始化射频驱动程序使用的 HWI。 */
HwiP_Params_init (¶ms.HP);
params.hp.priority = RFCC26XX_hwAttrs.hwiPriority;
HwiP_building (&RF_hwiCpe0Obj、INT_RFC_CPE_0、RF_hwiCpe0PowerFsm、¶ms.hp);
HwiP_building (&rf_hwiObj、INT_RFC_HW_comb、rf_hwiHw、¶ms.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 (密钥);
}