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

📄 timeout.c

📁 timer,ARM 定时中断
💻 C
字号:
/****************************************************************************
* 文件名:TIMEOUT.C
* 功能:使用定时器0实现1秒定时,并打开IRQ中断,控制LED闪烁。
*      同时使用MAT0.0实现比较匹配输出。
* 说明:将跳线器JP4_LED1、JP4_LED4短接。
****************************************************************************/
#include  "config.h"

#define	  LEDCON	(1<<25)		/* P0.25引脚控制LED4,低电平点亮*/



#define  UART_BPS	19200			/* 定义通讯波特率 */
/****************************************************************************
* 名称:UART0_Ini()
* 功能:初始化串口0。设置为8位数据位,1位停止位,无奇偶校验,波特率为115200
* 入口参数:无
* 出口参数:无
****************************************************************************/
void  UART0_Ini(void)
{  uint16 Fdiv;

   U0LCR = 0x83;	//10000011	    // DLAB = 1,可设置波特率
   //8位字长,除数锁存使能
   Fdiv = (Fpclk / 16) / UART_BPS;  // 设置波特率
   U0DLM = Fdiv / 256;							
   U0DLL = Fdiv % 256;						
   U0LCR = 0x03; //禁止除数锁存
}
		
		
/****************************************************************************
* 名称:UART0_SendByte()
* 功能:向串口发送字节数据,并等待发送完毕。
* 入口参数:data		要发送的数据
* 出口参数:无
****************************************************************************/
void  UART0_SendByte(uint8 data)
{  U0THR = data;				    // 发送数据

   while( (U0LSR&0x40)==0 );	    // 等待数据发送完毕
}

/****************************************************************************
* 名称:IRQ_Time0()
* 功能:定时器0中断服务程序,取反LEDCON控制口。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void __irq  IRQ_Time0(void)
{  /* 进行LED4的取反控制 */

   if( (IO0SET&LEDCON) == 0 ) IO0SET = LEDCON;	// 控制LED4点亮
      else  IO0CLR = LEDCON;    		 	// 控制LED4熄灭
    
   //UART0_SendByte(0x55);	     
   T0IR = 0x02;	    			            // 清除中断标志
   VICVectAddr = 0x00;				        // 通知VIC中断处理结束
}



/****************************************************************************
* 名称:Time0Init()
* 功能:初始化定时器0,定时时间为0.5S,并打开中断。 
* 入口参数:无
* 出口参数:无
****************************************************************************/
void  Time0Init(void)
{  /* 初始化定时器0,实现0.5S定时;定时器1实现0.1秒定时。
      Fcclk = Fosc*4 = 11.0592MHz*4 = 44.2368MHz
	  Fpclk = Fcclk/4 = 44.2368MHz/4 = 11.0592MHz
   */
   T0PR = 99;			    				// 设置定时器0分频为100分频,得110592Hz
   T0MCR = 0x03<<3;		 					// 匹配通道1匹配中断并复位T0TC
   T0MR1 = 110592/2;	    				// 设置MR1比较值(0.5S定时值)
   
   T0MR0 = 110592/2;						// 设置MR0比较值(0.5S定时值)
   T0EMR = 0x30;		    				// 设置定时器0的T0MR0匹配输出,输出方式为翻转
   
   T0TCR = 0x03;		   					// 启动并复位T0TC
   T0TCR = 0x01; 
   
   /* 设置定时器0中断IRQ */
   VICIntSelect = 0x00;						// 所有中断通道设置为IRQ中断
   VICVectCntl0 = 0x24;						// 定时器0中断通道分配最高优先级(向量控制器0)
   VICVectAddr0 = (uint32)IRQ_Time0; 		// 设置中断服务程序地址向量 
   VICIntEnable = 0x00000010;				// 使能定时器0中断
}
    

	
/****************************************************************************
* 名称:main()
* 功能:初始化I/O及定时器,然后等待中断。 
* 说明:在STARTUP.S文件中使能IRQ中断(清零CPSR中的I位)。
****************************************************************************/
int  main(void)
{  PINSEL0 = 0x00000000;		
   PINSEL1 = 0x00003000;					// 设置MAT0.0连接到P0.22
   IO0DIR = LEDCON;							// 设置LED4控制口为输出
   
   Time0Init();								// 定时器0初始化
   //UART0_Ini();
   while(1);								// 等待定时器0中断或定时器1匹配输出
   
   return(0);
}

⌨️ 快捷键说明

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