Tc23A STM 定时器中断仅适用于优先级 0 " "

公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Translation_Bot
Community Manager
Community Manager
Community Manager

大家好,

我正在开发 TC23A 控制器。

创建了一个 100 ms 的计时器,优先级为 0,它(计时器和中断)可以正常工作,没有任何问题。

 

但是,如果我更改优先级数字(0 除外),则不会生成中断。

我正在使用 Tasking Compiler 并使用中断宏 " #define IFX_INTRUPTION(isr、vectabNum、prio)"

如果我更改"优先级数字(0 除外),则不会生成中断。"

 

有什么建议,

 

最诚挚的问候,

伊桑·亨特

0 点赞
6 回复数
Translation_Bot
Community Manager
Community Manager
Community Manager

你好 @EthanHunt

如果您的中断优先级为 0,则不会发生 ISR。

所以我对此很好奇。

当你更改 ISR 优先级时,是否也将 SRE 位设置为 1?

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

中断优先级 0--> 工作

中断优先级 0 以"外的中断优先级(例如:中断优先级 "10")"--> 不起作用

在所有情况下,SRE 位都设置为 1。 但是,中断并未生成

 

示例案例:

IFX_INTERRUPT (isrstM、0、ISR_PRIORITY_STM);

如果我将 " ISR_PRIORITY_ST " M--> 设置为 0 — 中断正在生成 " " > "

如果我将 " ISR_PRIORITY_STM "--> 设置为 10 —— 中断不会生成 " " >

仅对于 0 它起作用了

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

@EthanHunt

我不确切地知道。

但是我的代码不允许优先级 0 生成中断函数。

例如,来自英飞凌代码的 gtm_irq.c。

#if ((IRQ_GTM_TOM0_SR1_PRIO 0) || (IRQ_GTM_TOM) _SR1_CAT == IRQ_CAT > 2))

#if ((IRQ_GTM_TOM0_SR1_PRIO 0) (IRQ_GTM_TOM0_SR1_CAT == IRQ_CAT1>)) & &

...

IFX_INTERRUPTION (...)

...

#endif

#endif

 

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

关于优先级 " 0 "

#if ((IRQ_GTM_TOM0_SR1_PRIO 0) || (IRQ_GTM_TOM) _SR1_CAT == IRQ_CAT > 2))

我绕过了上述条件来生成中断

 

我之所以这样做,是因为我没有受到干扰。 所以,我尝试使用优先级 0,它正在运行。

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

@EthanHunt

您是否按原样使用其中一个代码示例? 如果没有, CAN 共享用于设置中断的代码?

最诚挚的问候,

埃里克

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

我正在使用示例代码:st m_interrupt_1_kit_tc234_TFT


/********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************
sp.h

" "
" #include #include"
#include " ifxport.h "
#include " ifxstm.h "

/********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************M 40
/* 中断的优先级 ISR */ #define TIMER_INT_TIME 500 /* 中断间隔时间(以毫秒为单位)*/


#define

#define LED M & ODULE_P13,0 /* 在中断服务例程 (ISR) 中切换 LED */
#define STM MODULE_STM0 /* STM & 0 在本例中使用 */

/******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** _stmconf;
/* STM 配置结构 */ ifx_tickTime g_ticksFor500ms; /* 用于存储等待的刻度数量的变量 */


/******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** m
(无效);


/********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************



* 此宏定义如下:
* 1) 将链接器部分定义为. < intvec_tc vector 数字 > _
* 2) 为中断函数定义编译器特定的属性。
* 3) 将中断服务例程定义为 ISR 函数。

* IFX_INTERRUPT(isr、vectabNum、priority)
*-isr:ISR 函数的名称。
*-vectabNum:向量表编号。
*-优先级:中断优先级。 有关更多详细信息,请参阅中断宏的用法。
*/
IFX_INTERRUPT (isrstM, 0, ISR_PRIORITY_STM);

void isrstM (void)
{
/* Update the compare register value that will trigger the next interrupt and toggle the LED */
IfxStm_increaseCompare(STM, g_STMConf.comparator, g_ticksFor500ms);
IfxPort_setPinState(LED, IfxPort_State_toggled);
}

/* 用于初始化 LED 的函数 */
void initLED (void)
{
IfxPort_setPinMode(LED, IfxPort_Mode_outputPushPullGeneral); /* Initialize LED port pin */
IfxPort_setPinState(LED, IfxPort_State_high); /* Turn off LED (LED is low-level active) */
}

/* 初始化 STM 的函数 */
void initstM (void)
{
ifxstm_initCompareConf (g_stmConf);/* 用默认值初始化配置结构 */ &

g_stmconf.triggerPriorit = ISR_PRIORITY_STM; /* 设置中断的优先级 */ g_stmconf.typeofService
= ifxsrc_tos_cpu0;/* 为中断设置服务提供商 */ g_stmconf
.ticks = g_ticksFor500ms;/* 设置计时器首次触发 * 中断的滴答次数 */ ifxstm_initCompare (STM, g_stmconf);/* 使用用户配置初始化 STM */}

&

/* 用于初始化使用的所有外围设备和变量的函数 */
void initOprectials (void)
{
/* 初始化时间常数 */ g_ticksFor500ms = ifxst
m_getticksFromMicless(BSP_DEFAULT_TIMER,TIMER_INT_TIMER);

initLED (); /* 初始化 LED 所连接的端口引脚 */
initstM (); /* 配置 STM 模块 */

}

 


ifxcpu_synceVent g_cpusynceVent = 0;

int core0_main (void)
{
ifxcpu_enableIntercrupts (); /*!!

WATCHDOG0 和安全看门狗在这里被禁用!!
* 启用监管机构并在需要时定期为它们提供服务
*/
ifxscuwdt_disablecpuWatchdog (ifxscuwdt_getcpuWatchdogPasswardog ());ifxscuwdt_disableSafetyWatchdogPassafetyWatchdog ();/* 等待 CPU 同步事件 */ ifxcpu_emiteVent (g_cpusynEvent (g_cpusynEvent (g_cpusynEvent () ceVent);
ifxcpu_waiteVent (g_cpusynceVent,1);initPearels ();/* 初始化 STM 模块和 LED */


&
&

而 (1)
{
}
返回 (1);
}

0 点赞