Power.c
上传用户:zbk8730
上传日期:2017-08-10
资源大小:12168k
文件大小:6k
源码类别:

uCOS

开发平台:

C/C++

  1. /*****************************************
  2.   NAME: power.c
  3.   DESC: SLOW,HOLD mode test
  4.   HISTORY:
  5.   03.23.2002:purnnamu: first release for 2410
  6.   06.02.2002:DonGo: Modified for 2440
  7.  *****************************************/
  8.  
  9. #include "def.h"
  10. #include "option.h"
  11. #include "2440addr.h"
  12. #include "2440lib.h"
  13. #include "2440slib.h" 
  14. #include "lcdlib.h"
  15. #include "sleep.h"
  16. #include "power.h"
  17. #include "pwr_c.h"
  18. #include "pll.h"
  19. #include "idle.h"
  20. #include "iotest.h"
  21. #include "dvstest.h"
  22. void __irq SlowEint0Int(void);
  23. volatile int slowExit;
  24. void * func_power_test[][2]=
  25. {
  26. //                           "0123456789012345678"
  27. //Power mode test
  28. (void *)Check_SleepWakeUp, "WakeUp status     ",
  29. (void *)Test_SlowMode, "Slow mode test    ",
  30. (void *)Test_HoldMode, "Hold mode test    ",
  31. //Clock test
  32. (void *)Test_Locktime, "Lock time test    ",
  33. (void *)Test_PLL, "PLL change test   ",
  34. (void *)Manual_Change_Pll, "PLL change(manual)",
  35. //(void *)Manual_Change_Pll_Iostrength, "IO strneght test  ",
  36. (void *)Test_PllOnOff, "PLL On/Off test   ",
  37. (void *)MeasurePowerConsumption, "Power consumption ",
  38. // Sleep mode test
  39. (void *)Test_IdleMode, "Idle mode test    ",
  40. (void *)Test_MMUIdleMode,  "Idle mode(MMU)    ",
  41. (void *)Test_SleepMode, "Sleep mode test   ",
  42. (void *)Test_StopMode, "Stop mode test   ",
  43. //(void *)Test_SleepMode_100Hz, "Sleep mode 100Hz  ",
  44. (void *)Test_BattFaultInterrupt, "nBATT_FLT intr    ",
  45. (void *)Test_InitSDRAM, "SDRAM init        ",
  46. // I/O strength test.
  47. (void *)Test_IO_Strength,  "IO Strength       ",
  48. (void *)Dvs_Test,   "DVS test          ",
  49. 0,0
  50. };
  51. void Power_Test(void)
  52. {
  53. int i;
  54. Uart_Printf("nPower mode test.n");
  55. // Battery fault setting.
  56. rMISCCR = (rMISCCR & ~(0x7<<20)) | (1<<22) | (1<<21) | (0<<20);
  57. while(1)
  58. {
  59. i=0;
  60. Uart_Printf("nn");
  61. while(1)
  62. {   //display menu
  63. Uart_Printf("%2d:%s",i,func_power_test[i][1]);
  64. i++;
  65. if((int)(func_power_test[i][0])==0)
  66. {
  67. Uart_Printf("n");
  68. break;
  69. }
  70. if((i%3)==0)
  71. Uart_Printf("n");
  72. }
  73. Uart_Printf("nSelect ("-1" to exit) : ");
  74. i = Uart_GetIntNum();
  75. if(i==-1) break; // return.
  76. if(i>=0 && (i<((sizeof(func_power_test)-1)/8)) ) // select and execute...
  77. ( (void (*)(void)) (func_power_test[i][0]) )();
  78. }
  79. Uart_Printf("nPower_Test program end.n");
  80. }
  81. //////////////////////////////////////////////////////////////////////////
  82. void Test_SlowMode(void)
  83. {
  84. int i;
  85. unsigned int saveREFRESH;
  86. slowExit=0;
  87. // GPIO and Interrupt setting
  88. rGPFCON=(rGPFCON & ~(0x3<<0)) | (0x2<<0); //PF0=EINT0
  89. rEXTINT0=(rEXTINT0&~(0x7<<0)) | (0x2<<0); //EINT0=falling edge triggered
  90. pISR_EINT0=(U32)SlowEint0Int;
  91. rINTMSK=~BIT_EINT0; // Unmask eint0
  92. Uart_Printf("[SLOW MODE TEST]n");
  93. Uart_Printf("  Press EINT0 key to exit SLOW moden");
  94. Uart_Printf("  Check the CLKOUT0 pad clock is the same as X-tal input in Slow mode.n");
  95. Uart_Printf("  Compare the LED Blink speed at each mode.n");
  96. Uart_Printf("n  Press any key to enter slow mode.n");
  97. Uart_TxEmpty(1); //To avoid being crushed the character
  98. Clk0_Enable(2); // 0:MPLLin, 1:UPLL, 2:FCLK, 3:HCLK, 4:PCLK, 5:DCLK0
  99. while(!slowExit) {
  100. Led_Display(0xa);
  101. //DoQsort(); 
  102. for(i=0; i<100; i++);
  103. Led_Display(0x5);
  104. //DoQsort();
  105. for(i=0; i<100; i++);
  106. if(Uart_GetKey()!=0) break;
  107. }
  108. rCLKSLOW=(1<<7)|(1<<5)|(1<<4)|(0<<0); //FCLK=FIN/1,SLOW mode,MPLL=off,UPLL=off 
  109. // Re-setting the refresh count for 12MHz HCLK.
  110. saveREFRESH=rREFRESH;
  111. rREFRESH=(1<<23)|(U32)(2048+1-12*7.8); //Trp=2clk,Trc=4clk
  112. while(!slowExit) {
  113. Led_Display(0xa);
  114. DoQsort(); 
  115. //for(i=0; i<100; i++);
  116. Led_Display(0x5);
  117. DoQsort();
  118. //for(i=0; i<100; i++);
  119. }
  120. rINTMSK=BIT_ALLMSK;
  121. rCLKSLOW=0|(1<<4)|(0<<5);//PLL on,MPLL=on
  122. for(i=0;i<2048;i++); //S/W MPLL lock-time
  123. rCLKSLOW=0|(0<<4)|(0<<5);//NORMAL mode,PLL on,MPLL=on
  124. }
  125. void __irq SlowEint0Int(void)
  126. {
  127. ClearPending(BIT_EINT0);
  128. slowExit=1;
  129. }
  130. void Test_HoldMode(void)
  131. {
  132.   
  133. Uart_Printf("[Power Saving Mode by Stopping Each Block]n");
  134. Uart_Printf("LCD ENVID is turned off.n");
  135. Lcd_EnvidOnOff(0);
  136. Uart_Printf("Check the current cunsumption. Type any key to proceed.n");
  137. //Except GPIO,UART0
  138. rCLKCON=0xffff0; // All enable. sleep disable, Idle trable.
  139. Uart_Getch();
  140. Uart_Printf("Nand off.n");
  141. rCLKCON&=~(1<<4);
  142. Uart_Getch();
  143. Uart_Printf("LCD off.n");
  144. rCLKCON&=~(1<<5);
  145. Lcd_EnvidOnOff(0);
  146. Uart_Getch();
  147. Uart_Printf("USB host off(DP0/DN0 is suspended).n");
  148. rCLKCON&=~(1<<6);
  149. rMISCCR|=(1<<12); //USB port0 = suspend
  150. Uart_Getch();
  151. Uart_Printf("USB device off(DP1/DN1 is also suspended).n");
  152. rCLKCON&=~(1<<7);
  153. rMISCCR|=(1<<13); //USB port1 = suspend
  154. Uart_Getch();
  155. Uart_Printf("PWM Timer off.n");
  156. rCLKCON&=~(1<<8);
  157. Uart_Getch();
  158. Uart_Printf("SDI off.n");
  159. rCLKCON&=~(1<<9);
  160. Uart_Getch();
  161. Uart_Printf("UART0 off.n");
  162. rCLKCON&=~(1<<10);
  163. Uart_Getch();
  164. Uart_Printf("UART2 off.n");
  165. rCLKCON&=~(1<<12);
  166. Uart_Getch();
  167. Uart_Printf("RTC_control off.n");
  168. rCLKCON&=~(1<<14);
  169. Uart_Getch();
  170. Uart_Printf("ADC off.n");
  171. rADCCON|=(1<<2); // ADC stand-by mode select
  172. rCLKCON&=~(1<<15);
  173. Uart_Getch();
  174. Uart_Printf("IIC off.n");
  175. rCLKCON&=~(1<<16);
  176. Uart_Getch();
  177. Uart_Printf("IIS off.n");
  178. rCLKCON&=~(1<<17);
  179. Uart_Getch();
  180. Uart_Printf("SPI off.n");
  181. rCLKCON&=~(1<<18);
  182. Uart_Getch();
  183. Uart_Printf("Camera off.n");
  184. rCLKCON&=~(1<<19);
  185. Uart_Getch();
  186. Uart_Printf("Return to Normal Mode.n");
  187. rCLKCON=0xffff0; 
  188. rADCCON&=(1<<2);
  189. rMISCCR&=~((1<<12)|(1<<13)); //USB port0,1 = normal
  190. Lcd_EnvidOnOff(1);
  191. }