高级会员
- 积分
- 518
- 威望
- 278
- 贡献
- 156
- 兑换币
- 166
- 注册时间
- 2014-11-27
- 在线时间
- 42 小时
- 毕业学校
- 天大
|
我想表达的是:小灯本来在亮,按下按键之后小灯熄灭(此处进一个中断,delay一些秒之后跳回main,main里执行LED_ON死循环)
希望写一个中断程序使其能实现main接收外部KEY输入电位进入中断服务函数,执行LED_OFF。
照教程的要求,程序应这样写:
1.在vector.h中找到对应的key输入PTA端口进行重映射,并写入isr.h中
并extern void +中断服务函数名称(这里头也有学问:好像都是用的EXTI_IsrHandler();)
2.在isr.c中编写中断服务函数,照葫芦画瓢
3.到此,野火没有了下一步。事实上我在看完exti外部中断例程之后看到:
在main函数中,调用初始化PTA端口函数的函数体exti_init();里,存在配置
触发中断模式的一系列语句:
I.main():
exti_init(PORTA, 17, rising_down); //PORTA17 端口外部中断初始化 ,上升沿触发中断,内部下拉
II.exti.c:
void exti_init(PORTx portx, u8 n, exti_cfg cfg)
{
SIM_SCGC5 |= (SIM_SCGC5_PORTA_MASK << portx); //开启PORTx端口
PORT_PCR_REG(PORTX[portx], n) = PORT_PCR_MUX(1) | PORT_PCR_IRQC(cfg & 0x7f ) | PORT_PCR_PE_MASK | ((cfg & 0x80 ) >> 7); // 复用GPIO , 确定触发模式 ,开启上拉或下拉电阻
GPIO_PDDR_REG(GPIOx[portx]) &= ~(1 << n); //输入模式
enable_irq(portx + 87); //使能PORT中断,PORTA的ISR中断号为87
}
那么问题来了:如果我想对我的中断触发模式进行配置,应该如何书写我的KEY_INIT();(就是说在初始化函数内同时也配置好中断触发模式,
这样的话,只需要在main里调用key_init即可) |
|