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

📄 main.c

📁 LPC2400ARM开发参考
💻 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:			liuyanlong
** Modified date:		2007-08-18
** Version:				
** Descriptions:		对代码风格和规范进行校对、调整
**
** Rechecked by:        Litiantian
********************************************************************************************************/
#include "config.h"
#include "VIC.h"

#define BEEP        (1 << 30)				// P3.30控制BEEP,低电平蜂鸣	
#define SSPCR1_SSE	(1 << 1)				// SSP使能

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 (SSP0DR);
}

/*********************************************************************************************************
** 函数名称:IRQ_Timer0
** 函数功能:Timer0中断服务函数,控制外部 LED1 ~ LED8 闪烁一次
** 入口参数:无
** 出口参数:无
********************************************************************************************************/
void IRQ_Timer0(void)
{
	uint32	bak;
	bak 		 = 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         = VICIntEnable;
	VICIntEnClr = 1 << EINT0_INT;			// 禁止当前中断
	VICVectAddr = 0x00;
	
	IRQEnable();							// 使能IRQ中断
	
	i = 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中断 */ 
	IRQ_Init(EINT0_INT,  1, (uint32)Eint0_Handler);
	IRQ_Init(TIMER0_INT, 2, (uint32)Timer0_Handler);	
	IRQEnable();

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

⌨️ 快捷键说明

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