⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 keil开发平台下的ADUC7027的功能模块代码。
💻 C
字号:
/**********************************************************************************************
  main.c file

  ADuC7027的第八个实验——中断

  作者:Computer-lov
  建立日期:2006-4-20
  修改日期:2006-4-20
  版本:V1.0
  版权所有,盗版必究。
  任何技术问题可到我的博客上留言:    http://computer00.21ic.org
  Copyright(C) Computer-lov 2006-2016
  All rights reserved
**********************************************************************************************/

#include <ADuC7027.H>
#include <../my_type.h>
#include <../LED.H>
#include "interrupt.h"

volatile uint32 pll_lock;

/*********************************************************************************************/
void sys_clk_init(void)
{
 PLLKEY1=0xAA;
 PLLCON=0x01;   //PLL配置  
 PLLKEY2=0x55;
 POWKEY1=0x01;
 POWCON=0x00;  //CPU时钟配置为41.78MHz
 POWKEY2=0xF4;
// while(!(PLLSTA & 0x01));
}
///////////////////////////////////////////////////////////////////////////////////////////////

/*********************************************************************************************/
void IRQ_Handler(void) __irq	//IRQ中断服务程序
{
 if(IRQSTA & EXTERNAL_IRQ0)	   //读取IRQ中断状态,判断IRQ中断源
  {
   ON_LED4();				   
   return;
  }
}
///////////////////////////////////////////////////////////////////////////////////////////////

/*********************************************************************************************/
void FIQ_Handler(void) __fiq   //FIQ中断服务程序
{
 if(FIQSTA & EXTERNAL_IRQ1)	   //读取FIQ中断状态,判断FIQ中断源
  {
   ON_LED5();
   return;
  }
}
///////////////////////////////////////////////////////////////////////////////////////////////

/*********************************************************************************************/
void SWI_0(void) __swi(0)			  //0号软中断,打开LED6
{
 ON_LED6();
}

///////////////////////////////////////////////////////////////////////////////////////////////

/*********************************************************************************************/
void SWI_1(void) __swi(1)			 //1号软中断,打开LED7
{
 ON_LED7();
}
///////////////////////////////////////////////////////////////////////////////////////////////

/*********************************************************************************************/
uint32 SWI_2(uint32 a,uint32 b) __swi(2)	  //2号软中断,实现两个整数相加
{
 return a+b;
}
///////////////////////////////////////////////////////////////////////////////////////////////

/*********************************************************************************************/
void main(void)
{

 sys_clk_init();

 EN_LED4();		  //使能LED
 EN_LED5();
 EN_LED6();
 EN_LED7();
 EN_LED8();

 OFF_LED4();	 //初始化关掉LED
 OFF_LED5();
 OFF_LED6();
 OFF_LED7();
 OFF_LED8(); 

 SWI_0();  //用软中断的方法来打开LED6
 SWI_1();  //用软中断的方法来打开LED7
 if(SWI_2(100,200)==300)	  //调用软中断,计算100加200,如果结果等于300,则点亮LED8
  {
   ON_LED8();
  }

 IRQEN |= EXTERNAL_IRQ0;   //将外部中断0配置成IRQ中断(按键S4)
 FIQEN |= EXTERNAL_IRQ1;   //将外部中断1配置成FIQ中断(按键S3)

 while(1)			//由于是高电平触发中断,所以要同时按住S4、S3键才能运行主程序,即熄灭LED
  {					//放开某个按键,则进入相应的中断,点亮相应的LED。由于FIQ的优先级高于IRQ,
   OFF_LED4();		//当先放开S4,后放开S3时,FIQ可中断IRQ,从而能点亮LED5。相反,如果先放开
   OFF_LED5();		//S3,后放开S4,则IRQ不能中断FIQ,所以不能点亮LED4。
  }
}
///////////////////////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -