📄 vikingii_ulpd.c
字号:
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 + -