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

📄 spi_test.c

📁 Embest EudKit-II教学系统配Samsung S3C2410处理器的部分测试程序。
💻 C
字号:
/*********************************************************************************************
* File:	spi_test.c
* Author:	embest
* Desc:	spi test file
* History:	
*********************************************************************************************/

/*------------------------------------------------------------------------------------------*/
/*                                     include files	                                    */
/*------------------------------------------------------------------------------------------*/
#include "2410lib.h"

/*------------------------------------------------------------------------------------------*/
/*                            external varibles	and functions                               */
/*------------------------------------------------------------------------------------------*/
void spi0_int(void) __attribute__((interrupt("IRQ")));
void spi1_int(void) __attribute__((interrupt("IRQ")));
INT32T ucSpiBaud=200000;
UINT8T *cTxData="S3C2410SPI COMMUNICATION TEST!";
UINT8T cRxData[256];
UINT8T cRxNo,cTxEnd;

/*********************************************************************************************
* name:		spi_test
* func:		spi_test function
* para:		none
* ret:		none
* modify:
* comment:		
*********************************************************************************************/
void spi_test(void)
{
	int i;
	
	uart_printf("\n SPI Communication Test Example\n"); 
	uart_printf(" The words that SPI0 transmit are:\n");
	uart_printf(" %s\n",cTxData);
	
	pISR_SPI0=(unsigned)spi0_int;
	pISR_SPI1=(unsigned)spi1_int;
	
	//clear interrupt pending
	ClearPending(BIT_SPI0);
	ClearPending(BIT_SPI1);
	
	//IO port configuration
	rGPECON=(2<<26)|(2<<24)|(2<<22);							//SPI1 configued slave
	rGPGCON=(3<<14)|(3<<12)|(3<<10)|(3<<6)|(1<<4);				//nSS0 bit is output
	rGPGUP &=0xFF13;
	rGPEUP &=0xC7FF;
	rSPPRE0=PCLK/2/ucSpiBaud-1;
	rSPCON0=(1<<5)|(1<<4)|(1<<3)|(0<<2)|(0<<1)|(0<<0);			//interrupt mode,enable ENSCK,master,CPOL=0,CPHA=0,normal mode	
	rSPPRE1=PCLK/2/ucSpiBaud-1;	
	rSPCON1=(1<<5)|(1<<4)|(0<<3)|(0<<2)|(0<<1)|(0<<0);			//interrupt mode,enable ENSCK,slave,CPOL=0,CPHA=0,normal mode
	rSPPIN0=(0<<2)|(1<<1)|(0<<0);								//dis-ENMUL,SBO,release	
	rGPGDAT &=0xFFFB;											//nSS0=0	
	
	rINTMOD &= ~(BIT_SPI0 | BIT_SPI1);
	rINTMSK &= ~(BIT_SPI0 | BIT_SPI1);
	
	while(!(rSPSTA0 & rSPSTA1 & 0x1));
	cTxEnd=0;
	rSPTDAT0=*cTxData++;
	
	rINTMSK |= (BIT_SPI0 | BIT_SPI1);
	uart_printf(" end.\n");
}

/*********************************************************************************************
* name:		spi0_int
* func:		spi0 inerrupt service routine
* para:		none
* ret:		none
* modify:
* comment:		
*********************************************************************************************/
void spi0_int(void)
{
	ClearPending(BIT_SPI0);	
	while(!(rSPSTA0&0x01));
	if((*cTxData)!='\0')
		rSPTDAT0=*cTxData++;
	else if(cTxEnd==0)
	{
		cTxEnd=1;
		rSPTDAT0='\0';
		uart_printf("\n .......................Tx OK\n");
	}
	if(cTxEnd==1)
		rINTMSK |= BIT_SPI0;
}

/*********************************************************************************************
* name:		spi1_int
* func:		spi1 interrupt service routine
* para:		none
* ret:		none
* modify:
* comment:		
*********************************************************************************************/
void spi1_int(void)
{
	ClearPending(BIT_SPI1);
	while(!(rSPSTA1&0x1));
	cRxData[cRxNo++]=rSPRDAT1;
	
	if((cRxNo>0)&&(cRxData[cRxNo-1])=='\0')
	{
		rINTMSK |= BIT_SPI1;
		uart_printf(" .......................Rx OK\n\n");
		uart_printf(" The words that SPI1 receive are:\n");
		uart_printf(" %s",cRxData);
	}
}

⌨️ 快捷键说明

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