📄 main.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 + -