📄 vikingii.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 + -