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.

[参考译文] MSPM0L1306:PA2上的数字输入在设置数字输出 PA20 (SWCLK)并禁用 SWD 后不工作。

Guru**** 2945590 points

Other Parts Discussed in Thread: MSPM0L1306, MSPM0L1105

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1324494/mspm0l1306-digital-input-on-pa2-not-working-after-set-digital-output-pa20-swclk-with-swd-disabled

器件型号:MSPM0L1306
主题中讨论的其他器件: MSPM0L1105

我的应用电路使用 MSPM0L1306上的所有引脚、包括 SWD 引脚。 为了将调试引脚用作 GPIO、 程序会在引导后延迟几秒钟、然后设置 SYSCTL 的 SWDCFG 寄存器中的 DISABLE 位以及 KEY 位。 (...遵循技术参考手册2.4.1.4节中的说明)。  

该调试引脚可正常用作 GPIO。 我能够将 PA19和 PA20切换为 数字输出。

PA2 还用作数字输入。  

问题是...  PA2在首次将 PA20设置为高电平后似乎停止工作。 只要 PA20在程序中没有被设定为高电平、PA2输入在整个程序中运行正常。 在 PA20首次设为高电平后、PA2的读数始终为1。 清除 PA20不会修复它。  

编辑:我在程序中每次切换 PA20后都尝试重新初始化 GPIO。 问题仍然存在。  

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

    Dean、您好!

    这很奇怪。  让我深入探究一下这个问题、我会让您知道我发现了什么。

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

     是否有人能够重现这一效应? 我已尝试用新芯片替换芯片、也尝试将其换用为 MSPM0L1105、 结果相同。  

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

    Dean、您好!

    我非常抱歉耽误你的时间。  我没有收到设计人员关于此事的反馈、因此我将立即停止并尝试复制。

    您是否可以随意共享您的代码、以防万一成功、我可以将它与您的代码进行比较、看看有什么不同。

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

    Dean、您好!

    您能否分享用于禁用 SWD 引脚以及如何将 PA2配置为输入的具体说明。  我似乎看到了同样的问题。  

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

    int main(void)
    {
        /* Power on GPIO, initialize pins as digital outputs */
        SYSCFG_DL_init();
        /* Configure PA1, PA19, PA20 after delay */
        delay_cycles(300000000);
        SYSCTL->SOCLOCK.SWDCFG = (SYSCTL_SWDCFG_KEY_VALUE | SYSCTL_SWDCFG_DISABLE_TRUE);
        SYSCTL->SOCLOCK.EXRSTPIN = (SYSCTL_EXRSTPIN_KEY_VALUE | SYSCTL_EXRSTPIN_DISABLE_TRUE);
        delay_cycles(100);
    
        //PA1-NRST GPIO
        DL_GPIO_initDigitalOutput(IOMUX_PINCM2);
        DL_GPIO_setPins(GPIOA, DL_GPIO_PIN_1);
        //DL_GPIO_enableOutput(GPIOA, DL_GPIO_PIN_1);
    
        //PA19-SWDIO GPIO
        DL_GPIO_initDigitalOutput(IOMUX_PINCM20);
        DL_GPIO_setPins(GPIOA, DL_GPIO_PIN_19);
        //DL_GPIO_enableOutput(GPIOA, DL_GPIO_PIN_19);
    
        //PA20-SWCLK GPIO
        DL_GPIO_initDigitalOutput(IOMUX_PINCM21);
        DL_GPIO_clearPins(GPIOA, DL_GPIO_PIN_20);
        //DL_GPIO_enableOutput(GPIOA, DL_GPIO_PIN_20);
    
        DL_GPIO_enableOutput(GPIO_PORT, DL_GPIO_PIN_1 |
                             DL_GPIO_PIN_19 |
                             DL_GPIO_PIN_20);
    
        delay_cycles(32000000);
    
        
        while (1) {
            
            
    //THIS WHILE LOOP WORKS UNTIL PA20 IS SET
            // WAIT FOR PA2 LOW
            while(DL_GPIO_readPins(GPIOA, DL_GPIO_PIN_2)){
                delay_cycles(100);
            };
    
    
    //THEN PA20 IS TOGGLED LIKE THIS
            DL_GPIO_setPins(GPIOA, DL_GPIO_PIN_20);
            delay_cycles(100);
            DL_GPIO_clearPins(GPIOA, DL_GPIO_PIN_20);
    
    
    //NOW PA2 ALWAYS READS 0, WHILE LOOP SHOOTS STRIGHT THROUGH, EVEN WHEN PA2 IS HIGH
            // WAIT FOR PA2 LOW
            while(DL_GPIO_readPins(GPIOA, DL_GPIO_PIN_2)){
                delay_cycles(100);
            };
            
            
        }     
        
    } 

    ...这是 PA2配置。