智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 12087|回复: 4
打印 上一主题 下一主题

中断函数的编写

[复制链接]

1

主题

5

帖子

0

精华

高级会员

Rank: 4

积分
518
威望
278
贡献
156
兑换币
166
注册时间
2014-11-27
在线时间
42 小时
毕业学校
天大
跳转到指定楼层
1#
发表于 2014-11-27 00:56:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想表达的是:小灯本来在亮,按下按键之后小灯熄灭(此处进一个中断,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即可)
回复

使用道具 举报

162

主题

2048

帖子

5

精华

超级版主

岳麓山没有车神

Rank: 10Rank: 10Rank: 10

积分
14920

论坛元老奖章优秀会员奖章活跃会员奖章论坛骨干奖章在线王奖章优秀版主奖章资源大师奖章

QQ
威望
6285
贡献
5963
兑换币
2581
注册时间
2013-11-14
在线时间
1336 小时
2#
发表于 2014-11-27 01:08:29 | 只看该作者
void(*KEY_INIT)(PORTx portx, u8 n, exti_cfg cfg);
KEY_INIT = exti_init;
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

高级会员

Rank: 4

积分
518
威望
278
贡献
156
兑换币
166
注册时间
2014-11-27
在线时间
42 小时
毕业学校
天大
3#
 楼主| 发表于 2014-11-27 11:11:28 | 只看该作者
Quixote 发表于 2014-11-27 01:08
void(*KEY_INIT)(PORTx portx, u8 n, exti_cfg cfg);
KEY_INIT = exti_init;

亲你的意思是原样照抄在KEY_INIT()的函数体里,然后去KEY.H里宏定义KEY_INIT指针么?
1.但是函数名跟指针名可以重么?
2.exti_init是函数名也不是地址怎么可以指过去呢?
回复 支持 反对

使用道具 举报

162

主题

2048

帖子

5

精华

超级版主

岳麓山没有车神

Rank: 10Rank: 10Rank: 10

积分
14920

论坛元老奖章优秀会员奖章活跃会员奖章论坛骨干奖章在线王奖章优秀版主奖章资源大师奖章

QQ
威望
6285
贡献
5963
兑换币
2581
注册时间
2013-11-14
在线时间
1336 小时
4#
发表于 2014-11-27 20:17:02 | 只看该作者
megamind75 发表于 2014-11-27 11:11
亲你的意思是原样照抄在KEY_INIT()的函数体里,然后去KEY.H里宏定义KEY_INIT指针么?
1.但是函数名跟指针 ...

你定义KEY.H干啥用?
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

高级会员

Rank: 4

积分
518
威望
278
贡献
156
兑换币
166
注册时间
2014-11-27
在线时间
42 小时
毕业学校
天大
5#
 楼主| 发表于 2014-12-4 22:19:46 | 只看该作者
不好意思,一周前处于炒鸡新手水平什么都不懂就来问了,现在问题已经解决了,还是谢谢你的热心帮助!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-25 16:14 , Processed in 0.092649 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表