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

📄 vikingii_ulpd.c

📁 OMAP1030 处理器的ARM 侧硬件测试代码 OMAP1030 是TI的双核处理器
💻 C
📖 第 1 页 / 共 2 页
字号:
  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_network_counter / end_32k_counter;
                frac_reg =( (end_network_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 ULPD_IT_TIMER_irqHandler()
{
 	//UART_Printf(UART2,"Timer interrupt. Do CS1 \n"); 
 	//CS_MaximMode(1); //do CS1
      
   	if(GPIO_GetInterruptStatus(GPIO_32))
   	{
   	  	GPIO_AcknoledgeInterrupt(GPIO_32);	//enable GPIO32 to generate new int					    			

 		it_timer_flag = 1;
 	}
}


void VIKING_SLEEP_ITTIMER_TEST()
{
  	unsigned int i;
  	unsigned int start_32k_counter, start_hi_counter,start_network_counter,end_32k_counter,end_hi_counter,end_network_counter;
    unsigned int inc_reg,frac_reg;

	//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: Disable ext_master_req0/1 wakeup Viking ULPD
	//VIKING_ULPD_SWITCH_DISA_N = 0x1; 

	//step3: SET TIMER TO 1024 FRAMES
    VIKING_ULPD_TSM_TIMER_INIT_REG = 0x400; 
	
	//step4: load the timer value to the counter 
	VIKING_ULPD_TSM_TIMER_CTRL_REG = 0x1;      
	VIKING_ULPD_TSM_TIMER_CTRL_REG = 0x0;//can be removed;
	 
	//step5: command viking to enter sleep mode   
	VIKING_ULPD_SLEEP_CTRL_REG = 0x1;

   	UART_Printf(UART2,"Now Viking should enter sleep mode. Timer_Init = 1024 frames. (5.12s)\n");
	UART_Printf(UART2,"Note: the current should reduce about 20mA;\n");
	
	//can add IT_TIMER isr here.
	//SET IT_TIMER GPIO32
	/*
	_disable_interrupts();
    GPIO_SetDirection(GPIO_32,GPIO_INPUT);
    GPIO_SetEdgeCtrl(GPIO_32, FALLING_EDGE_DETECT);
    GPIO_SetOnePinInterruptMask(GPIO_32, IT_ENABLE);
    GPIO_AcknoledgeInterrupt(GPIO_32);
	  
    VIKING_INTH_CTRL_DSP |= 0x1;    for(i=0;i<1000;i++);	
    VIKING_INTH_MIR_MCU = 0xFFFF;  for(i=0;i<1000;i++);	 	
	VIKING_INTH_MIR_DSP = 0xFFFF;  for(i=0;i<1000;i++);	

	INTW_DspInterruptClearPending(DSPINT_GPIO2);	

	INTW_DspSetInterruptVector( DSPINT_GPIO2 ,
                             ULPD_IT_TIMER_irqHandler,
                             DEFAULT_ROUTE,
                             DEFAULT_SENSITIVITY,
                             DEFAULT_PRIORITY);  
	INTW_DspInterruptEnable(DSPINT_GPIO2); 

	it_timer_flag = 0;
	 _enable_interrupts();     
	while(!it_timer_flag);
	*/
	UART_Printf(UART2,"Sleep finished successfully!\n");
}



	
void VIKING_ULPD_regular_sleep()
{
/*
	#if 0
    for(i=1;i<=50;i++)  
    {
  		int_flag = 0;
	  	frame_cnt = 0;
	  	gauging_done = 0;
	  	UART_Printf(UART2,"This is the %d times.\n",i);

   		//gauging before go to sleep
	  	VIKING_GAUGING_HI_FREQ(); //Gauging versus high frequency clock

	  	frame_cnt = 0;
  		//gauging done

    //set Viking to sleep mode

       //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;
	 
        VIKING_ULPD_TSM_TIMER_INIT_REG = 0x400; //SET TIMER TO 1024 FRAMES
	 
	    VIKING_ULPD_TSM_TIMER_CTRL_REG = 0x1;
        VIKING_ULPD_SWITCH_DISA_N = 0x1; //Disable ext_master_req0/1 wakeup Viking ULPD
	    VIKING_ULPD_SLEEP_CTRL_REG = 0x1;

	   UART_Printf(UART2,"Set Viking to sleep mode. Timer_Init = 1024 frames. (5.12s)\n");

#if 0
	_disable_interrupts();

      //GPIO_setup(); 

	  //SET IT_TIMER GPIO32
      GPIO_SetDirection(GPIO_32,GPIO_INPUT);
      GPIO_SetEdgeCtrl(GPIO_32, FALLING_EDGE_DETECT);
      GPIO_SetOnePinInterruptMask(GPIO_32, IT_ENABLE);
      GPIO_AcknoledgeInterrupt(GPIO_32);
	  
#if 0

        VIKING_INTH_CTRL_DSP |= 0x1;    for(i=0;i<10000;i++);	
        VIKING_INTH_MIR_MCU = 0xFFFF;  for(i=0;i<10000;i++);	 	
	 VIKING_INTH_MIR_DSP = 0xFFFF;  for(i=0;i<10000;i++);	

#endif

        INTW_DspInterruptClearPending(DSPINT_GPIO2);	

        INTW_DspSetInterruptVector( DSPINT_GPIO2 ,
                             ULPD_IT_TIMER_irqHandler,
                             DEFAULT_ROUTE,
                             DEFAULT_SENSITIVITY,
                             DEFAULT_PRIORITY);  
	 INTW_DspInterruptEnable(DSPINT_GPIO2); 

	 _enable_interrupts();     

#endif

	  do
	  	{
	  	  VIKING_ULPD_TSM_TIMER_CTRL_REG = 0x1;
	  	}
	  while (VIKING_ULPD_TSM_TIMER_CTRL_REG == 0x2); //SET TIMER RUNNING

	  
while(!int_flag); //wait for viking wakeup
	  

	  
  	}

	#endif
*/
}

void VIKING_ULPD_test()
{
	unsigned int val=1;
	
	while(val)
    {     	
    	UART_Printf(UART2,"\n");
    	UART_Printf(UART2,"==========================================\n");
    	UART_Printf(UART2,"    VIKING ULPD MODULES TEST MENU\n");
    	UART_Printf(UART2,"==========================================\n");    	
    	UART_Printf(UART2,"0  :  Return upper menu\n");
		UART_Printf(UART2,"1  :  Gauging 32KHz CLK using HI CLK\n");
		UART_Printf(UART2,"2  :  Gauging 32KHz CLK using TD NET CLK\n");
    	UART_Printf(UART2,"3  :  Simple Sleep test(Note: Do gauging first)\n");
    	UART_Printf(UART2,"4  :  Test 50 times for 'Sleep + Gauging + CS1'(to be done) \n");
    	UART_Printf(UART2,"5  :  DPLL'(to be done) \n");
    	UART_Printf(UART2,"------------------------------------------\n");
  		UART_Printf(UART2,"Please Enter your choice: \n ");   
		val = UART_GetNum(UART2);
    	UART_Printf(UART2,"\n\r");
    	
    	switch (val)
    	{     		
    		case 0:
    			break;
			case 1:
			{
			VIKING_GAUGING_HI();
				break;
			}

			case 2:
			{
			VIKING_GAUGING_NETWORK();
				break;
			}
    		case 3:
    		{
    		VIKING_SLEEP_ITTIMER_TEST();
    			break;
    		}
    		case 4:
    		{
										
    			break;	
    		}
			case 5:
    		{
			VIKING_ULPD_PLL();							
    			break;	
    		}
			VIKING_ULPD_PLL();
			default:	
				break;	
		}	   	
	}	
}







⌨️ 快捷键说明

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