器件型号:MSP-EXP432P401R
我正在努力使中断在 MSP-EXP432P401R 开发板的端口2上工作。 我已断开连接到 LED 的跳线并连接到外部开关。 我可以看到、当使用具有内部上拉电阻的外部开关时、线路被拉至低电平。
我在端口1、3或5上没有中断问题(在类似的难题中、我看到端口4上的中断)。 我已经将代码定义为在引脚1.1、引脚2.0和引脚2.2上设置中断。 在调试中、我始终可以看到引脚1.1中断、但两个端口2引脚都没有。 我是否在某个位置缺少寄存器?
这是使用 MSP432 DriverLib - v3_10_00_09的代码。
#include "driverlib.h" /*包括 MSPWare 驱动程序库。 *
/********* /*
定义、枚举和类型定义 */
********* /*
以下常量指定外部高频 //
//*振荡器的时钟频率。 */
#define HFXTCLK_FREQUENCY 48000000
/*以下常量指定了有关 MCLK 的信息。 */
#define MCLK_SOURCE CS_HFXTCLK_SELECT
#define MCLK_DEVIDER 1
#define MCLK_FREQUENCY (HFXTCLK_FREQUENCY / MCLK_divider)
/*以下常量指定有关 HSMCLK 的信息。 */
#define HSMCLK_SOURCE CS_HFXTCLK_SELECT
#define HSMCLK_DEVIDER 2
#define HSMCLK_FREQUENCY (HFXTCLK_FREQUENCY / HSMCLK_divider)
/*以下常量指定有关 SMCLK 的信息。 注释 1
) SMCLK 只能由 HSMCLK 供源、2) MSPWare API */
//*要求您在配置 SMCLK 时指定 HSMCLK 的时钟源、*/
/*和3)分频器与 HSMCLK 的源相关。 另请注意、为了
支持2Mbps UART 波特率、*//* SMCLK 必须以24*/
/* MHz 或更快的频率运行。 */
#define SMCLK_SOURCE HSMCLK_SOURCE
#define SMCLK_DEVIDER 2
#define SMCLK_FREQUENCY (((HSMCLK_FREQUENCY * HSMCLK_divider)/SMCLK_divider)
/*以下宏用于连接宏值。 */
#define CONCAT_(A、B) A##B
#define CONCAT (A、B) CONCAT_(A、B)
/*以下常量定义了这个*/
/*模块使用的中断优先级。 请注意
、有8位用于设置优先级*//*级别、但 MSP432当前仅使用高3位 /*/* MCU
的更多
信息、请参阅《MSP432技术参考手册》和《*/* MSP432驱动程序库用户指南》。 */
#define priority_high (0)
#define Priority_normal (1 << 5)
/*以下函数配置系统时钟。 */
static void ConfigureClocks(void)
{/*
配置 HFXT 外部振荡器引脚。 //
GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_PJ、GPIO_PIN2 | GPIO_PIN3、GPIO_PRIMARY_MODULE_FUNCTION);
//设置 LFXTCLK 和 HFXTCLK 的外部时钟源频率。*//
////注意,我们尚未配置 LFXTCLK,因此我们在此将其设置为 FX0。 //
CS_setExternalClockSourceFrequency (0、48000000);
//在非旁路模式下启动 HFXT 而不超时。 在开始之前、我们
必须将 VCORE 更改为1以支持48MHz */
/*频率。 //
PCM_setCoreVoltageLevel (PCM_VCORE1);
FlashCtl_setWaitState (FLASH_BANK0、2);
FlashCtl_setWaitState (FLASH_BANK1、2);
CS_startHFXT (false);
/*初始化时钟源。 CS_initClockSignal
(CS_MCLK、MCLK_SOURCE、CONCAT (CS_Clock_divider、MCLK_divider);
CS_initClockSignal (CS_HSMCLK、HSMCLK_SOURCE、 CONCAT (CS_CLOCK 分频器_、HSMCLK_DEVIDER);
CS_initClockSignal (CS_SMCLK、SMCLK_SOURCE、CONCAT (CS_CLOCK 分频器_、SMCLK_DEVIDER));
}
void Port_Handler_Test_ISR (void)
{
UINT_fast16_t 中断;
中断= GPIO_getEnabledInterruptStatus (GPIO_PORT_P1);
IF (中断和 GPIO_PIN1)
{
GPIO_clearInterruptFlag (GPIO_PORT_P1、GPIO_PIN1);
}
中断= GPIO_getEnabledInterruptStatus (GPIO_PORT_P2);
IF (中断和 GPIO_PIN2)
{
GPIO_clearInterruptFlag (GPIO_PORT_P2、GPIO_PIN2);
}
IF (中断和 GPIO_PIN0)
{
GPIO_clearInterruptFlag (GPIO_PORT_P2、GPIO_PIN0);
}
}
int main (void)
{
/*保持看门狗计时器。 *
WDT_A_HOLDTimer();
/*禁用中断。 *
interrupt_disableMaster();
/*配置时钟。 *
ConfigureClocks();
GPIO_setAsInputPinWithPullUpResistor (GPIO_PORT_P1、GPIO_PIN1);
GPIO_setAsInputPinWithPullUpResistor (GPIO_PORT_P2、GPIO_PIN2);
GPIO_setAsInputPinWithPullUpResistor (GPIO_PORT_P2、GPIO_PIN0);
GPIO_interruptEdgeSelect (GPIO_PORT_P1、 GPIO_PIN1、 GPIO_HIGH_TO_LOW_TRANSITION);
GPIO_interruptEdgeSelect (GPIO_PORT_P2、 GPIO_PIN2、 GPIO_HIGH_TO_LOW_TRANSITION);
GPIO_interruptEdgeSelect (GPIO_PORT_P2、 GPIO_PIN0、 GPIO_HIGH_TO_LOW_TRANSITION);
Interrupt_setPriority (INT_Port1、0xC0);
INTERRUPT_setPriority (INT_PORT2、0xC0);
GPIO_registerInterrupt (GPIO_PORT_P1、Port_Handler_Test_ISR);
GPIO_registerInterrupt (GPIO_PORT_P2、Port_Handler_Test_ISR);
GPIO_enableInterrupt (GPIO_PORT_P1、 GPIO_PIN1);
GPIO_enableInterrupt (GPIO_PORT_P2、 GPIO_PIN2);
GPIO_enableInterrupt (GPIO_PORT_P2、 GPIO_PIN0);
GPIO_clearInterruptFlag (GPIO_PORT_P1、 GPIO_PIN1);
GPIO_clearInterruptFlag (GPIO_PORT_P2、 GPIO_PIN2);
GPIO_clearInterruptFlag (GPIO_PORT_P2、 GPIO_PIN0);
interrupt_enableMaster();
while (1);
}
我的 STARTUP_MSP432P4.s 文件指向 Port1和端口2 ISR 矢量的 Port_Handler_Test_ISR (尽管由于 GPIO_registerInterrupt 调用、我认为这不是必需的。 我觉得我必须缺少一些明显的东西。
提前感谢您的帮助