NUC140之中断

中断属于比较深入的ARM课程了,可以简单理解为在程序正常循环运行中,

满足一定程度的条件就会打断该循环,优先运行。

最简单的中断是I/O中断,一般分边沿触发和电平触发,边沿触发后,

要判断电平的高低程度,也可以作防抖动处理,

程序如下

/*****************************************
*文件名:VOP_OK_error_solution.c         *
*功能:供电异常处理     	             *
******************************************/

#include "VOP_OK_error_solution.h"

/**************************************************
 *函数名:	GPCDE_call_back         			
 *功能:	PE.6 VOP-OK监测中断回调函数(CDE三个端口共用)          
 *出口参数:无									  
 *入口参数:三个,暂无用    					  
 *************************************************/
void GPCDE_call_back (uint32_t temp_data1, uint32_t temp_data2, uint32_t temp_data3)
{
	if ((DrvGPIO_GetBit (E_GPE, 6) == 0)&&(error_register1.error_sample_all == 0)&&(status_register2.status_sample_all == 0))
	{
		error_register1.error_sample.VOP = 1; //设置VOP状态异常
	}
}

/**************************************************
 *函数名:	GPAB_Call_back	                      *
 *功能:	AB端口中断回调函数,暂时无用        *
 *出口参数:无									  *
 *入口参数:两个,暂无用     					  *
 *************************************************/
void GPAB_Call_back (uint32_t temp_data1, uint32_t temp_data2)
{
}

/**************************************************
 *函数名:	VOP_OK_interrupt_initialize 	      *
 *功能:	PE.6 VOP-OK监测中断初始化函数         *
 *出口参数:无									  *
 *入口参数:无									  *
 *************************************************/
void VOP_OK_interrupt_initialize (void)						  
{
	DrvGPIO_EnableInt (E_GPE,								  //使能GPE端口的中断
					   6,									  //使能端口PE.6
					   E_IO_FALLING,						  //中断类型为下降沿触发
					   E_MODE_EDGE);						  //中断模式为边沿触发
	DrvGPIO_SetIntCallback (GPAB_Call_back, GPCDE_call_back); //安装中断函数
}

/**************************************************
 *函数名:	setup_interrupt_order 	      
 *功能:	设置中断优先级         
 *出口参数:无									  
 *入口参数:无									  
 *************************************************/
void setup_interrupt_order(void)
{
	register_NVIC_IPR0 &= (~(3<<14));   //看门狗设为最高优先级0
	register_NVIC_IPR1 |= (3<<14);		//GPCDE中断也就是VOP-OK中断设置为最低优先级3
	register_NVIC_IPR2 |= ((2<<6)|(2<<14)|(2<<22)|(0x80000000)); //设置TMR0~TMR3为次低优先级2
	register_NVIC_IPR3 |= ((1<<6)|(1<<14));					     //设置UART0~UART2为次高优先级1
}	

 

头文件为

#ifndef VOP_OK_error_solution_h
#define VOP_OK_error_solution_h

#include "common_variables.h"
#include "DrvGPIO.h"
#include "NUC140_address.h"

extern void VOP_OK_interrupt_initialize (void); //供电异常处理函数

/**************************************************
 *函数名:	setup_interrupt_order 	      
 *功能:	设置中断优先级         
 *出口参数:无									  
 *入口参数:无									  
 *************************************************/
extern void setup_interrupt_order(void);
#endif




串口中断等其他中断见其他子程序。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值