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

📄 main.c

📁 周立功PXA270教学实验箱的ARM汇编指令实验2
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                               Guangzhou ZHIYUAN electronics Co.,LTD.
**                                     
**                                 http://www.zyinside.com
**
**--------------File Info-------------------------------------------------------------------------------
** File Name: main.c
** Last modified Date: 2007-01-24
** Last Version: v1.0
** Description: MagicARM270实验箱的基础实验---定时器实验。
**              使用PXA270的OS定时器0实现0.5秒的定时并产生中断,每产生一次中断即控制蜂
**              鸣器的控制I/O口状态取反。
**------------------------------------------------------------------------------------------------------
** Created By: 黄绍斌
** Created date: 2007-01-24
** Version: v1.0
** Descriptions:
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Description:
**
********************************************************************************************************/
#include  "config.h"


/* OS定时器简述:
   OSCR计数(3.25MHz)->OSMRx比较->OIER使能->OSSR中断标志(写1时清除中断标志)->IRQ中断产生。
   OSMR3可以用作WDT,通过设置寄存器为OWER实现。
   OSMR0中断ID为26, OSMR1中断ID为27, OSMR2中断为ID28, OSMR3中断ID为29。
*/   

// 定义定时器时钟值
#define  OS_TIMER_CLK		3250000


// 定义蜂鸣器控制口       
#define  BEEP		(1<<11)				/* GP11 */




/*********************************************************************************************************
** Function name: DelayNS
** Descriptions: 长软件延时。
**              延时时间与系统时钟有关。
** Input: dly	延时参数,值越大,延时越久
** Output: 无
** Created by: 黄绍斌
** Created Date: 2005-12-31 
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void  DelayNS(uint32  dly)
{  
	uint32  i;

   	for(; dly>0; dly--) 
       for(i=0; i<50000; i++);
}




uint8  beep_sta;		// 蜂鸣器控制口的状态变量

/*********************************************************************************************************
** Function name: IRQ_OSTimer
** Descriptions: OS Timer中断服务程序
** Input: 无
** Output: 无
** Created by: 黄绍斌
** Created Date: 2007-01-24
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void  IRQ_OSTimer(void)
{		
   	if(beep_sta != 0)    
    {	GPCR0 = BEEP;		// BEEP = 0    
    	beep_sta = 0;
    }
    else
    {	GPSR0 = BEEP;		// BEEP = 1
    	beep_sta = 1;
    }
                    
    OSSR = 0x00F;			// 清除中断标志 
    OSCR0 = 0;				// 复位定时器	                    
}




/*********************************************************************************************************
** Function name: InitEint
** Descriptions: 初始化OS Timer,并使能匹配0中断
** Input: 无
** Output: 无
** Created by: 黄绍斌
** Created Date: 2007-01-24
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void  InitEint(void)
{     
    // 设置IRQ中断
    ICLR = ICLR & (~(0x01<<26));   	 	// 设置为IRQ中断              
    IPR0 = (1<<31) | 					// 启用中断优先级0
    	   (26<<0);						// 分配给OS Timer匹配0中断
    ICCR = 0x00;						// 允许        
    VICVectAddr[26] = (uint32) IRQ_OSTimer;	// 设置中断服务地址    
    ICMR = ICMR | (0x01<<26);			// 允许26号外设(即OS Timer)中断
	
	// 初始化OS TIMER
	OWER = 0x00;	// OSMR3不用作WDT
	OSSR = 0x00F;	// 清除中断标志
	OIER = 0x001;	// 使能OSMR0匹配中断
	OSMR0 = OS_TIMER_CLK / 2 ;	// 定时0.5S
	OSCR0 = 0;		// 复位定时器	
}




/*********************************************************************************************************
** Function name: main
** Descriptions: 初始化定时器,每0.5产生一次定时器中断。           
** Input: 无
** Output: 系统返回值0
** Created by: 黄绍斌
** Created Date: 2005-12-31 
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
int  main(void)
{	
	// 初始化I/O
	GPDR0 = GPDR0 | BEEP;					// 设置BEEP控制口为输出模式
	GAFR0_L = GAFR0_L & ( ~(0x03<<22) );	// 设置BEEP控制口为GPIO功能	
	
	InitEint();			// 初始化OS Timer,并设置中断
	IRQEnable();		// 使能中断
		
	while(1);			// 等待中断产生
    
   	return(0);
}

/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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