本实现通过按键触发外部中断EXTI,单片机检测到中断来点亮LED。开发板Cypress Psoc 4100 plus 系列MCU型号:CY8C4147AZI-S475;
1.新建一个工程
参考之前的例程;
2.添加组件
双击IDE右边TopDesign.cysch在左侧的Cypress Component中添加原理图组件;本实验中添加了两个IO,一个配置成输出,驱动LED灯;一个配置成输入,用于EXTI外部中断检测;
3.将添加的组件绑定到芯片引脚
点击IDE右侧xxxx.cydwr,根据实际的硬件电路,在右侧选择需要绑定的引脚;本实验中需要绑定IO口一个作为输出,控制LED,一个作为输入用于KEY检测;
4.Build工程生成代码 并实现
extern volatile uint8_t exit_flag;
int main(void)
{
//static uint8_t led_toggle=0;
CyGlobalIntEnable; /* Enable global interrupts. */
/* Place your initialization/startup code here (e.g. MyInst_Start()) */
Exit_isr_1_Start();
for(;;)
{
/* Place your application code here. */
{
LED_Pin_Write(exit_flag);
}
}
}
中断处理函数1
CY_ISR(Exit_isr_1_Interrupt)
{
#ifdef Exit_isr_1_INTERRUPT_INTERRUPT_CALLBACK
Exit_isr_1_Interrupt_InterruptCallback();
#endif /* Exit_isr_1_INTERRUPT_INTERRUPT_CALLBACK */
/* Place your Interrupt code here. */
/* `#START Exit_isr_1_Interrupt` */
exit_flag^=1;
Exit_isr_1_ClearPending();
Exit_Pin_ClearInterrupt();
/* `#END` */
}
按键按下第一次LED灯点亮,按下第二次LED灯熄灭;
5.总结
由于开发板上的按键没有上拉,故此IO输入配置成上拉输入,下降沿触发中断;中断清除语句Exit_isr_1_ClearPending();与Exit_Pin_ClearInterrupt();不可缺少,缺少任何一句,功能都无法实现。有帖子说两者保留一句就可以,但实验结果并不行,原因未知;
中断中给标志位exit_flag做翻转,主函数中根据exit_flag的值来判断灯是否应该点亮;Exit_isr_1_ClearPending();与Exit_Pin_ClearInterrupt(); 为中断标志位清楚语句; ↩︎