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

📄 main.c

📁 SmartARM2400系列开发板全套资料
💻 C
字号:
/****************************************Copyright (c)****************************************************
**                               Guangzou ZLG-MCU Development Co.,LTD.
**                                      graduate school
**                                 http://www.zlgmcu.com
**
**--------------File Info---------------------------------------------------------------------------------
** File name:			main.c
** Last modified Date:  2004-09-16
** Last Version:		1.0
** Descriptions:		The main() function example template
**
**--------------------------------------------------------------------------------------------------------
** Created by:			李仲生
** Created date:		2007-03-14
** Version:				1.0
** Descriptions:		PLL中断示例程序
**
**--------------------------------------------------------------------------------------------------------
** Modified by:			Liuyanlong
** Modified date:		2007-08-17
** Version:
** Descriptions:		对代码风格和注释进行校对、修改
**
** Rechecked by :       Litiantian
*********************************************************************************************************/
#include 	"config.h"

#define 	BEEP			(1 << 30)                                   /* P3.30控制蜂鸣器	            */			



			
/*********************************************************************************************************
** 函数名称 :DelayNS
** 函数功能 :长软件延时
** 入口参数 :dly	延时参数,值越大,延时越久
** 出口参数 :无
*********************************************************************************************************/
void DelayNS(uint32 dly)
{
	uint32 i = 0;
	
	for ( ; dly > 0; dly--)
		for (i = 0; i < 50000; i++);
}


/*********************************************************************************************************
** 函数名称 : InitBeepIO
** 功能描述 : 初始化BEEP控制脚
** 入口参数 : 无
** 出口参数 : 无
*********************************************************************************************************/
void InitBeepIO(void)
{   
	PINSEL7	 |= 0;
	FIO3DIR  |= BEEP;					                                /* 设定BEEP控制管脚输出	        */
	FIO3SET  |= BEEP;
}
/*********************************************************************************************************
** 函数名称 : BEEP_Reverse
** 功能描述 : 控制蜂鸣器
** 入口参数 : 无
** 出口参数 : 无
*********************************************************************************************************/
void BEEP_Reverse(void)
{   
	if ((FIO3SET & BEEP) == 0) {
	 	FIO3SET = BEEP;
    } else {
    	FIO3CLR = BEEP;							                        /* 蜂鸣器控制管脚取反           */
	}
}
/*********************************************************************************************************
** 函数名称 :IRQ_PLL
** 函数功能 :PLL中断服务程序
** 入口参数 :无
** 出口参数 :无
*********************************************************************************************************/
void __irq IRQ_PLL(void)
{
 	PLLCON 		= 3;												    /* 连接PLL                      */
    PLLFEED 	= 0xAA;                                             
    PLLFEED 	= 0x55;							
	while (((PLLSTAT & (3 << 25)) != (3 << 25)));					    /* 等待PLL连接并锁定请在        */
	                                                                    /* 此处设置断点                 */
    BEEP_Reverse();
	VICIntEnClr = 1 << 12;											    /* 禁止PLL中断	                */
	VICVectAddr = 0x00;												    /* 通知VIC中断处理结束          */
}

/*********************************************************************************************************
** 函数名称 :main
** 函数功能 :演示PLL中断
** 注意事项 :在程序运行前需要在PLL中断服务程序内设置一断点,这个断点不可以打断PLL的配置。然后再全速运行;
**            若不设置断点,并且将P3.30与蜂鸣器引脚短接,然后全速运行,则可以观察到蜂鸣器会周期性地响。
*********************************************************************************************************/
int main(void)
{
    InitBeepIO();
    IRQEnable();													    /* IRQ中断使能                  */		
	VICIntSelect 	= 0x00;											    /* 所有中断通道设置为IRQ中断    */	
	VICVectPri12	= 0;											    /* 设置PLL中断最高优先级        */	
	VICVectAddr12 	= (uint32)IRQ_PLL;								    /* 设置中断服务程序地址     	*/
while (1){
    SCS = (SCS & 0x04) | 0x20;               		                    /* 使能主振荡器,1MHz~20MHz    */       							      
    while ((SCS & 0x40) == 0 );			   		 	                    /* 等待主振荡器可用             */
 
	if (PLLSTAT & (1 << 25)){						                    /* 如果PLL连接                  */
		PLLCON  = 0x01;										
		PLLFEED = 0xAA;								                    /* 断开连接                     */
		PLLFEED = 0x55;	
		PLLCON  = 0x00;										
		PLLFEED = 0xAA;								                    /* 不使能PLL                    */
		PLLFEED = 0x55;			
    } else if (PLLSTAT & (1 << 24)){					                /* 如果PLL使能 	                */	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                // 如果PLL已被使能,则先禁止PLL
		PLLCON  = 0x00;										
		PLLFEED = 0xAA;								                    /* 不使能PLL                    */
		PLLFEED = 0x55;
    }
    CLKSRCSEL 	= 0x01;								                    /* 选择主振荡器作为PLL输入时钟源*/ 
    PLLCFG  	= (((PLL_NValue - 1) << 16) | (PLL_MValue-1));  	    /* 设置N、M值                   */	
    PLLCON 		= 1;								                    /* 使能但不连接PLL	            */
    PLLFEED 	= 0xAA;								                    /* 使能PLL                      */
    PLLFEED 	= 0x55;	 
    CCLKCFG		= (Fcco / Fcclk - 1);				                    /* 用于防止CPU工作频率过大      */
    VICIntEnable 	= (1 << 12);					                    /* 使能PLL中断                  */	
    DelayNS(20);
    }	
	return (0); 
}



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

⌨️ 快捷键说明

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