TA的每日心情 | 慵懒 2016-10-17 12:07 |
---|
签到天数: 306 天 连续签到: 1 天 [LV.8]以坛为家I
|
如上图所示,LinkIt ONE的 D1 和 D3 两个引脚具有外部中断功能。
中断,是指CPU在正常运行程序时,由于内部/外部事件或由程序预先安排的事件,引起CPU中断正在运行的程序,而转到为内部/外部事件或为预先安排的事件服务的程序中去,服务完毕,再返回去执行波暂时中断的程序 由于某个事件的发生,CPU暂停当前正在执行的程序,转而执行处理该事件的一个程序。该程序执行完成后,CPU接着执行被暂停的程序。这个过程称为中断。
根据中断源的位置,有两种类型的中断。有的中断源在CPU的内部,称为内部中断。
大多数的中断源在CPU的外部,称为外部中断。 根据中断引脚的不同,或者CPU响应中断的不同条件,也可以把中断划分为可屏蔽中断和不可屏蔽中断两种。
LinkIt ONE 关于中断函数有四个:
void attachInterrupt( uint32_t pin, callback_ptr callback, uint32_t mode );void detachInterrupt( uint32_t pin );void noInterrupts();void interrupts();
其中 ,void noInterrupts(); void interrupts(); 是用来开关中断的,让代码进入临界区域:
noInterrupts(); //临界区域 interrupts();void attachInterrupt( uint32_t pin, callback_ptr callback, uint32_t mode );uint32_t pin 只能为 0 和 1 , 对应 D2 和 D3 引脚。
callback_ptr callback 关连的是call back 函数
uint32_t mode 对应的中断触发类型
MODE LOW to trigger the interrupt whenever the pin is low, CHANGE to trigger the interrupt whenever the pin changes value RISING to trigger when the pin goes from low to high FALLING for when the pin goes from high to low例程如下:
const byte ledPin = 13;volatile byte state = LOW;void setup() { pinMode(ledPin, OUTPUT); pinMode(interruptPin, INPUT_PULLUP); attachInterrupt(0, blink, CHANGE);}void loop() { // put your main code here, to run repeatedly: digitalWrite(ledPin, state);}void blink() { state = !state;}运行如上的程序,即可以看到 LinkIt ONE 的 D13 对应的LED 随着 D2 的状态 变化而变化的。
LinkIt ONE 对 arduino 的移植和兼容也还不错,当然没有 官方的Atmel 的那么彻底。比如 digitalPinToInterrupt(interruptPin) 这个函数在程序中就没有,不过EINT 0 和 1 都可以了。功能已经够用了。。 |
|