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/TM4C129ENCPDT:TM4C129中断按钮问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/591209/ccs-tm4c129encpdt-tm4c129-interruption-button-problem

器件型号:TM4C129ENCPDT

工具/软件:Code Composer Studio

我一直在使用此代码来检测按下 SW1 (PJ0)按钮的时刻、它运行良好。

#include 
#include 
include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "inc/hw_NVIC.h"
#include "driverlib/debug.h"
#include "driverlib/fpu.h"
#include "driverlib/gpio.h"
#include "driverlib_clockpine.h"#include "driverlib#driverlib#idt.idt.idt.idt.ide"#include
"driverlib"#include "driverlib_rom.idt.idr.idt.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr











if (intcase ==0)
{
TimerEnable (Timer1_base、timer_A);
intcase = 1;
}
其他
{
TimerDisable (Timer1_base、timer_A);
intcase = 0;
Val = 0;
}
GPIOIntClear (GPIO_PORTJ_BASE、GPIO_INT_PIN_0);
}

空 Timer1IntHandler (void)
{
ROM_TimerIntClear (Timer1_base、timer_TINA_TIMEOUT);
V++;
}

int main (void){
sysclock_T = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz | SYSCTL_OSC_main | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480)、120000000);

SysCtlPeripheralEnable (SYSCTL_Periph_GPIOJ);
SysCtlPeripheralEnable (SYSCTL_Periph_GPION);

SysCtlPeripheralEnable (SYSCTL_Periph_Timer1);
TimerConfigure (Timer1_base、timer_CFG_PERIODICRACRACASE);
TimerLoadSet (Timer1_base、timer_A、(sysclock_T/(1000000*2)));
IntEnable (INT_TIMER1A);
TimerIntEnable (Timer1_base、timer_TINA_TIMEOUT);


GPIOPinTypeGPIOOutput (GPIO_PORTN_BASE、GPIO_PIN_1);//led 初始化
GPIOPinTypeGPIOInput (GPIO_PORTJ_BASE、GPIO_PIN_0);//按钮初始化


GPIOIntTypeSet (GPIO_PORTJ_BASE、GPIO_PIN_0、GPIO_Bot_Edges);
GPIOIntRegister (GPIO_PORTJ_BASE、button_press);
GPIOIntEnable (GPIO_PORTJ_BASE、GPIO_INT_PIN_0);
GPIOPadConfigSet (GPIO_PORTJ_BASE、GPIO_PIN_0、GPIO_Strength _6mA、GPIO_PIN_TYPE_STD_WPU);


while (1)
{
}

} 

但我希望使输入引脚处于低电平(0)并检测何时使用 PD2上升沿、我的代码是:

#include 
#include 
include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "inc/hw_NVIC.h"
#include "driverlib/debug.h"
#include "driverlib/fpu.h"
#include "driverlib/gpio.h"
#include "driverlib_clockpine.h"#include "driverlib#driverlib#idt.idt.idt.idt.ide"#include
"driverlib"#include "driverlib_rom.idt.idr.idt.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr











if (intcase ==0)
{
TimerEnable (Timer1_base、timer_A);
intcase = 1;
}
其他
{
TimerDisable (Timer1_base、timer_A);
intcase = 0;
Val = 0;
}
GPIOIntClear (GPIO_PORTD_base、GPIO_INT_PIN_2);
}

空 Timer1IntHandler (void)
{
ROM_TimerIntClear (Timer1_base、timer_TINA_TIMEOUT); //清除计时器中断。
V++;
}

int main (void){
sysclock_T = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz | SYSCTL_OSC_main | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480)、120000000);

SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);
SysCtlPeripheralEnable (SYSCTL_Periph_GPION);//led 时钟 GPIO 初始化

SysCtlPeripheralEnable (SYSCTL_Periph_Timer1);
TimerConfigure (Timer1_base、timer_CFG_PERIODICRACRACASE);
TimerLoadSet (Timer1_base、timer_A、(sysclock_T/(1000000*2)));
IntEnable (INT_TIMER1A);
TimerIntEnable (Timer1_base、timer_TINA_TIMEOUT);


GPIOPinTypeGPIOOutput (GPIO_PORTN_BASE、GPIO_PIN_1);//led 初始化
GPIOPinTypeGPIOInput (GPIO_PORTD_base、GPIO_PIN_2);//按钮初始化

//中断设置
GPIOIntTypeSet (GPIO_PORTD_base、GPIO_PIN_2、GPIO_RIST上升 沿);
GPIOIntRegister (GPIO_PORTD_base、button_press);
GPIOIntEnable (GPIO_PORTD_base、GPIO_INT_PIN_2);
GPIOPadConfigSet (GPIO_PORTD_base、GPIO_PIN_2、GPIO_FORMENT_2mA、GPIO_PIN_TYPE_STD_WPU);
GPIOPinWrite (GPIO_PORTD_BASE、GPIO_PIN_2、0x0);
IntMasterEnable();

while (1)
{
}

}

问题是、即使我使用"GPIOPinWrite (GPIO_PORTD_BASE、GPIO_PIN_2、0x0); "、如何使该输入以低电平开始????

谢谢

 

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

    您是否可以考虑使用一个"下拉"电阻器、而不是现在使用的"上拉"电阻器?   (这些电阻器位于 MCU 内部-可以通过软件选择)

    以下是您当前的代码: (错误参数出现在突出显示部分)

    GPIOPadConfigSet (GPIO_PORTD_base、GPIO_PIN_2、GPIO_FORMENT_2mA、GPIO_PIN_TYPE_STD_WPU);

    当修改为"GPIO_PIN_TYPE_STD_WPD"时、该参数是否能够更好地满足您的要求?  

    您必须始终考虑-导致或可能导致-您当前的运行条件...   这个特定的修复很容易-并非所有都是...