首页->【玩CortexM0】

12 0

实验九 多路中断脉冲输入实验

如题,要用到GPIO中断,需要打开InteruptIn.h文挡查看。实例中可以看到与前个实验一样的需要定义1个对象类,编1个中断函数,而后写函数绑定这两者即可。

首先在对象类定义区定义中断对象,因为是输入,因此定义的是GPIO口号,为了一致,直接用口号来定义,先定义1个——P0_28:

InterruptIn plusIn28(P0_28);

P0_28为中断输入口,对象名为plusIn28。为了计数中断口的数值[这是很有用的],定义一个16位的变量pj28,加在变量定义区的16位变量行中:

int16_t pj28;

在main主函数之前,写中断函数:

void PlusIn28(void){wait(0.001f);if(P0_28) pj28++;}

前边的wait(0.001f)数值要小于输入的数值,本例打算用P0_27的100Hz信号输入,意即中断产生后延时0.001秒P0_28还是高,pj28增加1。

在main的循环语句前增加:

plusIn28.rise(&PlusIn28);//rise表示上升沿触发中断

上升沿触发中断,执行中断函数PlusIn28()。

为了显示结果,在dispBase中增加:

c2l(4,0,48);c2l(4,1,42);c2l(4,2,18);c2l(4,3,24);//PJ28

在dispMes中增加:

c2l(4,5,(pj28/100)%10+16);c2l(4,6,(pj28/10)%10+16);c2l(4,7,(pj28)%10+16);

显然ps28的数值超过3位就显示后3位了,可以增加的。

这也是中断执行的,主程序中没有语句。将P0_27与P0_28短路,下载运行结果见图91。

在工程中,利用IO口产生中断用途广泛,因此我们再在挨着P0_28的IO口P0_8,P0_9依葫芦画瓢再定义两个中断口,其命名方法和编写函数同P0_28,而上升沿或下降沿则自己定义,增加的显示函数也自己增加,如果有问题再来网上讨论。最后的3路中断输入检测脉冲的结果见照片92。

作者于2017-01-02 21:49:39修改!
楼主可见