注册 登录
查看: 1013|回复: 11

port外部中断

[复制链接]
发表于 2014-9-19 13:12:57 | 显示全部楼层 |阅读模式
我要是想用PTA27和PTA26两个口分别做两个不同的外部触发,能做吗
我在库里面看到PTA只有一个中断号
这两个口触发了只能进一个中断吗?



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

本帖被以下淘专辑推荐:

回复

使用道具 举报

发表于 2014-9-19 14:35:11 | 显示全部楼层
mic 发表于 2014-9-19 14:25
对的,用相同的中断号,假如我PTA27和PTA26触发之后要执行两套不同的响应,这该怎么,一个中断号只有一个 ...

这个我懂,比较简单

例程是这样的:
  1. /*!
  2. *  @brief      PORTD端口中断服务函数
  3. *  @since      v5.0
  4. */
  5. void PORTD_IRQHandler(void)
  6. {

  7. #if 0       // 条件编译,两种方法可供选择

  8.     uint8  n = 0;    //引脚号
  9.     n = 7;
  10.     if(PORTD_ISFR & (1 << n))           //PTD7 触发中断
  11.     {
  12.         PORTD_ISFR  = (1 << n);        //写1清中断标志位

  13.         /*  以下为用户任务  */

  14.         key_handler();

  15.         /*  以上为用户任务  */
  16.     }
  17. #else
  18.     PORT_FUNC(D,7,key_handler);
  19. #endif
  20. }



#if 0 和 #else 是条件编译。

这里#if 0 ,因为是0,即条件不成立,所以下面这段代码是注释了的:
  1.     uint8  n = 0;    //引脚号
  2.     n = 7;
  3.     if(PORTD_ISFR & (1 << n))           //PTD7 触发中断
  4.     {
  5.         PORTD_ISFR  = (1 << n);        //写1清中断标志位

  6.         /*  以下为用户任务  */

  7.         key_handler();

  8.         /*  以上为用户任务  */
  9.     }


换句话说,真正的代码是:


  1. void PORTD_IRQHandler(void)
  2. {
  3.     PORT_FUNC(D,7,key_handler);
  4. }


PORT_FUNC是山外哥提供好的宏函数,我们只需要指定是 哪个端口,例如上面D表示PORTD,7就是PTD7,key_handler 是PTD7触发中断后所进行的函数。

如果你有多个端口,同样是PORTD的,那可以这样子:

  1. void PORTD_IRQHandler(void)
  2. {
  3.     PORT_FUNC(D,7,key_handler);
  4.     PORT_FUNC(D,8,my_handler);      //PTD8 中断后会执行my_handler
  5. }
回复 支持 3 反对 0

使用道具 举报

 楼主| 发表于 2014-9-19 13:27:04 | 显示全部楼层
外部中断到底要怎么配置呢?
回复 支持 反对

使用道具 举报

发表于 2014-9-19 14:22:41 | 显示全部楼层
PTA27和PTA26,两者共用相同的中断号,就是PORTA_IRQn
回复 支持 反对

使用道具 举报

发表于 2014-9-19 14:23:09 | 显示全部楼层
你可以参考 第二章 PORT_KEY 例程啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-19 14:25:08 | 显示全部楼层
汤静云 发表于 2014-9-19 14:22
PTA27和PTA26,两者共用相同的中断号,就是PORTA_IRQn

对的,用相同的中断号,假如我PTA27和PTA26触发之后要执行两套不同的响应,这该怎么,一个中断号只有一个中断服务函数啊
回复 支持 反对

使用道具 举报

发表于 2014-9-19 14:26:19 | 显示全部楼层
mic 发表于 2014-9-19 14:25
对的,用相同的中断号,假如我PTA27和PTA26触发之后要执行两套不同的响应,这该怎么,一个中断号只有一个 ...

一个中断服务函数里,可以通过寄存器来判断是哪个IO进入中断的。

你可以看看例程的中断函数有 n = xxx 这样的说明
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-19 14:33:46 | 显示全部楼层
汤静云 发表于 2014-9-19 14:26
一个中断服务函数里,可以通过寄存器来判断是哪个IO进入中断的。

你可以看看例程的中断函数有 n = xxx ...




判断isfr寄存器的值进不同的服务函数,,,原来这样

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
来自安卓客户端来自安卓客户端
回复 支持 反对

使用道具 举报

发表于 2014-9-19 14:36:29 | 显示全部楼层
东明 发表于 2014-9-19 14:35
这个我懂,比较简单

例程是这样的:

正解,够详细
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-19 14:40:16 | 显示全部楼层
东明 发表于 2014-9-19 14:35
这个我懂,比较简单

例程是这样的:

赞一个!谢谢了
来自安卓客户端来自安卓客户端
回复 支持 反对

使用道具 举报

发表于 2015-11-20 19:05:19 | 显示全部楼层
顶一下
回复 支持 反对

使用道具 举报

发表于 2016-3-21 11:54:34 | 显示全部楼层
学习
回复 支持 反对

使用道具 举报

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

本版积分规则

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