完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
利用中断控制-按键-led亮灭
按照普中给的教程可以完成key1,key4,控制led1和led2的亮灭,即利用中断XINT1和XINT2。 依据上述程序想实现key7控制led3的亮灭实现不了。 百度许多资料,都没能解决。 现在有个疑惑就是,key1和key4输入位是gpio12和gpio13,能够配置外部中断INT1和XINT2。 key7是gpio14没有外部中断可用,而外部中断3——XINT3需要的GPIO是32-63. 这种情况怎么解决? 下面是程序 #include "exti.h" #include "leds.h" #include "key.h" // // void EXTI1_Init(void) { EALLOW; SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1; // GPIO input clock 使能IO口时钟,SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK=1 EDIS; EALLOW; //KEY端口配置 GpioCtrlRegs.GPAMUX1.bit.GPIO12=0; GpioCtrlRegs.GPADIR.bit.GPIO12=0; //配置IO口为输入 GpioCtrlRegs.GPAPUD.bit.GPIO12=0; GpioCtrlRegs.GPAQSEL1.bit.GPIO12 = 0; // 外部中断1(XINT1)与系统时钟SYSCLKOUT同步 GpioCtrlRegs.GPBMUX2.bit.GPIO48=0; GpioCtrlRegs.GPBDIR.bit.GPIO48=1; GpioCtrlRegs.GPBPUD.bit.GPIO48=0; GpioDataRegs.GPBCLEAR.bit.GPIO48=1; EDIS; EALLOW; GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 12; // XINT1是GPIO12,设置IO口与中断线映射关系 EDIS; EALLOW; // 修改被保护的寄存器,修改前应添加EALLOW语句 PieVectTable.XINT1 = &EXTI1_IRQn; //指定中断向量表中断服务函数地址 EDIS; // EDIS的意思是不允许修改被保护的寄存器 PieCtrlRegs.PIEIER1.bit.INTx4 = 1; // 使能PIE组1的INT4 XIntruptRegs.XINT1CR.bit.POLARITY = 0; // 下降沿触发中断 XIntruptRegs.XINT1CR.bit.ENABLE= 1; // 使能XINT1 IER |= M_INT1; // 使能CPU中断1(INT1) EINT; // 开全局中断 ERTM; } interrupt void EXTI1_IRQn(void) { Uint32 i; for(i=0;i<10000;i++); //键盘消抖动 while(!KEY_H1); LED1_TOGGLE; PieCtrlRegs.PIEACK.bit.ACK1=1; } // // void EXTI2_Init(void) { EALLOW; SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1; // GPIO input clock EDIS; EALLOW; //KEY端口配置 GpioCtrlRegs.GPAMUX1.bit.GPIO13=0; GpioCtrlRegs.GPADIR.bit.GPIO13=0; GpioCtrlRegs.GPAPUD.bit.GPIO13=0; GpioCtrlRegs.GPAQSEL1.bit.GPIO13 = 2; // 外部中断2(XINT2)输入限定6个采样窗口 GpioCtrlRegs.GPACTRL.bit.QUALPRD1 = 0xFF; // 每个采样窗口的周期为510*SYSCLKOUT GpioCtrlRegs.GPBMUX2.bit.GPIO48=0; GpioCtrlRegs.GPBDIR.bit.GPIO48=1; GpioCtrlRegs.GPBPUD.bit.GPIO48=0; GpioDataRegs.GPBCLEAR.bit.GPIO48=1; EDIS; EALLOW; GpioIntRegs.GPIOXINT2SEL.bit.GPIOSEL = 13; // XINT2是GPIO13 EDIS; EALLOW; // 修改被保护的寄存器,修改前应添加EALLOW语句 PieVectTable.XINT2 = &EXTI2_IRQn; EDIS; // EDIS的意思是不允许修改被保护的寄存器 PieCtrlRegs.PIEIER1.bit.INTx5 = 1; // 使能PIE组1的INT5 XIntruptRegs.XINT2CR.bit.POLARITY = 0; // 下降沿触发中断 XIntruptRegs.XINT2CR.bit.ENABLE = 1; // 使能XINT2 IER |= M_INT1; // 使能CPU中断1(INT1) EINT; // 开全局中断 ERTM; } interrupt void EXTI2_IRQn(void) { Uint32 i; for(i=0;i<10000;i++); //键盘消抖动 while(!KEY_H2); LED2_TOGGLE; PieCtrlRegs.PIEACK.bit.ACK1=1; } // //// //// void EXTI3_Init(void) { EALLOW; SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1; // GPIO input clock EDIS; EALLOW; //KEY端口配置 GpioCtrlRegs.GPAMUX1.bit.GPIO14=0; GpioCtrlRegs.GPADIR.bit.GPIO14=0; GpioCtrlRegs.GPAPUD.bit.GPIO14=0; GpioCtrlRegs.GPAQSEL1.bit.GPIO14 = 0; GpioCtrlRegs.GPBMUX2.bit.GPIO48=0; GpioCtrlRegs.GPBDIR.bit.GPIO48=1; GpioCtrlRegs.GPBPUD.bit.GPIO48=0; GpioDataRegs.GPBCLEAR.bit.GPIO48=1; EDIS; EALLOW; GpioIntRegs.GPIOXINT3SEL.bit.GPIOSEL =14; // XINT3是GPIO14 EDIS; EALLOW; // 修改被保护的寄存器,修改前应添加EALLOW语句 PieVectTable.XINT3= &EXTI3_IRQn; EDIS; // EDIS的意思是不允许修改被保护的寄存器 PieCtrlRegs.PIEIER12.bit.INTx1 = 1; // 使能PIE组12的INTx1 XIntruptRegs.XINT3CR.bit.POLARITY = 0; // 下降沿触发中断 XIntruptRegs.XINT3CR.bit.ENABLE = 1; // 使能XINT3 IER |= M_INT12; // 使能CPU中断12(INT12) EINT; // 开全局中断 ERTM; } interrupt void EXTI3_IRQn(void) { Uint32 i; for(i=0;i<10000;i++); //键盘消抖动 while(!KEY_H3); LED3_TOGGLE; PieCtrlRegs.PIEACK.bit.ACK1=1; }
|
|
相关推荐
1个回答
|
|
外部中断,没有void EXTI3_IRQn(void)写法,因为9~15共用一个中断函数
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
205 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1253 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
848 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
853 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
1073 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12013 浏览 31 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 06:23 , Processed in 0.508236 second(s), Total 74, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号