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

📄 vikingii.c

📁 OMAP1030 处理器的ARM 侧硬件测试代码 OMAP1030 是TI的双核处理器
💻 C
字号:
#include "GPIO.h"
#include "GPIO_w.h"
#include "UART_IrDA.h"
#include "vikingII.h"
#include "interrupt_mapping.h"
#include "boottable.h"

int D2N_M_Flag;
int result_return;

void VikingII_test_menu()
{
	int inputSelect = 1, i;
	D2N_M_Flag = 0;
	GPIO_ConfigureInterruptEnable(GPIO_32, FALLING_EDGE_DETECT,vikingII_isr_hander);   //GPIO32 as interrupt from VIKINGII DSP 
//	while(1);
 	while(inputSelect)
	{
	  UART_Printf(UART2, "\r\n");
	  UART_Printf(UART2, "========================================== \r\n");
	  UART_Printf(UART2, "    VIKINGII TEST MENU  \r\n");
	  UART_Printf(UART2, "========================================== \r\n");
	  UART_Printf(UART2,"0 : Return upper menu \n");
	  UART_Printf(UART2,"1 : Initialize VIKING\n");
      UART_Printf(UART2,"2 : Configure INTH\n");
	  UART_Printf(UART2,"3 : USIM Controler Test\n");
	  UART_Printf(UART2,"4 : Test TPU/TSP\n");
	  UART_Printf(UART2,"6 : Tx BcBir Bybass\n");		
	  UART_Printf(UART2,"7 : Tx BcBir\n");	
	  UART_Printf(UART2,"8 : Cs1\n");
	  UART_Printf(UART2,"9 : Cs2\n");
	  UART_Printf(UART2,"10: FS\n");
	  UART_Printf(UART2,"11: ACTi set/clear\n");
	  UART_Printf(UART2,"12: VIKING_DSP BOOT\n");
	  UART_Printf(UART2,"13: DPRAM TEST\n");
      UART_Printf(UART2,"------------------------------------------\n\r");
  	  UART_Printf(UART2,"Please Enter your choice: \n ");   
	  inputSelect = UART_GetNum(UART2);
      UART_Printf(UART2,"\n\r");
    
        switch (inputSelect)
    	{     		
    		case 0:
    		{
    		  	break;
    		}	
    		case 1:
    		{  
 				VIKINGII_ALL_INIT();		


			  	break;
    		}   
            case 2:
			{
				VIKING_INTH_Config();
				break;
			}
			case 3:
			{
				VIKING_USIM_TEST();
				break;			
			}
			case 4:
			{
				VIKINGII_TPU_TSP_test();
				break;			
			}
			case 6:
			{
				
				VIKING_N2D_MAIBOX_REG = 0x0006;
				while(!D2N_M_Flag);
				D2N_M_Flag = 0;
				if(result_return!=0x0006)
					UART_Printf(UART2, "Tx BcBir Bybass error \r\n");
				else
					UART_Printf(UART2, "Tx BcBir Bybass OK \r\n");
				result_return = 0x0;
				break;			
			}
			case 7:
			{
				VIKING_N2D_MAIBOX_REG = 0x0007;
				while(!D2N_M_Flag);
				D2N_M_Flag = 0;
				if(result_return!=0x0007)
					UART_Printf(UART2, "Tx BcBir error \r\n");
				else
					UART_Printf(UART2, "Tx BcBir OK \r\n");
				result_return = 0x0;
				break;			
			}
			case 8:
			{
				VIKING_N2D_MAIBOX_REG = 0x0008;
				while(!D2N_M_Flag);
				D2N_M_Flag = 0;
				if(result_return!=0x0008)
					UART_Printf(UART2, "Cs1 error \r\n");
				else
					UART_Printf(UART2, "Cs1 OK \r\n");
				result_return = 0x0;


				break;			
			}
			case 9:
			{
				VIKING_N2D_MAIBOX_REG = 0x0009;
				while(!D2N_M_Flag);
				D2N_M_Flag = 0;
				if(result_return!=0x0009)
					UART_Printf(UART2, "Cs2 error \r\n");
				else
					UART_Printf(UART2, "Cs2 OK \r\n");

				result_return = 0x0;


				break;			
			}
			case 10:
			{
				VIKING_N2D_MAIBOX_REG = 0x000A;
				while(!D2N_M_Flag);
				D2N_M_Flag = 0;
				if(result_return!=0x000A)
					UART_Printf(UART2, "FS error \r\n");
				else
					UART_Printf(UART2, "FS OK \r\n");

				result_return = 0x0;

				break;			
			}
			case 11:
			{
				ACTi_Set_Clear();
				break;			
			}
			case 12:
			{
				VIKINGII_BOOT();
				break;			
			}
			case 13:
			{
				DPRAM_TEST();
				break;			
			}

			default:
			break;
        }
	}


}

void VIKING_Init()
{
	VIKING_N2D_MAIBOX_REG = 0x0001;
	while(!D2N_M_Flag);
	D2N_M_Flag = 0;
	if(result_return!=0x0001)
		UART_Printf(UART2, "VIKINGII initialize error \r\n");
	else
		UART_Printf(UART2, "VIKINGII initialize OK \r\n");
	result_return = 0x0;

}

void VIKINGII_TPU_TSP_test()
{
	int  volt;
  	int  dacN;
	int  TSPACT;
	UWORD16  data[10];

     UART_Printf(UART2,"Please Enter the number:(1:afc;  2:apc1;  3:agc;  4:apc2(H); 5:apc2(L))\n\r ");  
	 dacN = UART_GetNum(UART2);
	 data[0] = dacN; 
     UART_Printf(UART2,"\n\r");

    if(dacN<4)
	{
	UART_Printf(UART2,"Please Enter the value(100-2560 mV) of DAC(like:1200): \n\r "); 
	 volt = UART_GetNum(UART2); 
	 UART_Printf(UART2,"\n\r");
	}
	else
	{
	    volt=0000;
	}
	data[1] = volt;	
	Write_DPRAM(data, 2);
	VIKING_N2D_MAIBOX_REG = 0x0002;
	while(!D2N_M_Flag);
	D2N_M_Flag = 0;
	if(result_return!=0xaaaa)
		UART_Printf(UART2, "VIKINGII_TPU_TSP_test fail! \r\n");
	else
		UART_Printf(UART2, "VIKINGII_TPU_TSP_test success! \r\n");
	result_return = 0x0;
}


void Write_DPRAM(UWORD16 *data, int num)
{
	UWORD16 * wp; 
	int i;
	wp = (UWORD16 *)VIKING_DPRAM_BASE_ADDR;
	for(i=0;i<num;i++)
	{
		*wp++=*data++;
	}

}

void ACTi_Set_Clear()
{
	UWORD16  data[10];

     UART_Printf(UART2,"Please Enter the number of ACTi(0~11)\n\r ");  
	 data[0] = UART_GetNum(UART2);
     UART_Printf(UART2,"\n\r");
     UART_Printf(UART2,"Please Enter the level of DAC(like:1200):0-Low Level, 1-Hign Level \n\r "); 
	 data[1] = UART_GetNum(UART2); 
	 UART_Printf(UART2,"\n\r");
     Write_DPRAM(data, 2);
	 VIKING_N2D_MAIBOX_REG = 0x000B;
	 while(!D2N_M_Flag);
	 D2N_M_Flag = 0;
	if(result_return!=0x000B)
		UART_Printf(UART2, "ACTi_set_clear fail! \r\n");
	else
		UART_Printf(UART2, "ACTi_set_clear success! \r\n");
	result_return = 0x0;

}

void VIKINGII_INIT()
{

	int i;
	for(i=0;i<1000;i++);
	VIKING_PRCM_RST_UMA_REG = 0x0000;  //RST_UMA  rst_td_accellerator
	for(i=0;i<1000;i++);
	VIKING_PRCM_RST_UMA_REG = 0x0003;  //RST_UMA  rst_td_accellerator


	VIKING_PRCM_CLK104K_ENA_REG = 0x0001; // CLK104K_ENA


									   //TD-accellerator reset signal
	VIKING_PRCM_BOOT_MODE_REG = 0x0000;  //GPIO 9~12 set to low
	VIKING_PRCM_BOOT_MODE_REG = 0x000f;  //GPIO 9~12 set to high

	VIKING_PRCM_DPRAM_SW_RST_REG = 0x0000;   //DPRAM_SW_RST
	for(i=0;i<1000;i++);
	VIKING_PRCM_DPRAM_SW_RST_REG = 0x0001;   //DPRAM_SW_RST releaserelease
	for(i=0;i<1000;i++);
	VIKING_PRCM_RST_UMA_REG = 0x0001;  //RST_UMA release DSP reset

	for(i=0;i<1000;i++);
	VIKING_PRCM_RST_UMA_REG &= ~0x0002;   //DPRAM_SW_RST
	for(i=0;i<1000;i++);
	VIKING_PRCM_RST_UMA_REG |= 0x0002;   //DPRAM_SW_RST releaserelease
	for(i=0;i<1000;i++);
	VIKING_SW_CLK_EN_REG |= 0x7;
	VIKING_SW_RST_EN_REG |= 0x7;

}

void VIKINGII_ALL_INIT()
{

	int i;
/*	VIKING_PRCM_CLK104K_ENA_REG = 0x0001; // CLK104K_ENA
//	VIKING_PRCM_RST_UMA_REG = 0x0003;  //RST_UMA  rst_td_accellerator
									   //TD-accellerator reset signal
	VIKING_PRCM_BOOT_MODE_REG = 0x0000;  //GPIO 9~12 set to low
	VIKING_PRCM_BOOT_MODE_REG = 0x000f;  //GPIO 9~12 set to high

	VIKING_PRCM_DPRAM_SW_RST_REG = 0x0000;   //DPRAM_SW_RST
	for(i=0;i<1000;i++);
	VIKING_PRCM_DPRAM_SW_RST_REG = 0x0001;   //DPRAM_SW_RST releaserelease
	for(i=0;i<1000;i++);
	VIKING_PRCM_RST_UMA_REG = 0x0001;  //RST_UMA release DSP reset
*/
	VIKING_Init();


}

void Neptune_Access_Accelerator()
{
	VIKING_PRCM_PSCON_CTRL_REG |= 0x04;


}

void DPRAM_TEST()
{

	int i,temp;
	unsigned short * dpram_addr = (unsigned short *)0x08014000;
/*	while(1)
    {
       *(unsigned short *)0x08014000 = 0xffff;
	}*/
	temp = sizeof(Dsp_bootload_table)/2;
	i = 0;
	while(1)
	{
	//	for(i=0;i<temp;i++)
	    {

	       dpram_addr[i] = Dsp_bootload_table[i];
	    }
	}
}

void VIKINGII_BOOT()
{

	int i,temp;
	unsigned short * dpram_addr = (unsigned short *)0x08014000;
	VIKING_PRCM_RST_UMA_REG &= ~0x0001;   //RST_UMA reset DSP
	for(i=0;i<1000;i++);

	temp=VIKING_D2N_MAIBOX_REG;
	for(i=0;i<sizeof(Dsp_bootload_table)/2;i++)
    {
       dpram_addr[i] = Dsp_bootload_table[i];
    }

	VIKING_PRCM_RST_UMA_REG |= 0x0001;  //RST_UMA release DSP reset

	while(!D2N_M_Flag);
	D2N_M_Flag = 0;
	for(i=0;i<1000;i++);
	if(result_return!=0xaaaa)
		UART_Printf(UART2, "Viking DSP boot fail! \r\n");
	else
		UART_Printf(UART2, "Viking DSP have booting. \r\n");
	result_return = 0x0;
}
/*
void VIKINGII_COPY_ALL()
{

	int i,temp;
	unsigned short * dpram_addr = (unsigned short *)0x08014000;

	temp=VIKING_D2N_MAIBOX_REG;
	section = (sizeof(Dsp_code_table)/2)/(16*1024);  //取整
	num = (sizeof(Dsp_code_table)/2)%(16*1024);      //取余
	if(num == 0)
	{
		for(i=0;i<section;i++)
		{
			for(j=0;j<(16*1024);i++)
		    {
		       dpram_addr[j] = Dsp_bootload_table[j+i*16*1024];
		    }
			VIKING_N2D_MAIBOX_REG = 0x000D;
			while(!D2N_M_Flag);
			if(result_return!=0xbbbb)    
				UART_Printf(UART2, "Section [%d] copy fail! \r\n",j);
			else
				UART_Printf(UART2, "Section [%d] copy success. \r\n",j);
			result_return = 0x0;
			D2N_M_Flag = 0;
		}
		VIKING_N2D_MAIBOX_REG = 0x000E;
		while(!D2N_M_Flag);
		if(result_return!=0xcccc)    
			UART_Printf(UART2, "Whole copy fail! \r\n");
		else
			UART_Printf(UART2, "Whole copy success. \r\n");
		result_return = 0x0;
		D2N_M_Flag = 0;

	}
	else
	{
		for(i=0;i<section-1;i++)
		{
			for(j=0;j<(16*1024);i++)
		    {
		       dpram_addr[j] = Dsp_bootload_table[j+i*16*1024];
		    }
			VIKING_N2D_MAIBOX_REG = 0x000D;
			while(!D2N_M_Flag);
			if(result_return!=0xbbbb)    
				UART_Printf(UART2, "Section [%d] copy fail! \r\n",j);
			else
				UART_Printf(UART2, "Section [%d] copy success. \r\n",j);
			result_return = 0x0;

			D2N_M_Flag = 0;


		}
		for(j=0;j<num;j++)
		{
		    dpram_addr[j] = Dsp_bootload_table[j+i*16*1024];
		}
		VIKING_N2D_MAIBOX_REG = 0x000E;
		while(!D2N_M_Flag);
		if(result_return!=0xcccc)    
			UART_Printf(UART2, "Whole copy fail! \r\n");
		else
			UART_Printf(UART2, "Whole copy success. \r\n");
		result_return = 0x0;

		D2N_M_Flag = 0;

	}
	



	while(!D2N_M_Flag);
	D2N_M_Flag = 0;
	for(i=0;i<1000;i++);
	if(result_return!=0xbbbb)
		UART_Printf(UART2, "Viking DSP boot fail! \r\n");
	else
		UART_Printf(UART2, "Viking DSP have booting. \r\n");
	result_return = 0x0;
}

*/


int vikingII_isr_hander()
{
 	int dex1, dex2,i=0;
	D2N_M_Flag = 1;
	result_return = VIKING_D2N_MAIBOX_REG;
	i=~i;
	if(result_return == 0x1234)
	{
		UART_Printf(UART2, "Viking DSP TEST ERROR![%d] \r\n",i);
		while(1);
	}
	else

		UART_Printf(UART2, "Viking DSP TEST OK![%d] \r\n",i);

}

⌨️ 快捷键说明

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