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

📄 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:			daimaobo
** Created date:		2006-12-31
** Version:				v2.00
** Descriptions:		Modified for LPC23XX
**--------------------------------------------------------------------------------------------------------
** Modified by:			wankai
** Modified date:		2008-07-09
** Version:				
** Descriptions:		对代码风格和规范进行校对、调整
**
** Rechecked by:        Litiantian
*********************************************************************************************************/
#include "main.h"

#define BEEP        (1 << 30)				                                /* P3.30控制BEEP            */
#define SSPCR1_SSE	(1 << 1)				                                /* SSP使能					*/
#define EINT0_INT   14
#define TIMER0_INT  4
void	Timer0_Handler(void);
void	Eint0_Handler(void);

/*********************************************************************************************************
** 函数名称:Delay
** 函数功能:延时函数
** 入口参数:无
** 出口参数:无
*********************************************************************************************************/
void Delay(void)
{
	uint32	dly;
	for (dly = 5000000; dly != 0; dly--);
}

/*********************************************************************************************************
** 函数名称:SSP_SendData
** 函数功能:SSP接口向SSP总线发送数据
** 入口参数:data        待发送的数据
** 出口参数:返回值为读取的数据
*********************************************************************************************************/
uint16  SSP_SendData(uint8 data)
{  
    while ((SSP0SR & 0x02) == 0);	    	                                /* 等待发送FIFO留出空间 	*/
	SSP0DR = data;
   
    while ((SSP0SR & 0x01) == 0);	    	                                /* 等待TFE置位,即发送FIFO空 */
    return ((uint16)SSP0DR);
}

/*********************************************************************************************************
** 函数名称:IRQ_Timer0
** 函数功能:Timer0中断服务函数,控制外部 LED1 ~ LED8 闪烁一次
** 入口参数:无
** 出口参数:无
********************************************************************************************************/
void IRQ_Timer0(void)
{
	uint32	bak;
	bak 		 = (uint32)VICIntEnable;	                                /* 备份当前VICIntEnable的值	*/
	VICIntEnClr  = (1 << 4) | (1 << 14);	                                /* 禁止当前优先级中断以     */
	                                                                        /* 及低优先级中断   		*/
	VICVectAddr  = 0x00;					                                /* 清除中断逻辑,以便VIC可以*/
	                                                                        /* 响应更高优先级IRQ中断	*/

	SSP_SendData(0x00);
	Delay();
	SSP_SendData(0xFF);
	
	T0IR 		 = 0x01;					                                /* 清除定时器0中断标志		*/
	VICIntEnable = bak;		
}
/*********************************************************************************************************
** 函数名称:IRQ_Eint0
** 函数功能:EINT0中断服务函数,取反BEEP控制口
** 入口参数:无
** 出口参数:无
********************************************************************************************************/
void IRQ_Eint0(void)
{
	uint32	i, bak;
	bak         = (uint32)VICIntEnable;
	VICIntEnClr = 1 << EINT0_INT;			                                /* 禁止当前中断				*/
	VICVectAddr = 0x00;
	
	IRQEnable();							                                /* 使能IRQ中断				*/
	
	i = (uint32)FIO3SET;					                                /* 读取当前BEEP控制值		*/
	
	/* 控制BEEP输出 */
	if ((i & BEEP) == 0) {
		FIO3SET = BEEP;
	}
	else {
		FIO3CLR = BEEP;
	}
	
	while ((EXTINT & 0x01) != 0) {			                                /* 等待中断信号恢复为高电平	*/
		EXTINT = 0x01;						                                /* 清除EINT0中断标志		*/
	}
	VICIntEnable = bak;
}

/*********************************************************************************************************
** 函数名称:SSP_Init
** 函数功能:将SSP控制器设置为主机
** 入口参数:无
** 出口参数:无
*********************************************************************************************************/
void  SSP_Init(void)
{
	PCONP   |= (1 << 21);			    	                                 /* 使能SSP外设,默认情况下, */
	                                                                         /* 该外设已被使能			*/
	
	/* 初始化P0.15、P0.16、P0.17、P0.18为SSP接口引脚,
	 * 不用另外的IO口作从机选择线,直接用SSEL0完成片选595的功能*/
	PINSEL0  = (PINSEL0 & 0x3FFFFFFF) | 0x80000000;
	PINSEL1 |= (0x02 << 0) | (0x02 << 2) | (0x02 << 4);    
	
	/* 设置数据长度为8位,帧格式SPI,总线空闲时时钟线为高电平,第一个时钟沿采样,位速率为默认值。*/
    SSP0CR0  = 0x00000047;	
    SSP0CPSR = 0x02;			    		                                /* 设置SSP从Pclk获得的分频值*/
                                                                            /* 主模式下有效,最小值为0x02*/
    SSP0CR1  = SSPCR1_SSE;		   			                                /* 设置SSP为主机模式,       */
                                                                            /* 不使用回写模式,并使能	*/
}

/*********************************************************************************************************
** 函数名称:main
** 函数功能:中断嵌套示例。外部中断和定时器0实现中断嵌套
** 调试说明:实验前将BEEP与3.30短接,KEY与P2.10相连
**           MOSI、CS、SPICLK、MISO与P0.18、P0.16、P0.15、P0.17短接
*********************************************************************************************************/
int main(void)
{	

	PINSEL0  = 0x00;
	PINSEL1  = 0x00;
	PINSEL4  = 0x00;
	SCS	    &= 0xFFFFFFFE;								                    /* 使用普通GPIO				*/
	
	/* 初始化外部中断0 */
	PINSEL4  = (PINSEL4 & (~(0x03 << 20))) | (0x01 << 20);	                /* 设置P2.10为外部中断0   	*/
	EXTMODE  = 0x00;
	EXTPOLAR = 0x00;	
	
	/* 初始化定时器0,实现0.1秒定时 */
	T0TC     = 0;				
	T0PR     = 0;				
	T0MCR    = 0x03;			
	T0MR0    = Fpclk / 10;	
	T0TCR    = 0x01;	
	
	/* 初始化蜂鸣器控制引脚 */ 
	PINSEL7  = 0x00000000;									                /* 设置管脚连接GPIO			*/		
	FIO3DIR  = BEEP;										                /* 设置BEEP控制口输出		*/		
	FIO3SET  = BEEP;
	
	/* 初始化SPI接口 */
	SSP_Init();
	
	/* 初始化IRQ中断 */ 
	vicIrqFuncSet(EINT0_INT,  1, (uint32)Eint0_Handler);
	vicIrqFuncSet(TIMER0_INT, 2, (uint32)Timer0_Handler);	
	IRQEnable();

	
	while (1);
	return (0);
}
/*********************************************************************************************************
       End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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