中断属于比较深入的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
串口中断等其他中断见其他子程序。