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.

[参考译文] TM4C129DNCPDT:TI RTOS

Guru**** 2530350 points
Other Parts Discussed in Thread: TM4C129DNCPDT

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1221316/tm4c129dncpdt-ti-rtos

器件型号:TM4C129DNCPDT
Thread: SYSBIOS 中讨论的其他器件

您好、专家!

我们向 CX 寻求有关 TI-RTOS 的帮助:

我们将 完成调试过程。 我收到 GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_3、1<<3);指令提供运行时故障。

使用的器件: TM4C129DNCPDT

以获得您的指导。 谢谢你。

此致、
阿奇·A·阿奇

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

    您好!

     原因是 PortN 不是首先启用。 如果外设未启用并且您尝试访问外设寄存器、则会生成总线错误。 在调用  GPIOPinWrite 之前、 应首先启用外设、如下所示。  

    //
    //启用 GPIO 端口 N.
    //
    SysCtlPeripheralEnable (SYSCTL_Periph_GPION);

    //
    //检查外设访问是否已启用。
    //
    while (!SysCtlPeripheralReady (SYSCTL_Periph_GPION)

    }

    //
    //启用 GPIO 管脚3。 将方向设置为输出、和
    //启用 GPIO 引脚以实现数字功能。
    //
    GPIOPinTypeGPIOOutput (GPIO_PORTN_BASE、GPIO_PIN_3);

    //将端口 N 引脚3设置为高电平。

    GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_3、GPIO_PIN_3);

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

    您好 Charles、

    感谢您的及时响应。

    我们 已经完成了初始化。

    SysCtlPeripheralEnable (SYSCTL_Periph_GPION);
    while (!SysCtlPeripheralReady (SYSCTL_Periph_GPION)


    }
    GPIOPinTypeGPIOOutput (GPIO_PORTN_BASE、
    GPIO_PIN_5|GPIO_PIN_4|GPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1|GPIO_PIN_0);

    很抱歉、但仍然遇到同样的问题。

    此致、
    阿奇·A·阿奇

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

    您好!

     我只需修改 Tiva 的常用 TI-RTOS gpiointerrupt 示例。 我添加了以红色突出显示的行。 我没有看到任何总线故障。 为什么不先尝试? 也许也会显示您的代码。  

    /*
    *=========== gpiointerrupt.c=========
    */

    /* XDCtools 头文件*/
    #include
    #include

    /* BIOS 头文件*/
    #include
    #include

    /* TI-RTOS 头文件*/
    #include

    /*示例/板头文件*/
    #include "board.h"

    //---------------
    // TivaWare 头文件
    //---------------
    #include
    #include

    #include "inc/hw_types.h"
    #include "inc/hw_memmap.h"
    #include "driverlib/sysctl.h"
    #include "driverlib/gpio.h"

    /* GUI Composer 要读取的变量*/
    int count = 0;

    /*
    *=========== gpioButtonFxn0 =========
    * Board_BUTTON0上 GPIO 中断的回调函数。
    */
    void gpioButtonFxn0 (unsigned int index)

    /*清除 GPIO 中断并切换 LED */
    GPIO_toggle (Board_LED0);

    如果(count++==100){
    计数= 0;
    }
    }

    /*
    *=========== gpioButtonFxn1 =========
    * Board_Button1上的 GPIO 中断的回调函数。
    *这可能不适用于所有板。
    */
    void gpioButtonFxn1 (unsigned int index)

    /*清除 GPIO 中断并切换 LED */
    GPIO_toggle (Board_LED1);

    如果(count++==100){
    计数= 0;
    }
    }

    /*
    *=========== 主线=========
    */
    int main (空)

    /*调用板初始化函数*/
    Board_initGeneral();
    Board_initGPIO();
    Board_initUART ();

    /*打开用户 LED */
    GPIO_WRITE (Board_LED0、BOARD_LED_ON);

    SysCtlPeripheralEnable (SYSCTL_Periph_GPION);
    while (!SysCtlPeripheralReady (SYSCTL_Periph_GPION)

    }
    GPIOPinTypeGPIOOutput (GPIO_PORTN_BASE、
    GPIO_PIN_5|GPIO_PIN_4|GPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1|GPIO_PIN_0);
    GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_5|GPIO_PIN_4|GPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1|GPIO_PIN_0、
    GPIO_PIN_5|GPIO_PIN_4|GPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1|GPIO_PIN_0);


    System_printf ("已设置启动 GPIO 中断示例\n 系统提供程序"
    "至 SysMin。 Halt the target to view any SysMin contents in "(停止目标以查看中的任何 SysMin 内容)
    " ROV.\n");
    /* SysMin 仅在您调用 flush 或 exit 时打印到控制台*/
    system_flush();

    /*安装按钮回调*/
    GPIO_setCallback (Board_BUTTON0、gpioButtonFxn0);

    /*启用中断*/
    GPIO_enableInt (Board_BUTTON0);

    /*
    *如果您的设备有多个输入引脚,就会中断
    *将在 Board_Button1上启用。
    */
    如果(Board_BUTTON0!= Board_Button1){
    /*安装按钮回调*/
    GPIO_setCallback (Board_Button1、gpioButtonFxn1);
    GPIO_enableInt (Board_Button1);
    }

    /*启动 BIOS */
    BIOS_start();

    返回(0);
    }

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

    谢谢、Charles。

    我们 观察到、如果 GPIOWrite 指令恰好在初始化后、则没有问题。 但在实际情况下是不可能的。

    // 没问题
    SysCtlPeripheralEnable (SYSCTL_Periph_GPION);
    while (!SysCtlPeripheralReady (SYSCTL_Periph_GPION)

    }
    GPIOPinTypeGPIOOutput (GPIO_PORTN_BASE、
    GPIO_PIN_5|GPIO_PIN_4|GPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1|GPIO_PIN_0);
    GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_5|GPIO_PIN_4|GPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1|GPIO_PIN_0、
    GPIO_PIN_5|GPIO_PIN_4|GPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1|GPIO_PIN_0);

    //******* 很有问题

    SysCtlPeripheralEnable (SYSCTL_Periph_GPION);
    while (!SysCtlPeripheralReady (SYSCTL_Periph_GPION)

    }
    GPIOPinTypeGPIOOutput (GPIO_PORTN_BASE、
    GPIO_PIN_5|GPIO_PIN_4|GPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1|GPIO_PIN_0);
    //一些其他指令,然后是 GPIO 写入指令

    GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_5|GPIO_PIN_4|GPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1|GPIO_PIN_0、
    GPIO_PIN_5|GPIO_PIN_4|GPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1|GPIO_PIN_0);

    此致、
    阿奇·A·阿奇

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

    您好!

     那么、在您的代码中哪个位置发生了故障呢? 是在 GPIOPinWrite 上、还是在 GPIO 写入之前的一些其他指令内部。 还有哪些其他说明? 您可以单步执行吗?