打印
[牛人杂谈]

N76E003的管脚中断

[复制链接]
3871|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
       N76E003每个管脚都提供管脚输入中断功能,用于检测管脚电平状态,如按键或键盘是否按下。最多配置8个I/O管脚用于管脚中断。任何按键按下时通过边沿或电平触发产生一个管脚中断事件。管脚中断能使MCU从空闲模式或掉电模式唤醒。每个管脚的中断使能和正反向特性通过PIPEN寄存器、PINEN寄存器分别设置。通过PICON寄存器选择端口用于管脚中断,设置管脚中断的触发方式(电平或边沿检测)。每个中断通道都有自己的中断标志,总共8个中断标志,存放在寄存器 PIF 中,进入中断后判断该寄存器确定中断发生具体管脚。PIF寄存器中的所有标志位都是通过硬件置位,通过软件清0。

      管脚中断一般用于检测接口设备(键盘板或键盘)的边沿变化。在空闲状态,系统进入掉电模式下,降到最低功耗等待事件发生,管脚中断能将设备从掉电模式下唤醒。

沙发
xuanhuanzi|  楼主 | 2018-5-12 13:03 | 只看该作者
一般把这个图摸透,再看着寄存器表单对照一下,就很容易上手了。

使用特权

评论回复
板凳
xuanhuanzi|  楼主 | 2018-5-12 13:15 | 只看该作者
关于寄存处PICON

低两位是控制选择中断端口的
头文件中给出了操作宏
//   Enable INT port 0~3
//***************************************************************************/
//#define                 Enable_INT_Port0                                        PICON &= 0xFB;
//#define                Enable_INT_Port1                                        PICON |= 0x01;
//#define                Enable_INT_Port2                                        PICON |= 0x02;
//#define                Enable_INT_Port3                                        PICON |= 0x03;

很多人不理解怎么不同。
我们看第一个,采用了逻辑与运算,这样操作后,就是其他高位不变,让最低两位清零
而下面的操作是用了或运算,还是保证了高位不变,低两位,只赋后面的值。所以这个是没毛病的
再看后面三个的运算,先不看低两位,这个运算的结果就是高位保持不变,而低两位呢?低两位如果原来都是0那都好说,没毛病的
但是,如果地低两位中有为1的,那还是1,所以可能有问题,所以这个,要跟第一个连续使用才行。因此如果说不完美,那就是最后这三个有问题。

使用特权

评论回复
评论
deych 2018-8-24 09:50 回复TA
不要误导人,0xFB是多少知道吗?后四位是1011,怎么给低两位清零? 
地板
xuanhuanzi|  楼主 | 2018-5-12 13:16 | 只看该作者
大家说我说的对吗

使用特权

评论回复
5
zhuomuniao110| | 2018-5-12 22:21 | 只看该作者
这个中断的分配貌似跟其他家的单片机不同。

使用特权

评论回复
6
小明的同学| | 2018-5-13 18:01 | 只看该作者
说的那个问题是其实不是问题,用过其他ARM单片机的就懂,好多操作都是用过蒙版,然后消灭掉这些位置,然后单独写入。
/* Set P3 multi-function pins for UART0 RXD and TXD */
    SYS->P3_MFP &= ~(SYS_MFP_P30_Msk | SYS_MFP_P31_Msk);
    SYS->P3_MFP |= (SYS_MFP_P30_RXD0 | SYS_MFP_P31_TXD0);
比如这个,就是通过第一句,将对应的30,31清零。
第二句是将这两位置位。

使用特权

评论回复
7
Darren1992| | 2018-10-17 09:17 | 只看该作者
xuanhuanzi 发表于 2018-5-12 13:15
关于寄存处PICON

低两位是控制选择中断端口的

感觉有点误导人,就问怎么位操作?嫁入PICON后四位全为1,|或上0x02,0x01如何设置最低两位?

使用特权

评论回复
8
Darren1992| | 2018-10-17 10:21 | 只看该作者
Darren1992 发表于 2018-10-17 09:17
感觉有点误导人,就问怎么位操作?嫁入PICON后四位全为1,|或上0x02,0x01如何设置最低两位? ...

#define         Enable_INT_Port0                                        PICON &= 0xFC;//置位PIPS[1:0]后两位为00;选择端口0
#define                Enable_INT_Port1                                        PICON &= 0xFC;PICON |= 0x01;
#define                Enable_INT_Port2                                        PICON &= 0xFC;PICON |= 0x02;
#define                Enable_INT_Port3                                        PICON &= 0xFC;PICON |= 0x03;

不知以上这样修改是否可行?

使用特权

评论回复
9
xuanhuanzi|  楼主 | 2018-10-19 15:05 | 只看该作者
Darren1992 发表于 2018-10-17 10:21
#define         Enable_INT_Port0                                        PICON &= 0xFC;//置位PIPS[1:0]后两位为00;选择端口0
#define                Enable_I ...

肯定不行了,C代表1101,那就后两位不是00了。

使用特权

评论回复
10
Darren1992| | 2018-10-19 16:24 | 只看该作者
xuanhuanzi 发表于 2018-10-19 15:05
肯定不行了,C代表1101,那就后两位不是00了。

C不是1100吗?

使用特权

评论回复
11
xuanhuanzi|  楼主 | 2018-10-19 16:45 | 只看该作者

嗯,你的说的是的,C是1100.搞错了

使用特权

评论回复
12
zhuotuzi| | 2018-10-21 23:11 | 只看该作者
键盘用中断比用扫描好吗

使用特权

评论回复
13
呵呵呵囧行| | 2019-2-27 16:53 | 只看该作者
大哥 我有官方例程 但是搞不懂 自己改了后 直接乱中断  假设我要用P13中断 那我该怎么配置才对  他进的又是哪个中断  进去后我怎么判断管脚  以及清除中断标志位

下面是我改后的初始化代码
//P1.3脚输入模式
  P13_Input_Mode;
set_P1S_3;
//使能端口
Enable_INT_Port1;
//低电平触发 第七等级中断
        Enable_BIT7_LowLevel_Trig;
//使能引脚中断
  set_EPI;                                               
set_EX0;
//全局中断标志位
    set_EA;               


我这么配置后程序就死了 啥都不干就给我死进        void EXT_INT0(void) interrupt 0

理论上会进这里面然后叫我判断  
void PinInterrupt_ISR (void) interrupt 7


                               

使用特权

评论回复
14
任博昊| | 2019-5-30 11:08 | 只看该作者
怎么配置是哪一个管脚中断,PIPS[1:0]的配置有点看不懂

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

154

主题

2079

帖子

2

粉丝