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.

[参考译文] CCS/MSP430F5529:如何使用MSp430F5529 LP中的端口1/2中断与1120-1190 Booster1190 Booster Pack SIGFOX演示项目

Guru**** 2535750 points
Other Parts Discussed in Thread: MSP430F5529, CC1120, MSP430F5438A, BOOSTXL-CC1120-90

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/572839/ccs-msp430f5529-how-to-use-port-1-2-interrupts-in-msp430f5529-lp-with-1120-1190-booster-pack-sigfox-demo-project

部件号:MSP430F5529
主题中讨论的其他部件: CC1120MSP430F5438ABOOSTXL-CC1120-90

工具/软件:Code Composer Studio

您好,

我想使用MSP430F5529 LP中带有端口1/2中断的LPM3以及使用Sigfox库演示的1120-1190 Booster1190 Booster Pack。 我希望MCU进入lpm3,只能通过按钮启动板唤醒WFP 1.1 和WFP 2.1 中断,并使用库函数发送Sigfox帧。

我已经导入了我从Sigfox收到的LP项目 ,并尝试了AT_command & button press轮询演示,它们工作正常。 我可以发送sigfox帧。
但是我想在我的项目中使用中断,正如我前面所描述的那样,当我切换按钮时,按DEMO使用中断而不是轮询(此开关在代码中提供),存在一些问题。  我先向Sigfox支持部门询问此问题,他们指示我向TI咨询。
以下是问题的摘要:
1)要在 SIGFOX_DEMO_BUTTON PRESS中使用中断,  必须删除BSP_KEY.c中的"#define BSP_KEY_NO_ISR"语句,   并且必须使用'BSP_KEY_MODE_ISR'参数调用sigfox_DEMO.c/SIGFOX_DEMO_INIT_mcutfunction中的bspKeyInit函数。 我做了这些更改,但项目没有编译,因为   项目中缺少了BSP键中包含的“io_pin_int.h”头文件。
2)我从  TI网站上找到了CC1120 EasyLink源代码,其中包括所有 BSP 和 IO_PIN_int文件。 我已将 io_pin_int.h和 io_pin_int.c文件添加到项目中。 (请参阅下面的屏幕截图以了解项目的目录结构)。这次项目通过了编译阶段,但链接失败,指出Port1_vector 和port2_vector中断向量已在TI_SIGFOX_Lib_FCC.lib中定义,并在 IO_pin_int.c中重新定义:

链接>
错误#1.0056万:重新定义符号"__TI_int47":首先在"./BSP/IO_PIN_int.obj"中定义;在"./ti_sigfox_library/TI_SIGFOX_lib_FCC.lib<hal_digio2.obj>"中重新定义
错误#1.0056万:重新定义符号"__TI_int42":首先在"./BSP/IO_pin_int.obj"中定义;在"./ti_sigfox_library/TI_SIGFOX_lib_FCC.lib<hal_digio2.obj>"中重新定义
错误#1.001万:链接时发生错误;未生成"TI_SIGFOX_FCC_CCS_PROJECT.OUT"

显然,Port1和port2向量是在库中的某个位置定义的。 由于它 是预 编译的  ,我无法检查或修改Sigfox库文件。 如果我从 io_pin_int.c中注释掉端口1和端口2中断向量,则项目将生成,但注册的自定义中断将不起作用,因为库中的端口中断与在 BSP_KEY.C.中注册的自定义中断函数之间没有连接
我尝试使用TI 4.4 8和16.9 0 LTS编译器,但没有任何区别。
我想知道是否有方法将自定义中断函数注册到Sigfox库中定义的ISR或任何其他解决方案。是否可以在该问题上获得一些帮助和指导?

非常感谢你们的帮助!!

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

    如hal_spI_RF_exp5529.h所示,Port1_vector定义为button_vector,port2_vector定义为RF_port_vector。 button_vector在LaunchPad_TRx_main.c中使用,RF_port_vector在对应的RADIO_drv/cc11[xx]_drv文件夹的cc11[xx]_drv.c文件中使用。

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

    您好,Ryan:

    感谢您的快速响应。

    这是f5529LP+ 1120-1190 BoosterPack1190 BoosterPack的标准TI Sigfox演示项目,在我收到LP+BoosterPack后,Sigfox将其发送给我。 项目中包含的所有文件都显示在屏幕截图中。 没有hal_spi_rf_exp5529.h或Launchpad_TRx_main.c. 它们可能位于TI_SIGFOX_lib_FCC.lib (已预编译且不可见)中。

    您可以看到我正在获取链接器错误"error #1.0056万: symbol "__TI_int42" redefined: first defined in "./BSP/IO_pin_int.obj";redefined in "./ti_sigfox_library/ti_interrupts SIGFOX_lib_FCC.lib<hal_digio2.obj>"当我尝试使用时。 在默认配置中,项目在 AT命令模式下工作,该模式不使用中断,因此您可以使用串行端口打开终端连接,并且工作正常。 模式通过sigfox_demo.c中的以下变量进行配置:

    test_sequence_list test_sequence_choice = AT_cmd; 

    当您修改此行并将其更改为"Button_press"时,它将切换到按按钮演示并使用轮询来检查启动板上的P1和P2,以发送sigfox消息,这也可以正常工作(也不使用按钮中断)。 构建和运行。 您还需要使用默认配置BSP键模式轮询参数从BSP键C调用bspKeyInit函数:

    //bspKeyInit(BSP_KEY_MODE_pol); 

    但我想演示一下我的应用程序使用低功耗模式和中断。 因此,在BSP_key.c中还有一个用于使用中断的开关,这是一个名为BSP_KEY_NO_ISR的指令。 默认情况下,定义此选项是为了不使用中断,当我指出它切换为使用中断而不是轮询时(代码的简介中对此进行了描述):

    #ifndef BSP_key_exclude
    
    
    /********************************************************************************** //**
    *@addtogroup BSP
    *@{********************************************************************************
    //#define
    
    BSP_KEY_NO_ISR
    
    /**************************************************************************************
    *包括
    */
    #include "BSP.h"
    #include "BSP_key.h"
    
    //#include "ti_sigfox_library\*"
    //#include "sigfox_api.h"
    #ifndef BSP_key_no_ISR
    #include "io_pin_int.h" //访问GPIO引脚特定ISR
    #endif // BSP_key_no_ISR
    
    #include "driverlib.h"
    //#include "hal_digio2.h"
    
    /****************************************************************************************
    *定义
    */ 

    //! @TRxEB上MSP430F5438A的简单键盘支持包。
    //! 可以使用轮询或中断来处理按键
    //! 可以切换运行时。 用户可以注册自定义ISR
    //! 使用bspKeyIntRegister()函数。
    //!
    //! 如果注册了自定义ISR,则会在之前调用该ISR
    //! 启动看门狗计时器。
    //!
    //! 如果已定义了\c BSP_KEY_NO_ISR,则密钥反跳将为
    //! 使用活动状态去抖动实现(ISR不可能)。
    //! 包含此定义的功能以允许监视程序
    //! 键处理程序未占用中断向量。 时间
    //! \c BSP_Key_NO_ISR已定义,bspKeyPush()和bspKeyGetDir()
    //! 将轮询连接到密钥的GPIO针脚。 中断
    //! 相关函数将不执行任何操作。

    您还需要使用 BSP_KEY_MODE_ISR参数调用bspKeyInit:
    bspKeyInit(BSP_KEY_MODE_ISR);

    当我进行这些更改时,项目没有编译,因为项目中缺少io_pin_int.h,如上面所示,如果没有定义BSP_KEY_NO_ISR,则会包含该项目。 代码中似乎提供了中断选项,但未正确测试此项目的中断。

    我在1120 EasyLink软件示例中找到了io_pin_int.h和io_pin_int.c,并包含了它们。 然后编译该项目,但得到了我在上面发布的链接器错误,因为在 TI_SIGFOX_lib_FCC.lib的其他位置也定义了相同的中断IO_PIN_int.c。 我看不到TI Sigfox库中的内容。 我就此联系了Sigfox,他们建议他们只为所有其它应用问题构建sigfox调制代码,我应该联系TI。

    因此,我的问题是将我的自定义ISR函数注册到按钮中断,这显然可以通过 BSP_key.c.中的bspKeyIntRegister()函数完成 但是,BSP_key.c使用 ioPinIntRegister()函数来自io_pin_int.c,该函数还定义了port_1_vector和port_2_vectors以及ISR来调用自定义ISR函数。 显然,这些矢量也在 TI_SIGFOX_lib_FCC.lib中定义,因此项目不会链接。 对于 Sigfox,我必须使用TI_SIGFOX_lib_FCC.lib,因此无法找到如何使用此预编译库中的中断的方法。

    正如我上面所说的,我的计划是使用WFP 1.1 和WFP 2.1 中断从LPM3唤醒CPU,使用库发送sigfox帧,然后返回lpm3。 该项目使用按钮轮询而不是中断来发送消息。 可能有一些关于该项目的文档我找不到。 因此,我将感谢您的帮助。

    谢谢

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

    只是一个更新。

    我在论坛上找到了以下帖子:

    显然,他们在sigfox项目稍微不同的版本中遇到了相同的问题,我认为他们的错误显示了 在components/common文件夹下的hal_digio2.obj中定义的int47,而我的错误显示 了在TI_SIGFOX_lib_FCC.lib<hal_digio2.obj>中定义的int47 (项目中没有components文件夹):

    错误#1.0056万:重新定义符号"__TI_int47":首先在"./components/common/hal_digio2.obj"中定义;在"./apps/sigfix_demo.obj"中重新定义
    所以我按照帖子的建议使用halDigio2IntConnect()来注册自定义中断:
    digio my_pin ={.port =1,.pin =1 };
    halDigio2IntConnect(my_pin,Port_1_1);
    ...
    
    void Port_1_1(void)
    {
    //自定义代码
    }
    

    并从BSP_KEY.c中删除了对io_pin_int.h的引用,在sigfox_demo. c中手动启用了中断

    现在这个项目已经成功地建立了,我将把它闪存到主板上并尝试中断。 我将在获得结果后再次发布。

    谢谢

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

    抱歉,我指的是BOOSTXL-CC1120-90/TIDA-SIGFOX-CC1120-CC1190-BP提供1120提供的1190的软件示例资源。 很高兴听到您可能找到了解决方法,请在测试后发布结果。

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

    您好,Ryan:

    正如我上面所述,我现在已将公用文件夹添加到项目中,其中包括我在GitHub (github.com/.../MSP430_SIGFOX )中找到的hal文件 ,请参阅项目文件夹的屏幕截图:

    我使用以下代码将Port_1_1函数注册到端口1中断:

    digio my_pin ={.port = 1,.pin =1 };
    int x1 = halDigio2IntConnect(my_pin,Port_1_1);
    halDigio2IntEnable(my_pin);
    halDigio2IntSetEdge(my_pin,HAL_DIGIO_INT_Rising _EDGE); 

     现在,该项目已成功生成,但不会像在原始POST中那样在hal_digio2.obj中为中断向量生成异常。 我将MCU置于低功耗模式3并启用全局中断。 现在我的按钮中断工作,唤醒CPU并成功返回(我通过闪烁的LED来验证它)。

    但是Sigfox调制不起作用。 当我写信给他们时,Sigfox建议他们的库在CC1120中使用中断和SPI进行调制,因此在sigfox调制期间不应该发生中断,并且  应该在任何中断之前调用SIGFOX_API_CLOSE ()。 所以,我现在不是在调用  SIGFOX_API_OPEN (),直到我从按钮中断返回到main函数,然后调用  SIGFOX_API_OPEN ()并发送消息,然后使用  SIGFOX_API_CLOSE (SIFOX_API_CLOSE)将其关闭。 代码编译,我可以调试并遍读所有步骤,库函数不返回任何错误,但仍然不发送任何消息(如果我使用相同的函数而不启用任何中断并使用按钮轮询示例,则会发送消息)。 它看起来像我添加到项目中的haltigio2.c,它与不可见的TI Sigfox库中的某些代码冲突。

    总之,我只想使用此项目附带的TI Sigfox库,它具有低功耗模式和中断,而我从第一篇文章开始就无法做到这一点 (提供的原始项目在AT命令模式和按钮轮询模式下工作。 但是,当您在按钮中启用中断时,它在bspkey.c中包括“io_pin_int.h” ,但该文件不包括在项目中。 这就是我开始寻找替代解决方案的原因)。  我搜索了所有论坛,但找不到其他任何内容。 您是否可以提供一些建议和/或指导?

    提前感谢

    Ozan

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

    在调用SIGFOX_API_OPEN之前,您是否考虑过禁用引脚中断并将中断引脚恢复到其初始配置? 我将尝试让TIDA-SIGFOX-CC1120-CC1190-BP设计1190设计工程师了解他们的想法和意见。

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

    感谢您的回复。
    是,在1.1 调用SIGFOX_API_OPEN ()并保持启用状态之前,使用2.1 P1IE和P2IE寄存器尝试禁用两个引脚上的中断。 并清除了IFG寄存器中的标记。 没有什么区别。

    我还尝试在端口中断之前使用sigfox open,而没有进入低功耗模式。 因为我在中看不到时钟配置设置
    SIGFOX_APP_MCU_SPI_CLOCK_INIT(),认为低功耗模式会影响时钟。 但它仍然不起作用。 我认为手动将hal_digio2.c添加到项目中可能是个问题。

    我将等待您的进一步回复。 似乎许多Sigfox问题都发布到了低于1GHz的论坛上,如果需要,我也可以在那里发布问题。

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

    您可以尝试低于1 GHz的论坛,我对BoosterPack和软件资源的了解有限,我没有任何进一步的建议。

    此致,
    Ryan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢Ryan的帮助
    我会这样做。

    Ozan