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

📄 vikingii_ulpd.c

📁 OMAP1030 处理器的ARM 侧硬件测试代码 OMAP1030 是TI的双核处理器
💻 C
📖 第 1 页 / 共 2 页
字号:

 /******************************************************************************\
*           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 + -