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/CC3200-LAUNCHXL:CC3200 Hwi 配置和通用定时器设置

Guru**** 2782445 points

Other Parts Discussed in Thread: SYSBIOS, CC3200, CC3200SDK

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/821154/rtos-cc3200-launchxl-cc3200-hwi-configuration-and-general-purpose-timer-set-up

器件型号:CC3200-LAUNCHXL
Thread 中讨论的其他器件:SYSBIOSCC3200CC3200SDK

工具/软件:TI-RTOS

您好!

我已经配置了一个 Hwi、该 Hwi 的关联中断号为35、即 TimerA0A。 我将其 ISR 函数 myTickFxn 命名为。 Hwi 配置如下:

VAR Hwi = xdc.useModule('ti.sysbios.hal.Hwi');
var hwi0Params = new hwi.Params();
hwi0Params.instance.name ="myHwi";
hwi0Params.priority =-1;
program.global.myHwi = Hwi.create (35、"&myTickFxn"、hwi0Params);  

还会选中启动时启用。 屏蔽选项设置为 MaskingOption_self。  

然后、我将计时器 A0A 配置 如下:

MAP_IntMasterEnable();
MAP_IntEnable (FAULT_SysTick);
Timer_IF_Init (PRCM_TIMERERA0、TIMERERA0_BASE、TIMER_CFG_PERIODICRAE、TIMER_A、0);
MAP_TimerLoadSet (TIMERRA0_BASE、TIMER_A、1000);
MAP_TimerEnable (TIMERERA0_BASE、TIMER_A);

请注意、我没有 Timer_if_IntSetup (TIMERERA0_BASE、TIMER_A、myTickFxn)语句;因为我的目标是 Hwi 负责响应计时器中断。 此外、我不加载矢量表、即我不执行  extern void (* const g_pfnVectors [])(void);  

myTickFxn 只是简单的:

void myTickFxn()

 i16ToggleCountHwi += 1;  
 log_info1 ("hwi the number of toggle%d"、i16ToggleCountHwi);  

所有操作都是在 CCS 9中使用 XDCtools 3.32.00.06和 TI-RTOS 2.16.1.14完成的。 我已经成功创建了一个空闲模块、这个模块工作正常。 问题是 Hwi 不工作。 我曾播放过不同的选项、并观看了有关 Hwi 的 TI-RTOS 培训视频以及 MSP430中针对 Hwi 的特定实验练习。 但我还没有弄清楚我的配置有什么问题。  

您能提供一些提示吗? 谢谢。  

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

    您好 Farhad、

    我们现在要查看这个问题。 很快就会回来。

    BR、

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

    您好!

    我从未做过、但您正在尝试执行此操作、但我可以快速看到中断编号35用于 TIMERA3、而不是 A0。

    第47页 TRM: http://www.ti.com/lit/ug/swru367d/swru367d.pdf

    Jesu

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

    您好、Jesu、

    中断编号实际上是35、您可以在 hw_ints.h 中找到它、部分如下:  

     

    #define INT_ADCCH2 32 // ADC 序列2.
    #define INT_ADCCH3 33 // ADC 序列3.
    #define INT_WDT 34 //看门狗定时器0
    #define INT_TIMERERA0A 35 //计时器0子计时器 A
    #define INT_TIMERERA0B 36 //计时器0子计时器 B
    #define INT_TIMERERA1A 37 //计时器1子计时器 A
    #define INT_TIMERERA1B 38 //计时器1子计时器 B
    #define INT_TIMERERA2A 39 //计时器2子计时器 A
    #define INT_TIMERERA2B 40 //计时器2子计时器 B
    #define INT_FLASH 45 //闪存控制
    #define INT_TIMERA3A 51 //计时器3子计时器 A
    #define INT_TIMERA3B 52 //计时器3子计时器 B
    #define INT_UDMA 62 // UDMA 控制器

    第47页显示 了中断编号(中断寄存器中的位)。 我尝试了19次、如表所示、但它不起作用。  

    谢谢、  

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

    您好 Farhad、

    您必须使用 Timer_IF_IntSetup 、因为它启用计时器外设的中断并向其注册中断处理程序。 如果没有这种情况、计时器在超时时时不会执行任何操作。  

    Jesu

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

    您好、Jesu、  

    我知道你的建议。 TI 已经提供了一个中断示例、展示了如何在 CC3200中设置计时器中断。 但是、我的目标是使用 BIOS 并在 cc3200中设置一个 Hwi   来处理中断。 MSP430等其他微控制器已经有了这方面的示例。      请参阅 training.ti.com/ti-rtos-workshop-series-5-10-using-hwi 谢谢。  

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

    好的一天 ,Seong,  

    我的问题是否有任何更新?  

    谢谢、  

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

    您好 Farhad、

    您答对了、CC3200确实有一个计时器示例、但它不使用 RTOS。 对于 CC3200、必须单独下载 RTOS 支持并在开发环境中进行配置。 你已经完成了吗?

    Jesu

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

    您好、Jesu、

    我已下载 RTOS (tirtos_cc32xx_2_16_01_14)、 而 CCS 已将其识别。 在配置方面、我已经实现了一个空闲模块、这个模块工作正常。 我认为应该确认 CCS 中的 RTOS 配置应该是正确的。 您是否认为需要其他类型的配置?  

    谢谢、  

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

    您好 Farhad、

    为什么不尝试在 CCS 中使用 XGCONF GUI 来配置中断。 只需右键单击.cfg 文件->使用-> XGCONF 打开。 您创建了 Hwi 实例并以图形方式为其提供参数、然后它将自动为您添加代码到.cfg 文件的末尾。  

    Jesu

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

    此外、我仍然认为您必须调用  Timer_if_IntSetup。  cfg 将仅为您设置 Hwi 并将其映射到中断矢量、但需要设置计时器外设本身来触发它。

    Jesu

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

    您好、Jesu、

    我实际上使用 GUI 来设置东西。 如果我们假设  需要由我(程序开发人员)设置 Timer_if_IntSetup、我认为您同意我的观点、如果我将 GUI 生成的以下指令中的35更改为任何其他数字、则程序不应仅作为35点到 timerA0A 中断运行。 但该程序有效! 这意味着 BIOS 执行的以下设置是无用的。 换言之、不使用/调用 Hwi、观察调试中的执行情况也会确认这一点。 因此、我们不应该使用  Timer_if_IntSetup、BIOS 应该处理所有的事情。 研究 TI 在 MSP430上的实施方案来实现同样的目的也证实了我的观点。  

    program.global.myHwi = Hwi.create (35、"&myTickFxn"、hwi0Params);  

    谢谢、  

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

    您好 Farhad、

    正确、BIOS 不是您要完成的任务所必需的。 很高兴您的计划能够正常运行。

    如果您不再有问题、我将关闭此主题。

    Jesu

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

    Jesu、

    不要关闭螺纹。

    我需要使用 BIOS 来实现它。 我正在等待 Seong (TI)回答这个问题。  

    谢谢!

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

    Farhad、

    我很困惑、我以为您说该程序可以正常工作。 为了确保我们位于同一页、当你说 BIOS 时、你意味着你试图在 cfg 文件中静态配置 Hwi、而不是在代码中写入 Hwi?

    编辑:

    此外,成星不再处理此线程。

    Jesu

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

    Jeus、

    为了重新表述我之前说过的内容、我想使用 BIOS 和在 cc3200中设置 Hwi 来实现。  我 通过 GUI 静态设置和配置了 Hwi 、但它没有工作。 我仔细关注 https://training.ti.com/ti-rtos-workshop-series-5-10-using-hwi 并根据 cc3200规格设置参数。 如果您执行同样的操作、您应该会看到问题。  

    谢谢。  

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

    Farhad、

    请告诉我您使用的 SDK 版本是什么、以及您将此项目基于哪个示例?  我将尝试根据您的设置创建该文件。

    Jesu

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

    Jesu、

    在第一篇文章中、我介绍了详细信息。 所有操作都在 CCS 9中使用 XDCtools 3.32.00.06和 TI-RTOS 2.16.1.14以及 CC3200SDK_1.4.0完成。  为方便起见、我在这里还附加了两个文件、这些文件显示了 MSP430中的实现方式 谢谢。  

    e2e.ti.com/.../7183.empty.cfge2e.ti.com/.../4722.main.c

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

    您好 Farhad、

    我们的 SDK 没有任何使用基于 RTOS 的硬件中断的示例。 我一直在尝试自己设置一个、但没有足够的时间来找出我遇到的一些错误。  

    我尝试使用 wlan_ap 示例、该示例已将 ti_rtos 配置为依赖项。 然后、我从计时器示例中获取了以下行、并向工程中添加了必要的变量和 include。  

    TIMER_IF_Init (PRCM_TIMERERA0、G_ulBase、TIMER_CFG_PERIODICRAE、TIMER_A、0);
    Timer_if_IntSetup (g_ulBase、timer_A、testing123);
    Timer_if_Start (g_ulBase、timer_A、 500); 

    我还按如下方式定义了 ISR:

    void testing123 (void)
    {
    //
    //清除计时器中断。
    //
    Timer_IF_InterruptClear (g_ulBase);
    
    G_ulTimerInts ++;
    } 

    最后、我在 tirtos 项目中的.cfg 文件中添加了使用 GUI 工具自动生成的以下行、以静态配置硬件中断:

    var ti_sysbios_hal_hwi0Params = new ti_sysbios_hal_hwi.Params ();
    ti_sysbios_hal_Hwi0Params.instance.name ="ti_sysbios_hal_hwi0";
    Program.global.ti_sysbios_hal_hwi0 = ti_sysbios_hal_hwi.create (35、"&testingthisb_hwi0123); 

    我遇到的问题是  、从 Timer_IF_IntSetup 中的 OSI_InterruptRegister 返回后、我会在某些超出范围的地址中结束、然后在几个周期后进入退出函数。 我一开始以为这是因为在 Hwi 和计时器 ISR 中使用相同的 ISR 可能会有一些冲突、所以我更改为 Timer_IF_IntSetup (g_ulBase、timer_A、null);但仍然会遇到相同的问题。 因此、我删除了对.cfg 文件的更改、只是为了查看计时器本身是否正常工作、我不会在退出函数中结束、但出于某种原因、ISR 未被触发。  

    下一步是研究导致计时器外设在 wlan_ap 项目中无法正常工作的原因。 这可能只是我使用的示例中的配置问题、也可能是使用 tirtos 项目时的一些干扰。 定时器代码取自不使用 RTOS 的定时器项目。 我注意 到非 RTOS 示例在 BoardInit 中初始化中断矢量表、但在 RTOS 示例中、它依靠操作系统来执行此操作。

    我知道这对我没有太大帮助(我的大部分经验是使用 CC3X2X 器件)、但我至少想更新我看到的内容。 也许它会为您提供一些想法。 只要我有新信息、我就会更新。

    Jesu

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

    请忽略我的 TI 认为已解决的问题。 事故。

    Jesu