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.

[参考译文] RTOS:在非BOis中存在C2000 RTOS HWI's配置问题

Guru**** 2595800 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/665191/rtos-there-is-a-question-of-c2000-rtos-hwi-s-configuration-that-in-non-bois

工具/软件:TI-RTOS

您好:

我不在non_Bois中使用HWI设置。

首先,我读了研究论文:

如所示,我不理解“0x10 is INT5”  ,  什么是INT5?

然后,当我导入关于non_Bois HWI配置的样本项目时:

为什么是67,0x10, 5,0x0008?

有人能解释吗?

祝您一切顺利

猎人

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

    您好,Yanzhen:

    请参阅 TMS320F2803x Piccolo系统控制和中断参考指南。 您将找到下表

    因此中断在第5组中。  

    HWI_plug采用中断号。

    hwi_enableIER采用组号掩码。 组号为5,因此设置第五位为0x10。

    hwi_enablePIEIER获取组号和饼图掩码。 SO 5和0x8 (设置第四位,因为它是组5中的第四位)。

    您可能还需要参考此页面:  

    托德

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢Todd!
    我明白了!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Todd您好:
    正如您所说的,5.4 中没有课程。 所以
    "
    //将非BIOS管理的中断(67,组5)插入矢量表并启用它
    hwi_plug (67,(Hwi_PlugFuncPtr) ISR_nonBIOS); //将67插入向量表(组5)
    hwi_enableIER(0x10); //启用INT5 (组5)
    hwi_enablePIEIER (5,0x0008);

    void interrupt isr_nonBIOS()

    nonbios_isR_end = Timestamp_get32();// 获取计时器快照
    //ASM (" NOP");
    // PieCtrlRegs.PIEACK/bit.ACK3 =1;//确认PIE中断或...
    // PieCtrlRegs.PIEACK.ALL = PIEACK_Group1;
    }
    ISR无法运行此中断! 对吧?
    祝您一切顺利
    猎人
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我在这里看到两件事是错误的:

    1) hwi_plug()应该引用中断号5,因为这是PIE中断67所在的核心中断。
    2)由于这是一个非BIOS管理的ISR,因此不应从其内调用任何BIOS API (即Timestamp_get32())。

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

    您好,Alan

    谢谢你。

    我不明白的是:

    1) hwi_plug(67,(Hwi_PlugFuncPtr) isR_nonBIOS);//将67插入向量表(组5) ,  这个“67”   是错误的?

    2) vetor表(group5)只有QEP,5.4  中没有任何内容。    这意味 着,其中没有触发器。 中断如何?

    3)您知道此示例不是BIOS,但使用BIOS API。  (即HWI_plug() ),“零延迟”是“使用BIOS管理”。  

    此程序来自TI。 但无法运行到我尝试的interrup中。 e2e.ti.com/.../C28x_5F00_Hwi_5F00_Benchmarks.zip

    请看一下。

    祝您一切顺利

    猎人

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在仔细阅读了这个例子之后,我意识到我误认为67是hwi_plug()的一个错误的论点。 这应该可以。

    另外,从非BIOS管理的ISR调用Timestamp_get32()也是可以的,因为Timestamp_get32()不会与任何BIOS关键数据结构交互。

    我看不到基准测试示例不运行的任何明显原因。 由于我无法访问您正在运行的主板,因此目前无法轻松重现问题。

    示例使用的特定PIE中断可能在您的设备上没有空闲,因此导致了问题。 您是否说应用程序永远不会到达ISR_NOBIOS()? 还是一次又一次地去那里? 或者它可能会不断地回到那里? 如果是这种情况,您可以尝试取消注释第171和172行,以查看PIE控制器是否需要对此非空中断进行正确的服务。

    艾伦
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    嗨,我取消了第171和172行的评论,但是没有发生任何事情!
    我的意思是,5.4 中有一个resver。所以什么也不会发生。但为什么要使用5.4 呢? 困惑....
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Alan:
    正如您所说:

    void interrupt isr_nonBIOS()

    nonbios_isR_end = Timestamp_get32();// 获取计时器快照
    ASM (" NOP");
    PieCtrlRegs.PIEACK/bit.ACK3 =1;//确认中断到PIE或...
    PieCtrlRegs.PIEACG.ALL = PIEACK_GROUP1;
    }

    它可以一次中断,但下次不会发生任何事情!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如果我对应用程序的理解正确,中断只会发布一次:

    void taskFxn (UArg a0,UArg A1)
    {
    
    	t0 = Timestamp_get32();							//确定时间戳开销
    	T1 = Timestamp_get32();
    	timestamp_thead = T1 - t0;
    
    	BIOS_interrupt_start = Timestamp_get32();					//启动由BIOS管理的快照
    	hwi_post(38/										
    
    					非getbios)
    										// POST非BIOS管理INT (67)//
    
    	计算中断延迟
    	BIOS_int_latency = BIOS_ISR_END - BIOS_ISR_START - timestamp_overhead;
    	nonbios_int_latency = nonbios_ISR_END - nonbios_ISR_start - Interrupt_overhead;
    
    	//将结果打印到控制台屏幕
    	System_printf ("时间戳记时间= tim_timpeast cycles =[%u]
    	
    	system_printf ("C28x零延迟中断延迟延迟=[%u]周期\n",nonbios_int_latency);
    	System_flush();
    
    	//在此处陷入空闲循环-永远
    。}
    

    所以,我不确定问题是什么。

    艾伦

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