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/TMS320F2.8377万D:如何使用sys/bios使30US优先级计时器中断?

Guru**** 2595805 points
Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/661318/rtos-tms320f28377d-how-to-make-30us-priod-timer-interupt-using-sys-bios

部件号:TMS320F2.8377万D
线程中讨论的其他部件: SysBIOSTMS320F2.8379万D

工具/软件:TI-RTOS

你(们)好

I 使用TMS320F2.8377万D IC。

我要制作ISR计时器。

但是  我不能 在 SYS/BIOS中制作30US (微)计时器。

VAR计时器= xdc.useModule('ti.sysbios.family.c28.Timer');
VAR timerParams =新Timer.Params();
timerParams.startMode = Timer.StartMode_Auto;
timerParams.runMode = Timer.RunMode_Continuous;
timerParams.period = XXXX;
timerParams.thesType = xdc.module ("ti.sysbios.interfaces.ITimer").PeriodType_COUNTS;
var myTimer = Timer.creation(0,'&myTickFxn', timerParams);

实验的结果

周期 1万 -> 4ms

           5000 -> 2毫秒

           500 -> 200 us

          100->100us

          50 -> 100us

我无法理解。

I使用200MHz IC。

我认为 "1Count = 5ns"

有限制吗?

如何 使用sys/bios使30us priod计时器中断?

已建立 无操作系统系统。

效果很好。 30US

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

    您需要定时器做什么? 它是否需要调用内核API (例如 semaphore_post)。 如果没有,我会使用零延迟Hwi (内核添加零延迟)。 有关零延迟的详细信息,请访问 processors.wiki.ti.com/.../BIOS_for_the_28x

    注意:您将基本上使用与您的非操作系统版本相同的代码,但您需要告诉内核此中断已被插入,但内核不应对其执行任何操作。

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

    我要使用sys/bios和 timer(30US)。

    我尝试您的指南(零延迟Hwis此处: processors.wiki.ti.com/.../BIOS_for_the_28x)

    但错误 (ti.Sysbios.family.c28.hwi.instance#0: Hwi 38与IER掩码0x1 .xdchelp /sw28_TMS320F2.8379万D 线259 C/C++问题冲突)

    我做不到。

    能否使用sys/bios提供30US priod timer interupt的示例代码?

    谢谢你

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是否可以发布代码以设置定时器? 我对该设备的熟悉程度不足以自己做到这一点。 我可以向您展示如何将其捆绑为零延迟中断。

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

    我的代码基于SYS/BIOS示例代码,TMS320F2.8379万D,28x特定示例,任务示例。

    刚修改过的HWI.zeroLatencyIERMask = 1;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我正在做一个例子。 您不能只设置HWI.zeroLatencyIERMask =1。 您还需要使用HWI_plug并配置计时器。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我不知道如何设置HWI_plug和配置计时器

    能否修复我的cfg文件?

    VAR默认值= xdc.useModule('xdc.runtime.Defaults');
    VAR Diags = xdc.useModule('xdc.runtime.Diags');
    VAR错误= xdc.useModule('xdc.runtime.Error');
    VAR日志= xdc.useModule('xdc.runtime.Log');
    VAR LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
    VAR主要= xdc.useModule('xdc.runtime.Main');
    VAR SYSMIN = xdc.useModule('xdc.runtime.SysMin');
    VAR系统= xdc.useModule('xdc.runtime.System');
    VAR文本= xdc.useModule('xdc.runtime.Text');

    VAR Hwi = xdc.useModule('ti.sysbios.family.c28.Hwi');

    /*
     *取消注释此行以全局禁用断言。
     *所有模块从'库'模块继承默认值。  您
     *可以使用Module.common$按模块覆盖这些默认值。
     *禁用断言将节省代码空间并提高运行时性能。
    Defaults.common$.diags_ASSERT = Diags.always关闭;
     */

    /*
     *取消注释此行以防止模块名称加载到目标上。
     *模块名称字符串位于.const部分。 设置此项
     *参数设为false将节省.const部分中的空间。  错误和
     * Assert消息将包含"未知模块"前缀
     实际模块名称的*。
    Defaults.common$.namedModule =假;
     */

    /*
     *最小化系统中的退出处理程序数组。  系统模块包括
     *在System_atexit()中注册的函数数数组
     *由System_exit()调用。
     */
    System.maxAtexitHandlers = 4;       

    /*
     *取消注释此行以禁用错误打印功能。  
     *禁用此功能后,我们将丢失错误信息,因为错误已禁用
     *未打印。  如果禁用raiseHook,将节省一些代码空间
     *由于Error_print()函数,您的应用程序未使用System_printf()
     *调用System_printf()。
    error.raiseHook =空;
     */

    /*
     *取消注释此行以防止出现错误,断言和日志字符串
     *已加载到目标上。  这些字符串位于.const部分。
     *将此参数设置为false将节省.const部分中的空间。
     *错误,断言和日志消息将打印原始ID和参数,而不是
     *格式化的邮件。
    text.isLoded =假;
     */

    /*
     *取消注释此行以禁止SYSMIN输出字符
     *程序退出时。  SYSMIN将字符写入循环缓冲区。
     *可以使用ROV中的SYSMIN输出视图查看此缓冲区。
    SYSMIN.flushAtExit = FALSE;
     */


    /*
     *使用SYSMIN进行输出(System_printf()和错误消息)和
     *最小化输出缓冲区大小以节省数据空间。
     */
    System.SupportProxy = SYSMIN;
    SYSMIN.bufSize = 80;

    /*
     *创建LoggerBuf并使其成为所有模块的默认记录器。
     */
    VAR LoggerBufParams =新的LoggerBuf.Params();
    LoggerBufParams.numEntries =16;
    var logger0 = LoggerBuf.creation(LoggerBufParams);
    Defaults.common$.logger =记录器0;

    Main.common$.diags_INFO = Diags.always开;

    program.stack = 0x100;

    /*
     *特定于应用程序的配置
     */
     
    /*
     *禁用未使用的BIOS功能以最小化占用空间。
     *此示例使用任务,但不使用Swis或Clocks。
     */
    VAR BIOS = xdc.useModule('ti.sysbios.BIOS');
    BIOS.swiEnabled =假;
    BIOS.taskEnabled =真;
    bios.clockEnabled =假;

    /*最小化系统堆大小*/
    bios.heapSize = 0x0;

    /*
     *创建计时器实例以生成定期中断。
     *
     *计时器将在BIOS_START()中启动
     *螺纹
     */
    VAR计时器= xdc.useModule('ti.sysbios.family.c28.Timer');
    VAR timerParams =新Timer.Params();
    timerParams.startMode = Timer.StartMode_Auto;
    timerParams.runMode = Timer.RunMode_Continuous;
    /*计时器周期为1/2秒(50万 uSeconds)*/
    timerParams.period = 50万;
    timerParams.periodType = Timer.PeriodType_microsecs;
    var myTimer = Timer.creation(0,'&myTickFxn', timerParams);

    /*创建优先级为1的任务*/
    VAR任务= xdc.useModule('ti.sysbios.knl.Task');
    VAR taskParams =新的Task.Params();
    taskParams.priority =1;
    var myTask = Task.create('&myTaskFxn',taskParams);

    /*禁止创建运行空闲功能的任务*/
    task.enableIdleTask = false;

    /*
     *为ISR使用的计时器创建二进制信号
     *每10个勾号发出待处理任务的信号
     */
    VAR信号= xdc.useModule('ti.sysbios.knl.Semaphore');
    VAR semParams =新的semaphore.Params();
    semParams.mode = semaphore.Mode_binary;
    program.globe.mySem = semaphore.creation(0, semParams);

    /*
     *构建自定义BIOS库。  自定义库将小于
     *预构建的“已分析”(默认)和“未分析”库。
     *
     * BIOS.logsEnabled参数指定是否启用日志记录
     *在BIOS中用于此自定义版本。  RTA和使用这些日志
     * UIA分析工具。
     *
     * bios.assertsEnabled参数指定是否将使用BIOS代码
     *包括Assert()检查。  将此参数设置为'false'将生成
     *代码越小越快,但建议启用断言
     *早期开发,因为Assert()检查将捕获大量编程
     *错误(无效参数等)
     */
    BIOS.libType = BIOS.LibType_Custom;
    bios.logsEnabled =假;
    bios.assertsEnabled =真;

    HWI.zeroLatencyIERMask = 1;

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

    很抱歉耽误你的时间。 你可以看看这个。 它仍然是草稿(欢迎任何反馈)。 希望它能解答您关于如何在SYS/BIOS应用程序中设置零延迟计时器的问题 。e2e.ti.com/.../C28_5F00_zero_5F00_latency.pdf

    托德

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    仅供参考...我在此页面上发布了完整的PDF: processors.wiki.ti.com/.../BIOS_for_the_28x

    搜索latency.pdf。

    托德