我正在使用以下代码,主要的主题是在lpc 1837中生成一个引脚中断,我在获得中断时遇到了麻烦,有人给出了这个代码编译器出了什么问题的建议:
/* Configure pin as digital input using GPIO in pin multiplexing */
GPIO_SetDir(6,0,GPIO_DIR_INPUT);
GPIO_SetDir(6,2,GPIO_DIR_INPUT);
SCU_PinConfigure(0xC,1,( SCU_CFG_MODE_FUNC4 | SCU_SFS_EPUN | SCU_SFS_ZIF ));
SCU_PinConfigure(0xC,3,( SCU_CFG_MODE_FUNC4 | SCU_SFS_EPUN | SCU_SFS_ZIF ));
/* enable edge interrupt */
LPC_GPIO_PIN_INT->ISEL = 0x00UL;
/* enable rising edge interrupt */
LPC_GPIO_PIN_INT->IENR = (GPIO_PIN_INT_IENR_ENRL0_Msk |
GPIO_PIN_INT_IENR_ENRL1_Msk );
LPC_GPIO_PIN_INT->SIENR = (GPIO_PIN_INT_SIENR_SETENRL0_Msk |
GPIO_PIN_INT_SIENR_SETENRL1_Msk );
/* enable falling edge interrupt */
LPC_GPIO_PIN_INT->IENF = (GPIO_PIN_INT_IENF_ENAF0_Msk |
GPIO_PIN_INT_IENF_ENAF0_Msk);
LPC_GPIO_PIN_INT->SIENF = (GPIO_PIN_INT_SIENF_SETENAF0_Msk |
GPIO_PIN_INT_SIENF_SETENAF1_Msk );
/* Clear pending interrupt of pin interrupt 1*/
NVIC->ICPR[(((uint32_t)(int32_t)(0x21)) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)(0x21)) & 0x1FUL));
/* set priority for pin interrupt 1 */
NVIC_SetPriority(0x21, 1);
/* enable pin interrupt */
NVIC->ISER[(((uint32_t)(int32_t)(0x21)) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)(0x21)) & 0x1FUL));发布于 2016-09-26 14:55:08
在所有这些混乱之后,有一个输入缓冲区SCU_PinConfigure(0xC,1,( SCU_CFG_MODE_FUNC4、SCU_SFS_EPUN、SCU_SFS_ZIF、SCU_SFS_ZIF、SCU_SFS_EZI );
有一个位用于启用输入缓冲区。启用此位后,将启用输入读和中断。感谢您的回复,希望这个答案有助于解决Gpio输入读取和中断的问题。
发布于 2016-09-26 10:51:08
我想我几个月前也有同样的问题。我在输入中断模式下设置了GPIO,但是我无法设置ISR.我建议您通过以下步骤检查代码:
如果两个步骤都正确,则证明GPIO处于输入-中断模式.如果它拿不到ISR,就找出它的去向。硬件中断过程中必然会出现一些问题。该过程是用汇编语言编写的。
https://stackoverflow.com/questions/39694842
复制相似问题