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

📄 main.c

📁 这是LPC2300的例程 ZLG的ARM2300开发板带的
💻 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:			Chenmingji
** Created date:		2004-09-16
** Version:				1.0
** Descriptions:		The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:			Litiantian
** Modified date:		2006-01-04
** Version:
** Descriptions:		LPC2300 SSP用作SPI从机应用示例			
********************************************************************************************************/
#include  	"config.h" 

#define  SSP_INT		10			// SPI中断源ID
#define  BEEP			(1 << 27)	// 定义BEEP口			
#define  SLAVE_CS		(1 << 16)	// 从机片选口

volatile uint8 	RcvFlag = 0;		// 接收到新数据标志
volatile uint8 	RcvData = 0;		// 接收到的数据


/*********************************************************************************************************
** 函数名称:SSP_IRQ
** 函数功能:SSP中断服务函数
** 入口参数:无
** 出口参数:无
*********************************************************************************************************/
void __irq SSP_IRQ(void)
{
    RcvData = SSP0DR;        // 接收数据
    RcvFlag = 0x01;			 // 接收到新数据
    SSP0ICR = 0x03;          // 清除标志位
    VICVectAddr = 0x00;
} 

/***********************************************************************
** 函数名称:SPIInit																									
** 功能说明:初始化LPC2300SPI为主机,并初始化相关引脚					
** 入口参数:无																
** 出口参数:无																
*************************************************************************/
void  SPIInit(void)
{  
	/* 设置硬件SPI的通讯脚 */
    PINSEL0	|= 	0xc0000000;	// 设置P0.15脚为SCK脚
    PINSEL1	=	(0x03 << 2)|(0x03 << 4);// 设置P0.17、P0.18管脚为SPI接口
	/* 初始化P0.16为GPIO输出,用作片选脚 */	
	IO0DIR |= SLAVE_CS;
		               
 	/* 设置SPI的工作方式 */
 	S0SPCR  = 	(0 << 3) |	// CPHA = 0, 数据在SCK 的第一个时钟沿采样
 				(1 << 4) |	// CPOL = 1, SCK 为低有效
 				(1 << 5) |	// MSTR = 1, SPI 处于主模式
 				(0 << 6) |	// LSBF = 0, SPI 数据传输MSB (位7)在先
 				(0 << 7);	// SPIE = 0, SPI 中断被禁止

	S0SPCCR = 0x52;			// 设置SPI时钟分频
}

/*********************************************************************************************************
** 函数名称:SSPSlave_Init
** 函数功能:将SSP控制器设置为从机机SPI,并初始化其引脚
** 入口参数:无
** 出口参数:无
**********************************************************************************************************/
void  SSPSlave_Init(void)
{
	PCONP |= (1 << 21);			   	 // 在外设功率控制寄存器里使能SSP外设,默认情况下,该外设已被使能。
	
	/* 初始化P1.20、P1.21、P1.23、P1.24为SSP接口引脚 */
	PINSEL3 = 0;
	PINSEL3 |= (0x03 << 8)|(0x03 << 10)|(0x03 << 14)|(0x03 << 16);    
	/* 初始化SSP的通讯方式,设置数据长度为8bit,帧格式为SPI,SCK 为低有效
    ,数据在SCK 的第一个时钟沿采样,设置位速率。 */
    SSP0CR0 = (0x00 << 8) |          // SCR  设置SPI位速率
              (0x00 << 7) |          // CPHA 时钟输出相位,仅SPI模式有效 
              (0x01 << 6) |          // CPOL 时钟输出极性,仅SPI模式有效
              (0x00 << 4) |          // FRF  帧格式 00=SPI,01=SSI,10=Microwire,11=保留
              (0x07 << 0);           // DSS  数据长度,0000-0010=保留,0011=4位,0111=8位,1111=16位

    SSP0CR1  = (0x00 << 3) |         // SOD  从机输出禁能,1=禁止,0=允许
               (0x01 << 2) |         // MS   主从选择,0=主机,1=从机
               (0x01 << 1) |         // SSE  SSP使能,1=允许SSP与其它设备通信
               (0x00 << 0);          // LBM  回写模式
   	/* 初始化SSP的中断接口 */			
    SSP0ICR  = 0x03;				 // 清除接收溢出和超时中断
    SSP0IMSC = 0x02;				 // 中断使能寄存器,使能接收超时中断
	VICIntEnClr |= 1 <<  SSP_INT;	 // 禁止SPI中断
	VICVectPri10 = 0x05;			 // 设置SPI中断优先级为5
	VICVectAddr10 = (uint32)SSP_IRQ; // 装入SPI中断服务程序地址
	VICIntEnable |= 1 <<  SSP_INT;	 // 使能SPI中断
   	IRQEnable();					 // IRQ中断使能
}

/*********************************************************************************************************
* 函数名称:SPI_SendData
* 函数功能:SPI接口向SSP从机发送数据
* 入口参数:data        待发送的数据
* 出口参数:无
*********************************************************************************************************/
void  SPI_SendData(uint8 data)
{  
    IO0CLR |= SLAVE_CS; 
    S0SPDR = data;
    while( 0 == (S0SPSR & 0x80));	// 等待SPIF置位,即等待数据发送完毕
	S0SPSR = 0;						// 清除SPIF标志
	IO0SET |= SLAVE_CS;
}

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

/*******************************************************************************************
** 函数名称:main																
** 函数功能:LPC2300 SSP用作SPI从机应用示例			
** 入口参数:无																
** 出口参数:无
*******************************************************************************************/
int main (void)
{  	
    uint32 i = 0;
	
	IO1DIR |= BEEP;			// 初始化BEEP口
	IO1SET |= BEEP;			// 关闭蜂鸣器
    SPIInit();				// 初始化SPI接口
    SSPSlave_Init();        // 初始化SSP接口
    for(i = 0; i < 8; i++)
    {
		RcvFlag = 0;		// 清除接收到新数据标志
	    
        SPI_SendData(i);	// 发送数据
        DelayNS(100);	    // 延时
		
		if(RcvFlag != 0)    // 如果接收到新数据
   		{
	  		if(RcvData == i)
      		{	
      			/* 接收的数据是否与发送的数据相同,通讯无误,蜂鸣器长鸣一次 */
				IO1CLR |= BEEP;										
				DelayNS(100);
				IO1SET |= BEEP;
      		}
      			/* 数据错误,BEEP一直响 */
      		else 
       			IO1CLR |= BEEP;
   		}
   		/* 通讯出错,BEEP一直响 */
   		else 
   			IO1CLR |= BEEP;
    } 
	while(1);
    return 0;
}
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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