📄 vikingii_ulpd.c
字号:
/******************************************************************************\
* Copyright (C) 2005 COMMIT Incorporated.
* All Rights Reserved
*------------------------------------------------------------------------------
* Project................Viking ULPD Test
* MODULE NAME............Viking ULPD Test for Neptune Test
* Confidential Level.....Test
* FILENAME...............Ulpd.c
* Department.............HW
-------------------------------------------------------------------------------
* HISTORY:
*
\******************************************************************************/
#include "UART_IrDA.h"
#include "vikingII.h"
#include "GPIO.h"
#include "GPIO_w.h"
#include "interrupt_mapping.h"
static volatile unsigned int it_timer_flag=0;
static volatile unsigned int frame_cnt;
unsigned short gauging_done = 0;
/******************************************************************/
/*
/*for TD-SCDMA_ULPD, if EMIF write to SLEEP_CONTROL to'1' ,
then TD-SCDMA ULPD will activate sleep procedure , and disable
TD-SCDMA_ULPD's VTCXO_EN and SLICER_EN and CLK13M_en
and PLL_EN and CLK20M_en.
/******************************************************************/
void VIKING_ULPD_Sleep_enable()
{
gpio_dataout_high(0, 17); //then TD-SCDMA ULPD will activate sleep procedure
//Please make sure the ASY_IRQ signal should be high level;
//step1: configure SETUP REGISTERS
VIKING_ULPD_SETUP_FRAME_REG = 0x0;
VIKING_ULPD_SETUP_VTCXO_REG = 0x42;
VIKING_ULPD_SETUP_SLICER_REG = 0x42;
VIKING_ULPD_SETUP_CLK13_REG = 0x42;
VIKING_ULPD_SETUP_PLL_REG = 0x7;
VIKING_ULPD_SETUP_CLK20_REG = 0x11;
//step2: command viking to enter sleep mode
VIKING_ULPD_SLEEP_CTRL_REG |= 0x1; //write to SLEEP_CONTROL to'1' ,
//then TD-SCDMA ULPD will activate sleep procedure
}
/******************************************************************/
/*
/SET GPIO_17 low level to wakeup VIKINGII.
/******************************************************************/
void VIKING_ULPD_Sleep_disable()
{
gpio_dataout_low(0, 17); //then TD-SCDMA ULPD will activate sleep procedure
//VIKING_PRCM_ULPD_WAKEUP_REG = 0x0; If you want to asynchronous wakeup ULPD thru this register, you must write 16'h0000 to this register.
}
void VIKING_ULPD_PLL()
{
VIKING_PRCM_PLL_CTRL_REG |= 0x2;
VIKING_PRCM_PLL_MN_REG = 0x28; // M=1 N=8
}
UWORD32 CALC_32KHZ_COUNTER(void)
{
UWORD32 REG_MSB, REG_LSB;
UWORD32 start_32k_counter;
//calculate 32kHz counter
REG_MSB = VIKING_ULPD_COUNTER_32_MSB_REG;
REG_LSB = VIKING_ULPD_COUNTER_32_LSB_REG;
start_32k_counter = (UWORD32)(REG_MSB<<16) + REG_LSB;
return start_32k_counter;
}
UWORD32 CALC_HI_FREQ_COUNTER(void)
{
UWORD32 REG_MSB, REG_LSB;
UWORD32 start_hi_counter;
//calculate high freqency counter
REG_MSB = VIKING_ULPD_COUNTER_HI_FREQ_MSB_REG;
REG_LSB = VIKING_ULPD_COUNTER_HI_FREQ_LSB_REG;
start_hi_counter = (REG_MSB<<16) + REG_LSB;
return start_hi_counter;
}
UWORD32 CALC_NETWORK_COUNTER(void)
{
UWORD32 REG_MSB, REG_LSB;
UWORD32 start_network_counter;
//calculate network counter
REG_MSB = VIKING_ULPD_SIXTEENTH_START_REG_HIGH;
REG_LSB = VIKING_ULPD_SIXTEENTH_START_REG_LOW;
start_network_counter= (UWORD32)(REG_MSB<<16) + REG_LSB;
return start_network_counter;
}
void VIKING_GAUGING_HI(void)
{
unsigned int i;
UWORD32 start_32k_counter, start_hi_counter,start_network_counter,end_32k_counter,end_hi_counter,end_network_counter;
UWORD32 inc_reg,frac_reg;
// VIKING_init();
VIKING_ULPD_INC_FRAC_LSB_REG = 0x0;
VIKING_ULPD_INC_FRAC_MSB_REG = 0x0; // clear counter
#if 0
UART_Printf(UART2,"INC_SIXTEENTH_REG = %d\n", VIKING_ULPD_INC_SIXTEENTH_REG);
UART_Printf(UART2,"SIXTEENTH_START_LSB = %d\n",VIKING_ULPD_SIXTEENTH_START_REG_LOW);
UART_Printf(UART2,"SIXTEENTH_START_MSB = %d\n",VIKING_ULPD_SIXTEENTH_START_REG_HIGH);
UART_Printf(UART2,"SIXTEENTH_STOP_LSB = %d\n",VIKING_ULPD_SIXTEENTH_STOP_REG_LOW);
UART_Printf(UART2,"SIXTEENTH_STOP_MSB = %d\n",VIKING_ULPD_SIXTEENTH_STOP_REG_HIGH);
UART_Printf(UART2,"COUNTER_32_LSB = %d\n",VIKING_ULPD_COUNTER_32_LSB_REG);
UART_Printf(UART2,"COUNTER_32_MSB = %d\n",VIKING_ULPD_COUNTER_32_MSB_REG);
UART_Printf(UART2,"COUNTER_HI_FREQ_LSB = %d\n",VIKING_ULPD_COUNTER_HI_FREQ_LSB_REG);
UART_Printf(UART2,"COUNTER_HI_FREQ_MSB = %d\n",VIKING_ULPD_COUNTER_HI_FREQ_MSB_REG);
#endif
start_32k_counter = CALC_32KHZ_COUNTER();
start_hi_counter = CALC_HI_FREQ_COUNTER();
start_network_counter = CALC_NETWORK_COUNTER();
frame_cnt = 0;
//interrupt setup
VIKNGII_GPIO_setup(); //GPIO init
VIKING_INTH_CTRL_DSP_REG |= 0x1; for(i=0;i<10000;i++);
VIKING_INTH_MIR_MCU_REG = 0xFFFF; for(i=0;i<10000;i++);
VIKING_INTH_MIR_DSP_REG = 0xFFFF; for(i=0;i<10000;i++);
VIKING_ULPD_GAUGING_CTRL_REG = 0x2; //select hi frequency gauging (20MHz)
VIKING_ULPD_GAUGING_CTRL_REG = 0x3; //start gauging
VIKING_INTH_MIR_MCU_REG = 0xff5f; //enable int_frame_ and int_gauging_done
while(!gauging_done); //wait for gauging done
VIKING_INTH_MIR_MCU_REG = 0xffff; //disable all int
gauging_done = 0;
UART_Printf(UART2,"Gauging Done!\n");
UART_Printf(UART2,"Frame_count = %d\n",frame_cnt);
end_32k_counter = CALC_32KHZ_COUNTER();
end_hi_counter = CALC_HI_FREQ_COUNTER();
end_network_counter = CALC_NETWORK_COUNTER();
UART_Printf(UART2,"END_32K_COUNTER = %d\n",end_32k_counter);
UART_Printf(UART2,"END_HI_COUNTER = %d\n",end_hi_counter);
UART_Printf(UART2,"END_NETWORK_COUNTER = %d\n",end_network_counter);
switch((VIKING_ULPD_GAUGING_STATUS_REG & 0x06)>>1)
{
case 1:
UART_Printf(UART2,"High frequency counter overflow!\n");
break;
case 2:
UART_Printf(UART2,"32kHz counter overflow!\n");
break;
case 3:
UART_Printf(UART2,"Counter Overflow!\n");
break;
case 0:
{
inc_reg = end_hi_counter / end_32k_counter;
frac_reg =( (end_hi_counter % end_32k_counter) << 16) % end_32k_counter;
UART_Printf(UART2,"inc_reg = %d\n\r",inc_reg);
UART_Printf(UART2,"frac_reg = %d\n\r",frac_reg);
UART_Printf(UART2,"inc_frac_lsb = %d.\n\r", frac_reg%65536);
UART_Printf(UART2,"inc_frac_msb = %d.\n\r", frac_reg/65536);
UART_Printf(UART2,"inc_sixteenth = %d.\n\r", inc_reg);
// update inc_frac and inc_sixteenth registers
VIKING_ULPD_INC_FRAC_LSB_REG = ( frac_reg % 65536 );
VIKING_ULPD_INC_FRAC_MSB_REG = (frac_reg / 65536 );
VIKING_ULPD_INC_SIXTEENTH_REG = inc_reg;
break;
}
}
}
void VIKING_GAUGING_NETWORK()
{
unsigned int i;
UWORD32 start_32k_counter, start_hi_counter,start_network_counter,end_32k_counter,end_hi_counter,end_network_counter;
UWORD32 inc_reg,frac_reg;
// VIKING_init();
VIKING_ULPD_INC_FRAC_LSB_REG = 0x0;
VIKING_ULPD_INC_FRAC_MSB_REG = 0x0; // clear counter
#if 0
UART_Printf(UART2,"INC_SIXTEENTH_REG = %d\n", VIKING_ULPD_INC_SIXTEENTH_REG);
UART_Printf(UART2,"SIXTEENTH_START_LSB = %d\n",VIKING_ULPD_SIXTEENTH_START_REG_LOW);
UART_Printf(UART2,"SIXTEENTH_START_MSB = %d\n",VIKING_ULPD_SIXTEENTH_START_REG_HIGH);
UART_Printf(UART2,"SIXTEENTH_STOP_LSB = %d\n",VIKING_ULPD_SIXTEENTH_STOP_REG_LOW);
UART_Printf(UART2,"SIXTEENTH_STOP_MSB = %d\n",VIKING_ULPD_SIXTEENTH_STOP_REG_HIGH);
UART_Printf(UART2,"COUNTER_32_LSB = %d\n",VIKING_ULPD_COUNTER_32_LSB_REG);
UART_Printf(UART2,"COUNTER_32_MSB = %d\n",VIKING_ULPD_COUNTER_32_MSB_REG);
UART_Printf(UART2,"COUNTER_HI_FREQ_LSB = %d\n",VIKING_ULPD_COUNTER_HI_FREQ_LSB_REG);
UART_Printf(UART2,"COUNTER_HI_FREQ_MSB = %d\n",VIKING_ULPD_COUNTER_HI_FREQ_MSB_REG);
#endif
start_32k_counter = CALC_32KHZ_COUNTER();
start_hi_counter = CALC_HI_FREQ_COUNTER();
start_network_counter = CALC_NETWORK_COUNTER();
frame_cnt = 0;
//interrupt setup
VIKNGII_GPIO_setup(); //GPIO init
VIKING_INTH_CTRL_DSP_REG |= 0x1; for(i=0;i<10000;i++);
VIKING_INTH_MIR_MCU_REG = 0xFFFF; for(i=0;i<10000;i++);
VIKING_INTH_MIR_DSP_REG = 0xFFFF; for(i=0;i<10000;i++);
VIKING_ULPD_GAUGING_CTRL_REG = 0x0; //select TD_SCDMA net frequency gauging
VIKING_ULPD_GAUGING_CTRL_REG = 0x1; //start gauging
VIKING_INTH_MIR_MCU_REG = 0xff5f; //enable int_frame_ and int_gauging_done
while(!gauging_done); //wait for gauging done
VIKING_INTH_MIR_MCU_REG = 0xffff; //disable all int
gauging_done = 0;
UART_Printf(UART2,"Gauging Done!\n");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -