NEC V850 之 外部中斷
硬件平臺:NEC V850ES/FG3 D70F3630 (D70F3377A)
本文引用地址:http://m.butianyuan.cn/article/201612/325098.htm硬件資源:
LED端口:P94 P10
KEY端口:P04(INTP1)
在使用V850的外部中斷的時候有下面幾個步驟:
第一步:設置端口模式寄存器為第二功能模式(PMCn = 1);
第二步:設置第二功能模式選擇,選擇相應的第二功能(PFCEn,PFCn);
第三步:設置外部觸發(fā)條件,上升沿觸發(fā),下降沿觸發(fā),上升和下降沿都觸發(fā)(INTFn,INTPn);
第四步:設置中斷控制寄存器,包括中斷標識位,中斷使能位,中斷優(yōu)先級(xxICn);
第五步:清中斷標志位(xxIFn);
第六步:使能中斷位(xxMKn);
第七步:開全局中斷(__EI());
第八步:編寫中斷服務函數(shù),并且在中斷函數(shù)里清相應的標志位。
下面是代碼:
來自ExtInt.c
#include "ExtInt.h"
void ExtInterrupt_Init(void)
{
PMC0_bit.no4 = 1 ; // 設置端口為第二功能模式
PFCE0_bit.no4 = 0 ; // 選擇第二功能為外部中斷
PFC0_bit.no4 = 0 ;
INTF0_bit.no4 = 1 ; // 設置使能下降沿
INTR0_bit.no4 = 0 ; // 設置禁止上升沿
PIC1 = 0x07 ; // 設置清中斷標置,開啟外部中斷,并且優(yōu)先級設置為最低
PIF1 = 0 ; // 清中斷標志
PMK1 = 0 ; // 開外部中斷1屏蔽位
}
#pragma vector = INTP1_vector
__interrupt void MD_INTP1(void)
{
P9L_bit.no4 = ~P9L_bit.no4 ;
P1_bit.no0 = ~P1_bit.no0 ;
PIF1 = 0; // 清外部中斷1中斷標志
}
來自main.c
#include "main.h"
void main(void)
{
WDTM2 = 0x1F ; // 關閉看門狗定時器,進入系統(tǒng)先關看門狗定時器,防止系統(tǒng)進入異常
__DI(); // 關全局中斷
GPIO_PortInit(); // 初始化通用IO口
ExtInterrupt_Init(); // 初始化外部中斷口
__EI(); // 開全局中斷
LED1 = 0 ;
LED2 = 1 ;
while(1);
}
調試的時候注意兩個地方,初始化后要開啟全局中斷;第二個就是在中斷服務函數(shù)里對相應的標識位進行清零。
評論