在线时间795 小时
UID3067179
注册时间2014-10-23
NXP金币1047
TA的每日心情 | 开心 2024-4-10 10:22 |
---|
签到天数: 1317 天 [LV.10]以坛为家III
版主
- 积分
- 7570
- 最后登录
- 2024-4-10
|
这节学习下LPC55S16芯片的外部中断,使用板子上面的开关做测试。
一、硬件电路
板子上开关使用到单片机引脚PIO0_15, PIO0_16, PIO0_17。
二、程序部分
INT0 -- 上升沿中断
INT1 -- 下降沿中断
INT2 -- 下降沿中断
2.1、pint.c
- <font size="3">#include "fsl_pint.h"
- #include "fsl_inputmux.h"
- #include "fsl_debug_console.h"
- /*******************************************************************************
- * Definitions
- ******************************************************************************/
- #define KEY0_PIN_INT0_SRC kINPUTMUX_GpioPort0Pin15ToPintsel
- #define KEY1_PIN_INT1_SRC kINPUTMUX_GpioPort0Pin16ToPintsel
- #define KEY2_PIN_INT2_SRC kINPUTMUX_GpioPort0Pin17ToPintsel
- //#define KEY0_PINT_PIN_INT0_SRC kINPUTMUX_GpioPort0Pin15ToPintSecsel
- void pint_intr_callback(pint_pin_int_t pintr, uint32_t pmatch_status)
- {
- if(pintr==kPINT_PinInt0)
- {
- PRINTF("\r\nPINT Pin key0 Interrupt %d event detected.", pintr);
- }
- if(pintr==kPINT_PinInt1)
- {
- PRINTF("\r\nPINT Pin key1 Interrupt %d event detected.", pintr);
- }
- if(pintr==kPINT_PinInt2)
- {
- PRINTF("\r\nPINT Pin key2 Interrupt %d event detected.", pintr);
- }
- }
- void InitPint(void)
- {
- /* Connect trigger sources to PINT */
- INPUTMUX_Init(INPUTMUX);
- INPUTMUX_AttachSignal(INPUTMUX, kPINT_PinInt0, KEY0_PIN_INT0_SRC);
- INPUTMUX_AttachSignal(INPUTMUX, kPINT_PinInt1, KEY1_PIN_INT1_SRC);
- INPUTMUX_AttachSignal(INPUTMUX, kPINT_PinInt2, KEY2_PIN_INT2_SRC);
- //INPUTMUX_AttachSignal(INPUTMUX, kPINT_PinInt0, KEY0_PINT_PIN_INT0_SRC);
- /* Turnoff clock to inputmux to save power. Clock is only needed to make changes */
- INPUTMUX_Deinit(INPUTMUX);
- /* Initialize PINT */
- PINT_Init(PINT);
- //INT0
- /* Setup Pin Interrupt 0 for rising edge */
- PINT_PinInterruptConfig(PINT, kPINT_PinInt0, kPINT_PinIntEnableRiseEdge, pint_intr_callback);
- /* Enable callbacks for PINT0 by Index */
- PINT_EnableCallbackByIndex(PINT, kPINT_PinInt0);
- //INT1
- PINT_PinInterruptConfig(PINT, kPINT_PinInt1, kPINT_PinIntEnableFallEdge, pint_intr_callback);
- PINT_EnableCallbackByIndex(PINT, kPINT_PinInt1);
- //INT2
- PINT_PinInterruptConfig(PINT, kPINT_PinInt2, kPINT_PinIntEnableFallEdge, pint_intr_callback);
- PINT_EnableCallbackByIndex(PINT, kPINT_PinInt2);
- }</font>
复制代码
2.2、pint.h - <font size="3">#ifndef __PINT_H_
- #define __PINT_H_
- void InitPint(void);
- #endif</font>
复制代码
2.3、main.c
- <font size="3">//main
- int main(void)
- {
- uint8_t x=0;
- uint32_t port_state = 0;
- POWER_SetBodVbatLevel(kPOWER_BodVbatLevel1650mv, kPOWER_BodHystLevel50mv, false); /* set BOD VBAT level to 1.65V */
- BOARD_BootClockPLL150M();
-
- InitSystick();
- InitUart();
- InitKey();
- InitLed();
- InitLcd();
- InitSpi();
- Init_mcp2515();
- InitPint();
-
- LED0_OFF();
- LED1_ON();
-
- while (1)
- {
- LED0_TOG();
- LED1_TOG();
- SysTick_DelayTicks(100U);
- }
- }</font>
复制代码
三、执行结果
|
|