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/MSP432P401R:在基于非 RTOS 的工程中从未调用中断服务例程(ISR)(在包含 TI-RTOS 之后)

Guru**** 2522770 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/622382/rtos-msp432p401r-interrupt-service-routine-isr-never-called-in-no-rtos-based-project-after-including-ti-rtos

器件型号:MSP432P401R

工具/软件:TI-RTOS

嗨、大家好

我遇到 MSP432 Launchpad 问题  

首先、  

我使用"Resource"视图中的 empty_MSP_EXP432P401R_nortos_ccs 项目创建(导入)。

然后、  

我开始制作应用类型的温度传感器。

过程很简单  

1)引导-> 2) ADC 数据(温度)-> 3)记录到 SD 卡-> 4)深度睡眠 或关闭模式-> 5)唤醒和重新前置  

即使我从非 RTOS 开始,我也需要 SD 卡功能(我意识到 fatfs 仅包括在 TI-RTOS 中)

我在项目中添加了 TI-RTOS 设置  

标头包括、依赖项包括.. BlahBlah

很长时间后、我确实运行了它。

到目前为止一切都还可以。

但是,问题是永远不会调用 Interrunpt 服务例程(ISR)。

当然、它可以省去 TI-RTOS 设置。

这是我添加的 TI-RTOS 设置

1) 1)项目设置

2)修改.cmd 文件(.intvecs &.resetVect)

3) 3)将中断关键字添加到 IRQ 功能(上图)

女警帮助我。

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

    您好!

      我认为、在这种情况下、只需将 fatfs (库或源代码)添加到您的项目中(没有 RTOS)就会更简单。 端口中断不起作用的主要原因 是 TI-RTOS 正在控制所有中断(HWI)。

    话虽如此、我可以为您  提供任何一种情况的帮助;使用或不使用 RTOS、但首先我需要了解哪种情况更适合您、在一天结束时、您比我更了解您的应用。

     此致、

       David

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

    您好!

    根据 您对此帖子的回复、 您选择了 TI-RTOS、因此 请执行以下操作:

    1.从 fatsDraw 示例(全新)开始。

    • 将项目导入 CCS 、并确保您可以对 sdcard 进行写入/读取

    2.使用 gpiointerrupt 示例作为参考,在 fatsDraw 项目中执行以下操作:

    • 在 fatsDraw .c 中添加以下代码(在 GPIO_init 之后的 mainThread 中)
    /*打开用户 LED */
    GPIO_WRITE (Board_GPIO_LED0、Board_GPIO_LED_ON);
    
    /*安装按钮回调*/
    GPIO_setCallback (Board_GPIO_BUTTON0、gpioButtonFxn0);
    
    /*启用中断*/
    GPIO_enableInt (Board_GPIO_BUTTON0); 

    • 此外、请确保添加此函数
    /*
    === gpioButtonFxn0 ===
    * Board_GPIO_BUTTON0上 GPIO 中断的回调函数。
    */
    void gpioButtonFxn0 (uint_least8_t index)
    {
    /*清除 GPIO 中断并切换 LED */
    GPIO_TOGGLE (Board_GPIO_LED0);
    } 
    • 注意:请记住、默认情况下、板级配置文件"MSP_EXP432P401R.c"会将 P1.1和 P1.4初始化为输入和外部中断(gpioPinConfigs)。 如果出于某种原因您希望使用其他 GPIO、则需要修改此表。
    • 构建您的项目、并确保每次按下 S1时 LED0都会切换

    如需更多信息、 请观看此 SimpleLink Academy 培训 -了解如何使用 TI 驱动程序并借助 SimpleLink SDK 设置 GPIO 中断

    现在唯一缺少的是启用深度睡眠模式、我将使用 电源睡眠 示例作为参考:

    • 请将此代码添加到 fatsDraw .c 中、我们将使用 S2来启用深度睡眠策略。
    GPIO_setCallback (Board_GPIO_Button1、gpioButtonFxn1);
    GPIO_enableInt (Board_GPIO_Button1); 
    • 此外、请确保 添加以下函数:
    void gpioButtonFxn1 (uint_least8_t x)
    {
    GPIO_clearInt (Board_GPIO_Button1);
    
    /*将所有 GPIO 置于最低功耗配置中。 这是通过 MSP432特定的 driverlib 访问来完成的*/
    MAP_GPIO_setOutputLowOnPin (GPIO_PORT_PA、PIN_ALL16);
    MAP_GPIO_setOutputLowOnPin (GPIO_PORT_PB、PIN_ALL16);
    MAP_GPIO_setOutputLowOnPin (GPIO_PORT_PC、PIN_ALL16);
    MAP_GPIO_setOutputLowOnPin (GPIO_PORT_PD、PIN_ALL16);
    MAP_GPIO_setOutputLowOnPin (GPIO_PORT_PE、PIN_ALL16);
    MAP_GPIO_setOutputLowOnPin (GPIO_PORT_PJ、PIN_ALL16);
    MAP_GPIO_setAsOutputPin (GPIO_PORT_PA、PIN_ALL16);
    MAP_GPIO_setAsOutputPin (GPIO_PORT_PB、PIN_ALL16);
    MAP_GPIO_setAsOutputPin (GPIO_PORT_PC、PIN_ALL16);
    MAP_GPIO_setAsOutputPin (GPIO_PORT_PD、PIN_ALL16);
    MAP_GPIO_setAsOutputPin (GPIO_PORT_PE、PIN_ALL16);
    MAP_GPIO_setAsOutputPin (GPIO_PORT_PJ、PIN_ALL16);
    
    
    /*关闭 PSS 高侧监控器以在深度睡眠后降低功耗*/
    MAP_PSS_disableHighSide();
    
    /*选择 PowerMSP432_depSlepPolicy 以启用转换
    *进入 PowerMSP432_DeepSlep_1 (LPM4)状态
    *
    power_setPolicy ((Power_PolicyFxn) PowerMSP432_deSlepPolicy);
    
    /*有关从低功耗模式唤醒的唤醒源、请参阅器件数据表
    * PowerMSP432_DeepSlep_1
    */
    } 
    •   按下 S2后、器件将进入 LPM4、您可以使用 S1将其唤醒并切换 LED0

    您可能还想了解另一个 SimpleLink Academy 培训-一个简单的恒温器示例、它介绍了使用 POSIX API 调用进行多线程处理 的方法、因为您可能希望向系统添加更多线程。

     希望这对您有所帮助。

       David