📄 externalinterrupt.c
字号:
#include "config.h"
extern OS_EVENT *eintMbox;
/***
EXTINT
0 1 2 3 4---7
EINT0 EINT1 EINT2 EINT3 保留
EINT0: 电平激活方式下如果管脚的EINT0功能被选用且管脚处于有效状态时该位置位;
边沿激活方式下如果管脚的EINT0功能被选用且管脚上出现所选极性该位置位;
该位通过写入1清除但电平激活方式下管脚处于有效状态的情况除外;
***/
/***
EXTWAKE
0 1 2 3
EXTWAKE0 EXTWAKE1 EXTWAKE2 EXTWAKE3
EXTWAKE0 该位为1时使能EINT0将处理器从掉电模式唤醒;
EXTWAKE寄存器中的使能位允许外部中断将处理器从掉电模式唤醒
相关的EINTn功能必须映射到管脚才能实现掉电唤醒
但中断并不必要为了实现唤醒操作而在向量中断控制器中被使能
这样做的好处是允许外部中断输入将处理器从掉电模式唤醒
但不产生中断只是简单地恢复操作或者在掉电模式下使能中断而不会将处理器唤醒
这样当应用中并不需要唤醒特性时也不必关闭中断
***/
/***
EXTMODE
0 1 2 3
EXTMODE0 EXTMODE1 EXTMODE2 EXTMODE3
EXTMODE0 该位为0时EINT0使用电平激活;该位为1时EINT0使用边沿激活
寄存器中的位用来选择每个EINT脚是电平或边沿激活
只有选择用作EINT功能并已通过VICIntEnable使能
管脚才能产生外外部中断功能的中断
当然如果管脚选择用作其它功能则产生其它功能的中断
注当某个中断在VICIntEnable中被禁能时软件应该只改变EXTMODE寄存器中相应位的值
重新使能前软件向EXTINT写入1来清除EXTINT位EXTINT位可通过改变激活方式来置位
***/
/***
EXTPOLAR
0 1 2 3
EXTPOLAR0 EXTPOLAR1 EXTPOLAR2 EXTPOLAR3
EXTPOALR0 该位为0时EINT0低电平或下降沿有效由EXTMODE0决定
该位为1时EINT0高电平或上升沿有效由EXTMODE0决定
***/
/******/
/***引入外部变量,在外部中断服务程序之中发送给ADC采集任务
指明采集通道,
以后扩展的时候还要传递其他的信息,可是是一个结构体指针***/
extern OS_EVENT *adcMbox;
void initExternalInterrupt(EXTERNALINTERRUPTCONFIG config)
{
EXTMODE=config.mode;
EXTPOLAR=config.polar;
EXTWAKE=config.wakeup;
EXTINT=0X02;/***清除外部中断标志***/
}
/***外部中断服务例程***/
void ExternalINT1_Exception(void)
{
INT32U msg;/***测试的时候直接将msg=1,采集一ADC的信息***/
OS_ENTER_CRITICAL();
msg=1;
EXTINT=0X02; /***清除中断标志***/
VICVectAddr=0;
OS_EXIT_CRITICAL();
IO0CLR=1<<BEEPCON;/***蜂鸣器响,表明进入外部中断***/
hc595SendData(0xcc);
OSMboxPost(adcMbox,(void*)msg);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -