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

📄 spi01.org.c

📁 三星s3c2460开发板完整功能测试代码
💻 C
📖 第 1 页 / 共 3 页
字号:

    SPI_Port_Return();
}


void Test_Spi01_MS_Int(void)
{
	char *rx0Str,*tx0Str;
	char *rx1Str,*tx1Str;
	int i;

	SPI_Port_Set();
	SPI0_Port_Init(1); // SPI0=Master
	SPI1_Port_Init(0); //  SPI1=Slave
	printf("[SPI0(Master), SPI1(Slave) Interrupt Rx/Tx test]\n");
	printf("Connect J29: (2-3) and CON28: (2-3)\n");

	pISR_IIC_SPI=(unsigned)Spi10_Int;
	
	end0SpiTx=0;
	endSpi1Tx=0;
	spi0TxStr="!@#$%^&*()_+|<>?:~ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
	spi1TxStr="1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+|<>?:~";

	spi0RxStr=(char *) SPI_BUFFER0;
	spi1RxStr=(char *) SPI_BUFFER1;
	
	tx0Str=(char *)spi0TxStr;
	rx0Str=(char *)spi0RxStr;
	tx1Str=(char *)spi1TxStr;
	rx1Str=(char *)spi1RxStr;
		
	i = ClockSelection();
	rSPPRE1=i;	//if PCLK=50Mhz,SPICLK=12.5Mhz
	rSPPIN1=(0<<2)|(1<<1)|(0<<0);//dis-ENMUL,SBO,release
	
	#if FORMAT1_A
	rSPCON1=(1<<5)|(0<<4)|(0<<3)|(0<<2)|(0<<1)|(0<<0);//SPI1 :int,dis-SCK,slave,low,A,normal
	#else
	rSPCON1=(1<<5)|(0<<4)|(0<<3)|(0<<2)|(1<<1)|(0<<0);//SPI1 :int,dis-SCK,slave,low,B,normal
	#endif
	
	printf("Slave setting end...Press enter\n");
	getchar();

	rSPPRE0=i;	//if PCLK=50Mhz,SPICLK=12.5Mhz
	rSPPIN0=(0<<2)|(1<<1)|(0<<0);//dis-ENMUL,SBO,release
   #if FORMAT0_A
	rSPCON0=(1<<5)|(1<<4)|(1<<3)|(0<<2)|(0<<1)|(0<<0);//SPI0 :int,en-SCK,master,low,A,normal
   #else
	rSPCON0=(1<<5)|(1<<4)|(1<<3)|(0<<2)|(1<<1)|(0<<0);//SPI0 :int,en-SCK,master,low,B,normal
   #endif
	
	printf("nSS is asserted\n");
	Master_nSS_Con0(0);    // Activate nSS 
	rINTMSK&=~(BIT_IIC_SPI);
	rINTSUBMSK&=~(BIT_SUB_SPI0);
	rINTSUBMSK&=~(BIT_SUB_SPI1);
		
	while((endSpi1Tx==0)||(end0SpiTx==0))
		{
		//printf("#");
		if(Uart_GetKey())
			return;
		}
	
	Master_nSS_Con0(1);
	
		
   #if FORMAT0_A
	rSPCON0=(0<<5)|(0<<4)|(1<<3)|(0<<2)|(0<<1)|(0<<0);//Poll,dis-SCK,master,low,A,normal
	rSPCON1=(0<<5)|(0<<4)|(0<<3)|(0<<2)|(0<<1)|(0<<0);//Poll,dis-SCK,slave,low,A,normal
   #else
	rSPCON0=(0<<5)|(0<<4)|(1<<3)|(0<<2)|(1<<1)|(0<<0);//Poll,dis-SCK,master,low,B,normal
	rSPCON1=(0<<5)|(0<<4)|(0<<3)|(0<<2)|(1<<1)|(0<<0);//Poll,dis-SCK,slave,low,B,normal
   #endif
	
	*spi0RxStr='\0';//attach End of String(Null)
	*spi1RxStr='\0';//attach End of String(Null)
	printf("SPI0Tx Strings:%s\n",tx0Str);
	printf("SPI0Rx Strings:%s\n",rx0Str+1);//remove first dummy data

	printf("SPI1Tx Strings:%s\n",tx1Str);
	printf("SPI1Rx Strings:%s\n",rx1Str+1);//remove first dummy data

	if(strcmp((rx1Str+1),tx0Str)==0)
		printf("SPI0 test O.K !!!\n");
	if(strcmp((rx0Str+1),tx1Str)==0)
		printf("SPI1 test O.K !!!\n");
	else 
		printf("ERROR!!!\n");

  SPI_Port_Return();
}


void Test_Spi01_SM_Int(void) //SPI0: Slave Rx, SPI1:Master Tx
{
	char *rx0Str,*tx0Str;
	char *rx1Str,*tx1Str;
	int i;

       SPI_Port_Set();
	SPI0_Port_Init(0); // SPI0=Master, SPI1=Slave
	SPI1_Port_Init(1); // SPI0=Master, SPI1=Slave
	printf("[SPI0(Slave), SPI1(Master) Interrupt Rx/Tx test]\n");
	printf("Connect J29: (2-3) and CON28: (2-3)\n");

	pISR_IIC_SPI=(unsigned)Spi01_Int;
	
	end0SpiTx=0;
	endSpi1Tx=0;
	spi0TxStr="1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+|<>?:~";
	spi1TxStr="!@#$%^&*()_+|<>?:~ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
	
	spi0RxStr=(char *) SPI_BUFFER0;
	spi1RxStr=(char *) SPI_BUFFER1;
	
	tx0Str=(char *)spi0TxStr;
	rx0Str=(char *)spi0RxStr;
	tx1Str=(char *)spi1TxStr;
	rx1Str=(char *)spi1RxStr;

	i = ClockSelection();
	rSPPRE0=i;	//if PCLK=50Mhz,SPICLK=12.5Mhz
		rSPPIN0=(0<<2)|(1<<1)|(0<<0);//dis-ENMUL,SBO,release
   #if FORMAT0_A
		rSPCON0=(1<<5)|(0<<4)|(0<<3)|(0<<2)|(0<<1)|(0<<0);//SPI0 :int,dis-SCK,slave,low,A,normal
   #else
		rSPCON0=(1<<5)|(0<<4)|(0<<3)|(0<<2)|(1<<1)|(0<<0);//SPI0 :int,dis-SCK,slave,low,B,normal
   #endif
   
   printf("Slave setting end...Press enter\n");
   getchar();
   
	rSPPRE1=i;	//if PCLK=50Mhz,SPICLK=12.5Mhz
	rSPPIN1=(0<<2)|(1<<1)|(0<<0);//dis-ENMUL,SBO,release
	
	#if FORMAT1_A
	rSPCON1=(1<<5)|(1<<4)|(1<<3)|(0<<2)|(0<<1)|(0<<0);//SPI1 :int,en-SCK,master,low,A,normal
	#else
	rSPCON1=(1<<5)|(1<<4)|(1<<3)|(0<<2)|(1<<1)|(0<<0);//SPI1 :int,en-SCK,master,low,B,normal
	#endif
	
	
	printf("nSS is asserted\n");
	Master_nSS_Con1(0);  // Activate nSS 
	rINTMSK&=~(BIT_IIC_SPI);
	rINTSUBMSK&=~(BIT_SUB_SPI0);
	rINTSUBMSK&=~(BIT_SUB_SPI1);
		
	while((endSpi1Tx==0)||(end0SpiTx==0))
		{
		//printf("#");
		if(Uart_GetKey())
			return;
		}
	
	Master_nSS_Con1(1);
	
	
   #if FORMAT0_A
	rSPCON0=(0<<5)|(0<<4)|(1<<3)|(0<<2)|(0<<1)|(0<<0);//Poll,dis-SCK,master,low,A,normal
	rSPCON1=(0<<5)|(0<<4)|(0<<3)|(0<<2)|(0<<1)|(0<<0);//Poll,dis-SCK,slave,low,A,normal
   #else
	rSPCON0=(0<<5)|(0<<4)|(1<<3)|(0<<2)|(1<<1)|(0<<0);//Poll,dis-SCK,master,low,B,normal
	rSPCON1=(0<<5)|(0<<4)|(0<<3)|(0<<2)|(1<<1)|(0<<0);//Poll,dis-SCK,slave,low,B,normal
   #endif
	
	*spi0RxStr='\0';//attach End of String(Null)
	*spi1RxStr='\0';//attach End of String(Null)
	printf("SPI0Tx Strings:%s\n",tx0Str);
	printf("SPI0Rx Strings:%s\n",rx0Str+1);//remove first dummy data

	printf("SPI1Tx Strings:%s\n",tx1Str);
	printf("SPI1Rx Strings:%s\n",rx1Str+1);//remove first dummy data

	if(strcmp((rx1Str+1),tx0Str)==0)
		printf("SPI0 test O.K !!!\n");
	if(strcmp((rx0Str+1),tx1Str)==0)
		printf("SPI1 test O.K !!!\n");
	else 
		printf("ERROR!!!\n");

	SPI_Port_Return();
}


void Test_SPI01_MS_DMA(void)// SPI0=Master, SPI1=Slave
{
	int i;

    SPI_Port_Set();
	   
	SPI0_Port_Init(1); // SPI0=Master 
	SPI1_Port_Init(0); // SPI1=Slave
	Master_nSS_Con0(1);
	printf("[SPI0(Master Tx), SPI1(Slave Rx) DMA test]\n");
	printf("Connect J29: (2-3) and CON28: (2-3)\n");
	
	printf("Slave setting press enter\n");
	
	i = ClockSelection();
	rSPPRE1=i;	//if PCLK=50Mhz,SPICLK=25Mhz
    #if FORMAT1_A
		rSPCON1=(2<<5)|(0<<4)|(0<<3)|(0<<2)|(0<<1)|(1<<0);//DMA1,dis-SCK,slave,low,A,TAGD
    #else
		rSPCON1=(2<<5)|(0<<4)|(0<<3)|(1<<2)|(1<<1)|(1<<0);//DMA1,dis-SCK,slave,low,B,TAGD
	#endif
       rSPPIN1=(0<<2)|(1<<1)|(0<<0);//dis-ENMUL,SBO,release
	
	Test_Spi1_S_Rx_DMA3_Set();//Slave DMA3setting

	printf("1.Check TC1=%x,	TC3=%x\n",rDSTAT1,rDSTAT3);	
	printf("Slave setting end...Press enter\n");
	getchar();
	
	rSPPRE0=i;	//
    #if FORMAT0_A
	rSPCON0=(2<<5)|(1<<4)|(1<<3)|(0<<2)|(0<<1)|(1<<0);//DMA1,en-SCK,master,low,A,normal
    #else
	rSPCON0=(2<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<1)|(1<<0);//DMA1,en-SCK,master,low,B,normal    
    #endif
    rSPPIN0=(0<<2)|(1<<1)|(0<<0);//dis-ENMUL,SBO,release
	//printf("1. TC1=%x,  TC3=%x\n",rDSTAT1,rDSTAT3);

	Master_nSS_Con0(0); // Activate nSS 

	Test_Spi0_M_Tx_DMA1_Set();//Master DMA1 setting

	printf("2.Check TC1=%x,	TC3=%x\n",rDSTAT1,rDSTAT3); 

	printf("nSS asserted...\n");
	 
    while((tx_dma1Done==0)||(rx_dma3Done==0))
		{
    	if(Uart_GetKey())
			break;
		}
	printf("Check TC1=%x,  TC3=%x\n",rDSTAT1,rDSTAT3);

	while(!(rSPSTA0&0x1)||!(rSPSTA1&0x1))// Tx/Rx is done
		{
    	if(Uart_GetKey())
			break;
    	}
	
	Master_nSS_Con0(1);
	
	printf("tx_dma1Done=%x, rx_dma3Done=%x\n",tx_dma1Done,rx_dma3Done);
		
    #if FORMAT1_A
	rSPCON0=(0<<5)|(0<<4)|(0<<3)|(1<<2)|(0<<1)|(0<<0);//poll,dis-SCK,slave,low,A,normal
	rSPCON1=(0<<5)|(0<<4)|(0<<3)|(1<<2)|(0<<1)|(0<<0);//poll,dis-SCK,slave,low,A,normal
	#else
	rSPCON0=(0<<5)|(0<<4)|(0<<3)|(1<<2)|(1<<1)|(0<<0);//poll,dis-SCK,slave,low,B,normal
	rSPCON1=(0<<5)|(0<<4)|(0<<3)|(1<<2)|(1<<1)|(0<<0);//poll,dis-SCK,slave,low,B,normal
    #endif
	
    printf("\nDMA1 data\n");
    for(i=0; i<spitx_count; i++)
		printf("0x%02x,",*tx0_ptr++);

	//SPI_Port_Return();	
	
    printf("\n\nDMA3 data\n");
    *(rx1_ptr+spirx_count)=rSPRDAT1;
    rx1_ptr=(unsigned char *) DMA3_RxBUFFER1;
    for(i=1;i<(spirx_count+1);i++)		
		printf("0x%02x,",*(rx1_ptr+i));


    SPI_Port_Return();	

}
///////////////////////////////////////////////////////////////////////////

void Test_SPI01_MS_DMA_RxTx(void)// SPI0=Master(Rx), SPI1=Slave(Tx)
{
	int i;

        SPI_Port_Set();
	SPI0_Port_Init(1); // SPI0=Master, SPI1=Slave
	SPI1_Port_Init(0);
	Master_nSS_Con0(1);
	
	printf("[SPI0(Slave Rx), SPI1(Master Tx) DMA test]\n");
	printf("Connect J29: (2-3) and CON28: (2-3)\n");

	printf("Slave setting press enter\n");
/*
	printf("Pclk = %d\n", Pclk);
//	SetMPLL( 37, 1, 0); //180MHz
	SetMPLL( 32, 1, 0); //160MHz
	Calc_Clock(0);
	Uart_Init(Pclk,115200);
	printf("Pclk = %d\n", Pclk);
*/	
	tx_dma3Done=0;
	rx_dma1Done=0;

    tx1_ptr=(unsigned char *) DMA3_TxBUFFER1;
    for(i=0;i<spitx_count;i++)
    	if ( (i%2)==1 ) *(tx1_ptr+i) = 0x23;
    	else *(tx1_ptr+i) = 0x71;
//		*(tx1_ptr+i)=i+0x81; // Zero Initialize
	
    pISR_DMA_SBUS= (unsigned)DmaTx_Int;
	rINTSUBMSK&=~(BIT_SUB_DMA3);
	rINTMSK&=~(BIT_DMA_SBUS);	
	
	i = ClockSelection();
	rSPPRE1=i;	//if PCLK=50Mhz,SPICLK=25Mhz
    #if FORMAT1_A
		rSPCON1=(2<<5)|(0<<4)|(0<<3)|(1<<2)|(0<<1)|(1<<0);//DMA1,dis-SCK,slave,low,A,TAGD
    #else
		rSPCON1=(2<<5)|(0<<4)|(0<<3)|(1<<2)|(1<<1)|(1<<0);//DMA1,dis-SCK,slave,low,B,TAGD
	#endif
       rSPPIN1=(0<<2)|(1<<1)|(0<<0);//dis-ENMUL,SBO,release
	
	//Test_Spi1_S_Tx_DMA3_Set();//Slave DMA3setting
	
	rDISRC3=(unsigned)tx1_ptr;  //Address of Memory
	rDISRCC3=(0<<1)|(0); 	   //AHB(Memory), inc
	rDIDST3=(unsigned)0x44500030;//Address of SPTDAT Register
	rDIDSTC3=(1<<1)|(1); 	   //APB(SPI), fix
	rDCON3=(1<<31)|(0<<30)|(1<<29)|(0<<28)|(0<<27)|(1<<22)|(0<<20)|(spirx_count);
       rDMAREQSEL3=(1<<1)|(1<<0);
	rDMASKTRIG3=(0<<2)|(1<<1)|(0);	 //run, DMA1 channel on, no-sw trigger 
	

	printf("Slave setting end...Press enter\n");
	getchar();
			
	Test_Spi0_M_Rx_DMA1_Set();//Master DMA1 setting

	rSPPRE0=i;	//
	#if FORMAT0_A
	rSPCON0=(2<<5)|(1<<4)|(1<<3)|(1<<2)|(0<<1)|(1<<0);//DMA1,en-SCK,master,low,A,normal
	#else
	rSPCON0=(2<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<1)|(1<<0);//DMA1,en-SCK,master,low,B,normal    
	#endif
    rSPPIN0=(0<<2)|(1<<1)|(0<<0);//dis-ENMUL,SBO,release
	//printf("1. TC1=%x,  TC3=%x\n",rDSTAT1,rDSTAT3);

	Master_nSS_Con0(0); // Activate nSS	
    //rx0_ptr=(unsigned char *) DMA1_RxBUFFER0;
	
	rDISRC1=(unsigned)0x44500014;//Address of SPRDAT Register
    rDISRCC1=(1<<1)|(1);		//APB(SPI), fix
    rDIDST1=(unsigned)rx0_ptr;	//Address of Memory
    rDIDSTC1=(0<<1)|(0);		//AHB(Memory), inc
    rDCON1=(1<<31)|(0<<30)|(1<<29)|(0<<28)|(0<<27)|(1<<22)|(0<<20)|(spitx_count);
    rDMAREQSEL1=(0<<1)|(1<<0);
    rDMASKTRIG1=(0<<2)|(1<<1)|(0);    //run, DMA1 channel on, no-sw trigger 
	
//	printf("#########\n");
	 
    while((rx_dma1Done==0)||(tx_dma3Done==0))
		{
    	if(Uart_GetKey())
			break;
		}
	printf("Check TC1=%x,  TC3=%x\n",rDSTAT1,rDSTAT3);

	while(!(rSPSTA0&0x1)||!(rSPSTA1&0x1))// Tx/Rx is done
		{
    	if(Uart_GetKey())
			break;
    	}
	
	Master_nSS_Con0(1);

	printf("tx_dma3Done=%x, rx_dma1Done=%x\n",tx_dma3Done,rx_dma1Done);
		
    #if FORMAT1_A
	rSPCON0=(0<<5)|(0<<4)|(0<<3)|(1<<2)|(0<<1)|(0<<0);//poll,dis-SCK,slave,low,A,normal
	rSPCON1=(0<<5)|(0<<4)|(0<<3)|(1<<2)|(0<<1)|(0<<0);//poll,dis-SCK,slave,low,A,normal
	#else
	rSPCON0=(0<<5)|(0<<4)|(0<<3)|(1<<2)|(1<<1)|(0<<0);//poll,dis-SCK,slave,low,B,normal
	rSPCON1=(0<<5)|(0<<4)|(0<<3)|(1<<2)|(1<<1)|(0<<0);//poll,dis-SCK,slave,low,B,normal
    #endif

    printf("\nDMA1 data\n");
    for(i=0; i<spitx_count; i++)
		printf("0x%02x,",*tx1_ptr++);

    printf("\n\nDMA3 data\n");
    *(rx0_ptr+spirx_count)=rSPRDAT0;
    rx0_ptr=(unsigned char *) DMA1_RxBUFFER0;
    for(i=1;i<(spirx_count+1);i++)		

⌨️ 快捷键说明

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