新闻中心

EEPW首页>嵌入式系统>设计应用> 凌阳16位单片机之用时基中断定时

凌阳16位单片机之用时基中断定时

作者: 时间:2016-11-20 来源:网络 收藏
P_INT_Ctrl有读写两个功能,写可以控制中断源允许和禁止中断,读可以判断产生中断请求的中断源,当某单元中的某位为一时,说明该位代表的中断允许开放,如果是0,就算有中断申请,CPU也不会相应。

当作为读操作的时候,P_INT_Ctrl主要作为中断标志,因每一位均代表一个中断,当CPU相应某个中断的时候,便将该中断标识值=置为1

本文引用地址://m.amcfsurvey.com/article/201611/318709.htm

清楚标志控制单元P_INT_Clear只具有写的功能,当CPU响应中断后,会将中断标志为1;当进入中断服务的时候,会将中断标志位0,否则CPU将会总进行这个中断;

P_INT_Ctr_New与P_INT_Ctrl功能相似。

首先在打开中断的情况下,有多少Hz一秒钟就进入多少次中断,

所以要定时0.5秒钟的话,只需要有2Hz就可以了 ,没进入一次就是0.5秒,所以就不用在计算了,

如果要是用更高频率的话也是可以的,比如说用16Hz的话,那就是8Hz为0.5秒,这样就可以提前定义一个变量叫做n,这个n在中断内,当n==8才真正的进入相应的中断,

#include "SPCE061A.H"
unsigned int g_uioutput = 0x0001,n=0;
void IRQ5(void)__attribute__((ISR));


int main()
{
asm("INT OFF");
*P_IOA_Dir = 0x00ff;
*P_IOA_Attrib = 0x00ff;
*P_IOA_Data = 0x0000;
*P_INT_Ctrl = C_IRQ5_2Hz;
asm("INT IRQ");
while(1)
*P_Watchdog_Clear = 0x0001;
}

void IRQ5(void)
{
if(*P_INT_Ctrl&C_IRQ5_2Hz)
{
if(++n == 4)//两秒的时候回正真的进入一次中断,n就作为一个标记

n=0;//设置n为0;为了下一次重新开始
*P_IOA_Data = g_uioutput;
g_uioutput&=0x0000;
}
*P_INT_Clear = 0x0004;//清楚中断标志位
}
else
{
*P_INT_Clear = 0x0008;//C_IRQ5_2Hz控制的有两个频率如果进入的4Hz的频率的话
}
}



评论


技术专区

关闭