微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > NEC V850 之 外部中断

NEC V850 之 外部中断

时间:12-03 来源:互联网 点击:
编译环境:IAR For V850 3.81 + MiniCube2

硬件平台:NEC V850ES/FG3 D70F3630 (D70F3377A)


硬件资源:

LED端口:P94 P10

KEY端口:P04(INTP1)


在使用V850的外部中断的时候有下面几个步骤:

第一步:设置端口模式寄存器为第二功能模式(PMCn = 1);

第二步:设置第二功能模式选择,选择相应的第二功能(PFCEn,PFCn);

第三步:设置外部触发条件,上升沿触发,下降沿触发,上升和下降沿都触发(INTFn,INTPn);

第四步:设置中断控制寄存器,包括中断标识位,中断使能位,中断优先级(xxICn);

第五步:清中断标志位(xxIFn);

第六步:使能中断位(xxMKn);

第七步:开全局中断(__EI());

第八步:编写中断服务函数,并且在中断函数里清相应的标志位。

下面是代码:

来自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 ; // 设置清中断标置,开启外部中断,并且优先级设置为最低
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 ; // 关闭看门狗定时器,进入系统先关看门狗定时器,防止系统进入异常

__DI(); // 关全局中断
GPIO_PortInit(); // 初始化通用IO口
ExtInterrupt_Init(); // 初始化外部中断口
__EI(); // 开全局中断

LED1 = 0 ;
LED2 = 1 ;

while(1);
}



调试的时候注意两个地方,初始化后要开启全局中断;第二个就是在中断服务函数里对相应的标识位进行清零。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top