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/TM4C129ENCPDT:在端口基址 D 上启用 GPIO

Guru**** 2482105 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/715325/rtos-tm4c129encpdt-enabling-gpio-on-port-base-d

器件型号:TM4C129ENCPDT

工具/软件:TI-RTOS

我尝试设置三个 GPIO 引脚。 根据 CCS8中包含的一些示例的结构、我能够使用 PA2和 PA3成功地获得两个输入。 我的第三个输入是从单独的端口基址 PD0运行的。  我已验证我正在使用的硬件开关是否正确发送到引脚 PD0。 我怀疑这个问题与端口 D 具有 ADC 有关、但我不确定。 我知道 PD[7]以及 PC[3:0]和 PE[7]已锁定、但我认为这不会影响我使用 PD0的能力。  

/*
================================================ GPIO ===========================================
将*/
/*置于子段中、以便 TI 链接器正确删除项目*/
#if defined (__TI_Compiler_version__)
#pragma DATA_SECTION (GPIOTIVA_config、".const:GPIOTiva_config")
#endif

#include 
#include 

/*
*引脚配置数组
*注意:引脚配置的顺序必须与
EK_TM4C129EXL.h 中*定义的顺序一致
*注意:不用于中断
的引脚应放置在*数组的末尾。 回调数组中可以省略回调条目
以*减少内存使用。
*/
GPIO_PinConfig gpioConfigs[]={
//*输入引脚*/
* EK_TM4C129EXL_USR_INP1 */
GPIOTVA_PA_2 | GPIO_CFG_IN_pu | GPIO_CFG_IN_INT_INT_RISING、
* EK_TM4C129EXL_USR_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_INTRIP_ING_ING_INT_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_ING_INT_ING_ING_ING_ING_ING_ING_ING_INTRIP_ING_ING_ING_IN








/* EK_TM4C129EXL_USR_D2 */
GPIOTIVA_PN_0 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_LOW
};

/*
回调函数指针数组
*注意:引脚配置的顺序必须与
*在 EK_TM4C129EXL.h 中定义的顺序一致
*注意: 不用于中断的引脚可从回调数组中省略、
以*减少存储器使用量(如果放置在 gpioPinConfigs 数组的末尾)。
*/
GPIO_CallbackFxn gpioCallbackFunctions[]={
NULL,/* EK_TM4C129EXL_USR_IMP1 */
NULL,/* EK_TM4C129EXL_USR_IMP2 */
NULL //端口 D0上的光测试 GPIO

};

/*特定于器件的 GPIO_CONFIG 结构*/
const GPIOTIVA_Config GPIOTIVA_CONFIG ={
.pinConfigs =(GPIO_PinConfig *) gpioPinConfigs、
.callback =(GPIO_CallbackFxn *) gpioCallbackFuncions、
.numberOfPinConfigs =(gpinsizeof)=

~
(gpinback=)/numerCallback=(gpinback=)= gpinvoltagioCallsizeds=(gpines=)/gpines=(gpinecn=)、gpinsize=)=(gpinback=)/n= gpinsizeof (gpinecn=)/n= gpinback= gpinsize=


EK_TM4C129EXL_initGPIO ===
/void
EK_TM4C129EXL_initGPIO (void)
{

GPIO_init();

} 

从板头文件中删除了位

typedef enum EK_TM4C129EXL_GPIOName{
EK_TM4C129EXL_USR_IMP1 = 0、
EK_TM4C129EXL_USR_IMP2、
EK_TM4C129EXL_GPIO_D0、
EK_TM4C129EXL_D1、EK_TM4C129EXL_D1、
EK_TM4C129EXL_REX2_EXD2、EK-EXL_EXL

EK_TM4C129EXL_GPIOCOUNT
}EK_TM4C129EXL_GPIOName;

最后是主函数中我处理创建中断并将其绑定到函数的部分

GPIO_setCallback (EK_TM4C129EXL_USR_IMP1、gpioButtonFxn0);
GPIO_enableInt (EK_TM4C129EXL_USR_IMP1);
GPIO_CallsetBack (EK_TM4C129EXL_USR_IMP2、gpioButtonFxn1);
GPIO_enableInt (EK_TM4C129EXL_USR_IMP2);
GPIO_setCallback (EK_TM4C129EXL_GPIO_D0、gpioButtonFxn2);
GPIO_enableInt (EK_TM4C129EXL_GPIO_D0); 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Nathan、
    我不会发现您的代码有任何问题。 您能做些实验吗? 首先用连接器上也提供的 PE0等其他设备替换 PD0? 在 PE0上生成中断是否有任何问题? PE0也与 ADC 复用。 接下来将 PD0替换为 PF1。 PF1在 LaunchPad 连接器上可用、不会与 ADC 进行多路复用。 然后在 PA3和 PD0之间交换顺序。 更改订单是否会使 PD0工作、PA3不工作? 通过上述三个测试、可以了解问题是否与与 ADC 的引脚多路复用有关。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1.更改为 PE0未解决问题
    2.改为 PF1有效
    3.更改订单对使 PD0正常工作没有影响
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Nathan、

     我无法重现您的问题。 低于我所做的。

     1.使用 CCS Resource Explorer 导入 TI-RTOS gpiointerrupt_EK_TM4C1294XL_TI 示例。

     2.在 EK_TM4C1294XL.c 文件中,我做了一行更改。 请参阅下面以红色突出显示的部分。

     以前:

    GPIO_PinConfig gpioPinConfigs[]={
    /*输入引脚*/
    /* EK_TM4C1294XL_USR_SW1 */
    GPIOTIVA_PJ_0 | GPIO_CFG_IN_pu | GPIO_CFG_IN_INT_RISING、
    /* EK_TM4C1294XL_USR_SW2 */
    GPIOTIVA_PJ_1 | GPIO_CFG_IN_pu | GPIO_CFG_IN_INT_RISING、

    /*输出引脚*/
    /* EK_TM4C1294XL_USR_D1 */
    GPIOTIVA_PN_1 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_LOW、
    /* EK_TM4C1294XL_USR_D2 */
    GPIOTIVA_PN_0 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_LOW、
    };

    之后:

    GPIO_PinConfig gpioPinConfigs[]={
    /*输入引脚*/
    /* EK_TM4C1294XL_USR_SW1 */
    GPIOTIVA_PJ_0 | GPIO_CFG_IN_pu | GPIO_CFG_IN_INT_RISING、
    /* EK_TM4C1294XL_USR_SW2 */
    GPIOTIVA_PD_0 | GPIO_CFG_IN_pu | GPIO_CFG_IN_INT_RISING、

    /*输出引脚*/
    /* EK_TM4C1294XL_USR_D1 */
    GPIOTIVA_PN_1 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_LOW、
    /* EK_TM4C1294XL_USR_D2 */
    GPIOTIVA_PN_0 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_LOW、
    };

     3.我在 gpioButtonFxn1中放置一个断点。  

     4.一旦我在 PD0上提供状态变化、我就会在断点中看到 CPU 暂停、这意味着 GPIO_PD0会生成中断。  

     请进行上述实验、查看您的是否成功使用 PD0、然后将示例代码与代码进行比较、以查看是否存在可能导致 PD0不工作的细微差异。  

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    查尔斯
    进行上述实验无法解决问题。 但是、我们今天又收到了另一批开发板。 我交换了电路板、一切都正常工作。 似乎在某种程度上、端口 D 和 E 基座的引脚在我们的第一块板上受到损坏。 我非常感谢您的帮助、并祝您一切顺利
    Nathan