wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4325|回復: 0
收起左側

ARM 2440裸奔實現電子時鐘

[復制鏈接]
ID:112317 發表于 2016-4-7 01:20 | 顯示全部樓層 |閱讀模式
2440 ARM裸奔實現電子時鐘,對我們學習ARM體系很有幫助,原創全部源碼下載: LCD--ZHIKU.rar (1 MB, 下載次數: 15)

  1. //===================================================================
  2. // File Name : 2440lib.c
  3. // Function  : S3C2410 PLL,Uart, LED, Port Init
  4. // Date      : March 20, 2002
  5. // Version   : 0.0
  6. // History
  7. //   0.0 : Programming start (February 20,2002) -> SOP
  8. //===================================================================

  9. #include "def.h"
  10. #include "option.h"
  11. #include "2440addr.h"
  12. #include "2440lib.h"
  13. #include "2440slib.h"

  14. #include <stdarg.h>
  15. #include <string.h>
  16. #include <stdlib.h>
  17. #include <stdio.h>
  18. #include <ctype.h>

  19. extern char Image$RW$Limit[];
  20. void *mallocPt=Image$RW$Limit;

  21. //***************************[ SYSTEM ]***************************************************
  22. void Delay(int time)
  23. {
  24.         U32 val = (PCLK>>3)/1000-1;
  25.        
  26.         rTCFG0 &= ~(0xff<<8);
  27.         rTCFG0 |= 3<<8;                        //prescaler = 3+1
  28.         rTCFG1 &= ~(0xf<<12);
  29.         rTCFG1 |= 0<<12;                //mux = 1/2

  30.         rTCNTB3 = val;
  31.         rTCMPB3 = val>>1;                // 50%
  32.         rTCON &= ~(0xf<<16);
  33.         rTCON |= 0xb<<16;                //interval, inv-off, update TCNTB3&TCMPB3, start timer 3
  34.         rTCON &= ~(2<<16);                //clear manual update bit
  35.         while(time--) {
  36.                 while(rTCNTO3>=val>>1);
  37.                 while(rTCNTO3<val>>1);
  38.         };
  39. }

  40. //***************************[ PORTS ]****************************************************
  41. void Port_Init0(void)
  42. {
  43.     //CAUTION:Follow the configuration order for setting the ports.
  44.     // 1) setting value(GPnDAT)
  45.     // 2) setting control register  (GPnCON)
  46.     // 3) configure pull-up resistor(GPnUP)  

  47.     //32bit data bus configuration  
  48.     //*** PORT A GROUP
  49.     //Ports  : GPA22 GPA21  GPA20 GPA19 GPA18 GPA17 GPA16 GPA15 GPA14 GPA13 GPA12  
  50.     //Signal : nFCE nRSTOUT nFRE   nFWE  ALE   CLE  nGCS5 nGCS4 nGCS3 nGCS2 nGCS1
  51.     //Binary :  1     1      1  , 1   1   1    1   ,  1     1     1     1
  52.     //Ports  : GPA11   GPA10  GPA9   GPA8   GPA7   GPA6   GPA5   GPA4   GPA3   GPA2   GPA1  GPA0
  53.     //Signal : ADDR26 ADDR25 ADDR24 ADDR23 ADDR22 ADDR21 ADDR20 ADDR19 ADDR18 ADDR17 ADDR16 ADDR0
  54.     //Binary :  1       1      1      1   , 1       1      1      1   ,  1       1     1      1         
  55.     rGPACON = 0x7fffff;

  56.     //**** PORT B GROUP
  57.     //Ports  : GPB10    GPB9    GPB8    GPB7    GPB6     GPB5    GPB4   GPB3   GPB2     GPB1      GPB0
  58.     //Signal : nXDREQ0 nXDACK0 nXDREQ1 nXDACK1 nSS_KBD nDIS_OFF L3CLOCK L3DATA L3MODE nIrDATXDEN Keyboard
  59.     //Setting: INPUT  OUTPUT   INPUT  OUTPUT   INPUT   OUTPUT   OUTPUT OUTPUT OUTPUT   OUTPUT    OUTPUT
  60.     //Binary :   00  ,  01       00  ,   01      00   ,  01       01  ,   01     01   ,  01        01  
  61.     rGPBCON = 0x044555;
  62.     rGPBUP  = 0x7ff;     // The pull up function is disabled GPB[10:0]

  63.     //*** PORT C GROUP for youlong
  64.     //Ports  : GPC15 GPC14 GPC13 GPC12 GPC11 GPC10 GPC9 GPC8  GPC7   GPC6   GPC5 GPC4 GPC3  GPC2  GPC1 GPC0
  65.     //Signal : VD7   VD6   VD5   VD4   VD3   VD2   VD1  VD0 LCDVF2 LCDVF1 LCDVF0 VM VFRAME VLINE VCLK LEND  
  66.     //Binary :  10   10  , 10    10  , 10    10  , 10   10  , 10     10  ,  10   10 , 10     10 , 10   10
  67.     rGPCCON = 0xaaaaaaaa;      
  68.     rGPCUP  = 0xffff;     // The pull up function is disabled GPC[15:0]
  69.    

  70.     //*** PORT D GROUP
  71.     //Ports  : GPD15 GPD14 GPD13 GPD12 GPD11 GPD10 GPD9 GPD8 GPD7 GPD6 GPD5 GPD4 GPD3 GPD2 GPD1 GPD0
  72.     //Signal : VD23  VD22  VD21  VD20  VD19  VD18  VD17 VD16 VD15 VD14 VD13 VD12 VD11 VD10 VD9  VD8
  73.     //Binary : 10    10  , 10    10  , 10    10  , 10   10 , 10   10 , 10   10 , 10   10 ,10   10
  74.     rGPDCON = 0xaaaaaaaa;      
  75.     rGPDUP  = 0xffff;     // The pull up function is disabled GPD[15:0]

  76.     //*** PORT E GROUP
  77.     //Ports  : GPE15  GPE14 GPE13   GPE12   GPE11   GPE10   GPE9    GPE8     GPE7  GPE6  GPE5   GPE4  
  78.     //Signal : IICSDA IICSCL SPICLK SPIMOSI SPIMISO SDDATA3 SDDATA2 SDDATA1 SDDATA0 SDCMD SDCLK IN
  79.     //Binary :  10     10  ,  10      10  ,  10      10   ,  10      10   ,   10    10  , 10     00  ,     
  80.     //-------------------------------------------------------------------------------------------------------
  81.     //Ports  :  GPE3   GPE2  GPE1    GPE0   
  82.     //Signal :  IN     IN    IN      IN  
  83.     //Binary :  00     00  ,  00      00
  84.     //rGPECON = 0xaaaaaaaa;      
  85.     //rGPEUP  = 0xffff;     // The pull up function is disabled GPE[15:0]
  86.         rGPECON = 0xaaaaa800; // For added AC97 setting      
  87.     rGPEUP  = 0xffff;     

  88.      //*** PORT F GROUP
  89.     //Ports  : GPF7   GPF6   GPF5   GPF4      GPF3     GPF2  GPF1   GPF0
  90.     //Signal : nLED_8 nLED_4 nLED_2 nLED_1 nIRQ_PCMCIA EINT2 KBDINT EINT0
  91.     //Setting: Output Output Output Output    EINT3    EINT2 EINT1  EINT0
  92.     //Binary :  01      01 ,  01     01  ,     10       10  , 10     10
  93.     rGPFCON = 0x55aa;
  94.     rGPFUP  = 0xff;     // The pull up function is disabled GPF[7:0]

  95.     //*** PORT G GROUP
  96.     //Ports  : GPG15 GPG14 GPG13 GPG12 GPG11    GPG10    GPG9     GPG8     GPG7      GPG6   
  97.     //Signal : nYPON  YMON nXPON XMON  EINT19 DMAMODE1 DMAMODE0 DMASTART KBDSPICLK KBDSPIMOSI
  98.     //Setting: nYPON  YMON nXPON XMON  EINT19  Output   Output   Output   SPICLK1    SPIMOSI1
  99.     //Binary :   11    11 , 11    11  , 10      01    ,   01       01   ,    11         11
  100.     //-----------------------------------------------------------------------------------------
  101.     //Ports  :    GPG5       GPG4    GPG3    GPG2    GPG1    GPG0   
  102.     //Signal : KBDSPIMISO LCD_PWREN EINT11 nSS_SPI IRQ_LAN IRQ_PCMCIA
  103.     //Setting:  SPIMISO1  LCD_PWRDN EINT11   nSS0   EINT9    EINT8
  104.     //Binary :     11         11   ,  10      11  ,  10        10
  105.     rGPGCON = 0xff95ffba;
  106.     rGPGUP  = 0xffff;    // The pull up function is disabled GPG[15:0]

  107.     //*** PORT H GROUP
  108.     //Ports  :  GPH10    GPH9  GPH8 GPH7  GPH6  GPH5 GPH4 GPH3 GPH2 GPH1  GPH0
  109.     //Signal : CLKOUT1 CLKOUT0 UCLK nCTS1 nRTS1 RXD1 TXD1 RXD0 TXD0 nRTS0 nCTS0
  110.     //Binary :   10   ,  10     10 , 11    11  , 10   10 , 10   10 , 10    10
  111.     rGPHCON = 0x2afaaa;
  112.     rGPHUP  = 0x7ff;    // The pull up function is disabled GPH[10:0]

  113.         // Added for S3C2440X, DonGo
  114.         //*** PORT J GROUP
  115.     //Ports  : GPJ12   GPJ11       GPJ10    GPJ9    GPJ8      GPJ7      GPJ6      GPJ5      GPJ4      GPJ3      GPJ2      GPJ1     GPJ0
  116.     //Signal : CAMRESET CAMPCLKOUT CAMHREF CAMVSYNC CAMPCLKIN CAMDAT[7] CAMDAT[6] CAMDAT[5] CAMDAT[4] CAMDAT[3] CAMDAT[2] CAMDAT[1] CAMDAT[0]
  117.     //Binary :   10      10       10        10       10        10        10        10       10         10        10        10      10
  118.     rGPJCON = 0x02aaaaaa;
  119.     rGPJUP  = 0x1fff;    // The pull up function is disabled GPH[10:0]
  120.    
  121.     //External interrupt will be falling edge triggered.
  122.     rEXTINT0 = 0x22222222;    // EINT[7:0]
  123.     rEXTINT1 = 0x22222222;    // EINT[15:8]
  124.     rEXTINT2 = 0x22222222;    // EINT[23:16]
  125. }

  126. void Port_Init(void)
  127. {
  128.     //CAUTION:Follow the configuration order for setting the ports.
  129.     // 1) setting value(GPnDAT)
  130.     // 2) setting control register  (GPnCON)
  131.     // 3) configure pull-up resistor(GPnUP)  

  132.     //32bit data bus configuration  
  133.     //*** PORT A GROUP
  134.     //Ports  : GPA22 GPA21  GPA20 GPA19 GPA18 GPA17 GPA16 GPA15 GPA14 GPA13 GPA12  
  135.     //Signal : nFCE nRSTOUT nFRE   nFWE  ALE   CLE  nGCS5 nGCS4 nGCS3 nGCS2 nGCS1
  136.     //Binary :  1     1      1  , 1   1   1    1   ,  1     1     1     1
  137.     //Ports  : GPA11   GPA10  GPA9   GPA8   GPA7   GPA6   GPA5   GPA4   GPA3   GPA2   GPA1  GPA0
  138.     //Signal : ADDR26 ADDR25 ADDR24 ADDR23 ADDR22 ADDR21 ADDR20 ADDR19 ADDR18 ADDR17 ADDR16 ADDR0
  139.     //Binary :  1       1      1      1   , 1       1      1      1   ,  1       1     1      1         
  140.     rGPACON = 0x7fffff;

  141.     //**** PORT B GROUP
  142.     //Ports  : GPB10    GPB9    GPB8    GPB7    GPB6     GPB5    GPB4   GPB3   GPB2     GPB1      GPB0
  143.     //Signal : nXDREQ0 nXDACK0 nXDREQ1 nXDACK1 nSS_KBD nDIS_OFF L3CLOCK L3DATA L3MODE nIrDATXDEN Keyboard
  144.     //Setting: INPUT  OUTPUT   INPUT  OUTPUT   INPUT   OUTPUT   OUTPUT OUTPUT OUTPUT   OUTPUT    OUTPUT
  145.     //Binary :   00  ,  01       00  ,   01      00   ,  01       01  ,   01     01   ,  01        01  
  146.     //rGPBCON = 0x000150;(youlong)
  147.     rGPBCON = 0x015550;
  148.     rGPBUP  = 0x7ff;     // The pull up function is disabled GPB[10:0]

  149.     //*** PORT C GROUP for youlong
  150.     //Ports  : GPC15 GPC14 GPC13 GPC12 GPC11 GPC10 GPC9 GPC8  GPC7   GPC6   GPC5 GPC4 GPC3  GPC2  GPC1 GPC0
  151.     //Signal : VD7   VD6   VD5   VD4   VD3   VD2   VD1  VD0 LCDVF2 LCDVF1 LCDVF0 VM VFRAME VLINE VCLK LEND  
  152.     //Binary :  10   10  , 10    10  , 10    10  , 10   10  , 10     10  ,  10   10 , 10     10 , 10   10
  153.     //rGPCCON = 0xaaaaaaaa;      
  154.     //rGPCUP  = 0xffff;     // The pull up function is disabled GPC[15:0]
  155.    
  156.     //*** PORT C GROUP
  157.     //Ports  : GPC15 GPC14 GPC13 GPC12 GPC11 GPC10 GPC9 GPC8  GPC7   GPC6   GPC5 GPC4 GPC3  GPC2  GPC1 GPC0
  158.     //Signal : VD7   VD6   VD5   VD4   VD3   VD2   VD1  VD0 LCDVF2 LCDVF1 LCDVF0 VM VFRAME VLINE VCLK LEND  
  159.     //Binary :  10   10  , 10    10  , 10    10  , 10   01  , 01     01  ,  01   10 , 10     10 , 10   10
  160.     rGPCCON = 0xaaa956aa;      
  161.     rGPCUP  = 0xffff;     // The pull up function is disabled GPC[15:0]     

  162.     //*** PORT D GROUP
  163.     //Ports  : GPD15 GPD14 GPD13 GPD12 GPD11 GPD10 GPD9 GPD8 GPD7 GPD6 GPD5 GPD4 GPD3 GPD2 GPD1 GPD0
  164.     //Signal : VD23  VD22  VD21  VD20  VD19  VD18  VD17 VD16 VD15 VD14 VD13 VD12 VD11 VD10 VD9  VD8
  165.     //Binary : 10    10  , 10    10  , 10    10  , 10   10 , 10   10 , 10   10 , 10   10 ,10   10
  166.     rGPDCON = 0xaaaaaaaa;      
  167.     rGPDUP  = 0xffff;     // The pull up function is disabled GPD[15:0]

  168.     //*** PORT E GROUP
  169.     //Ports  : GPE15  GPE14 GPE13   GPE12   GPE11   GPE10   GPE9    GPE8     GPE7  GPE6  GPE5   GPE4  
  170.     //Signal : IICSDA IICSCL SPICLK SPIMOSI SPIMISO SDDATA3 SDDATA2 SDDATA1 SDDATA0 SDCMD SDCLK IN
  171.     //Binary :  10     10  ,  10      10  ,  10      10   ,  10      10   ,   10    10  , 10     00  ,     
  172.     //-------------------------------------------------------------------------------------------------------
  173.     //Ports  :  GPE3   GPE2  GPE1    GPE0   
  174.     //Signal :  IN     IN    IN      IN  
  175.     //Binary :  00     00  ,  00      00
  176.     //rGPECON = 0xaaaaaaaa;      
  177.     //rGPEUP  = 0xffff;     // The pull up function is disabled GPE[15:0]
  178.         rGPECON = 0xa02aa800; // For added AC97 setting      
  179.     rGPEUP  = 0xffff;     

  180.      //*** PORT F GROUP
  181.     //Ports  : GPF7   GPF6   GPF5   GPF4      GPF3     GPF2  GPF1   GPF0
  182.     //Signal : nLED_8 nLED_4 nLED_2 nLED_1 nIRQ_PCMCIA EINT2 KBDINT EINT0
  183.     //Setting: Output Output Output Output    EINT3    EINT2 EINT1  EINT0
  184.     //Binary :  01      01 ,  01     01  ,     10       10  , 10     10
  185.     rGPFCON = 0x55aa;
  186.     rGPFUP  = 0xff;     // The pull up function is disabled GPF[7:0]

  187.     //*** PORT G GROUP
  188.     //Ports  : GPG15 GPG14 GPG13 GPG12 GPG11    GPG10    GPG9     GPG8     GPG7      GPG6   
  189.     //Signal : nYPON  YMON nXPON XMON  EINT19 DMAMODE1 DMAMODE0 DMASTART KBDSPICLK KBDSPIMOSI
  190.     //Setting: nYPON  YMON nXPON XMON  EINT19  Output   Output   Output   SPICLK1    SPIMOSI1
  191.     //Binary :   11    11 , 11    11  , 10      01    ,   01       01   ,    11         11
  192.     //-----------------------------------------------------------------------------------------
  193.     //Ports  :    GPG5       GPG4    GPG3    GPG2    GPG1    GPG0   
  194.     //Signal : KBDSPIMISO LCD_PWREN EINT11 nSS_SPI IRQ_LAN IRQ_PCMCIA
  195.     //Setting:  SPIMISO1  LCD_PWRDN EINT11   nSS0   EINT9    EINT8
  196.     //Binary :     11         11   ,  10      11  ,  10        10
  197.     rGPGCON = 0x00a2aaaa;// GPG9 input without pull-up
  198.     rGPGUP  = 0xffff;    // The pull up function is disabled GPG[15:0]

  199.     //*** PORT H GROUP
  200.     //Ports  :  GPH10    GPH9  GPH8 GPH7  GPH6  GPH5 GPH4 GPH3 GPH2 GPH1  GPH0
  201.     //Signal : CLKOUT1 CLKOUT0 UCLK nCTS1 nRTS1 RXD1 TXD1 RXD0 TXD0 nRTS0 nCTS0
  202.     //Binary :   10   ,  10     10 , 11    11  , 10   10 , 10   10 , 10    10
  203.     rGPHCON = 0x00faaa;
  204.     rGPHUP  = 0x7ff;    // The pull up function is disabled GPH[10:0]

  205.         // Added for S3C2440X, DonGo
  206.         //*** PORT J GROUP
  207.     //Ports  : GPJ12   GPJ11       GPJ10    GPJ9    GPJ8      GPJ7      GPJ6      GPJ5      GPJ4      GPJ3      GPJ2      GPJ1     GPJ0
  208.     //Signal : CAMRESET CAMPCLKOUT CAMHREF CAMVSYNC CAMPCLKIN CAMDAT[7] CAMDAT[6] CAMDAT[5] CAMDAT[4] CAMDAT[3] CAMDAT[2] CAMDAT[1] CAMDAT[0]
  209.     //Binary :   10      10       10        10       10        10        10        10       10         10        10        10      10
  210.     rGPJCON = 0x02aaaaaa;
  211.     rGPJUP  = 0x1fff;    // The pull up function is disabled GPH[10:0]
  212.    
  213.     //External interrupt will be falling edge triggered.
  214.     rEXTINT0 = 0x22222222;    // EINT[7:0]
  215.     rEXTINT1 = 0x22222222;    // EINT[15:8]
  216.     rEXTINT2 = 0x22222222;    // EINT[23:16]
  217. }

  218. //***************************[ UART ]******************************
  219. static int whichUart=0;

  220. void Uart_Init(int pclk,int baud)
  221. {
  222.     int i;
  223.     if(pclk == 0)
  224.     pclk    = PCLK;
  225.     rUFCON0 = 0x0;   //UART channel 0 FIFO control register, FIFO disable
  226.     rUFCON1 = 0x0;   //UART channel 1 FIFO control register, FIFO disable
  227.     rUFCON2 = 0x0;   //UART channel 2 FIFO control register, FIFO disable
  228.     rUMCON0 = 0x0;   //UART chaneel 0 MODEM control register, AFC disable
  229.     rUMCON1 = 0x0;   //UART chaneel 1 MODEM control register, AFC disable
  230. //UART0
  231.     rULCON0 = 0x3;   //Line control register : Normal,No parity,1 stop,8 bits
  232.      //    [10]       [9]     [8]        [7]        [6]      [5]         [4]           [3:2]        [1:0]
  233.      // Clock Sel,  Tx Int,  Rx Int, Rx Time Out, Rx err, Loop-back, Send break,  Transmit Mode, Receive Mode
  234.      //     0          1       0    ,     0          1        0           0     ,       01          01
  235.      //   PCLK       Level    Pulse    Disable    Generate  Normal      Normal        Interrupt or Polling
  236.     rUCON0  = 0x245;   // Control register
  237.     rUBRDIV0=( (int)(pclk/16./baud+0.5) -1 );   //Baud rate divisior register 0
  238. //UART1
  239.     rULCON1 = 0x3;
  240.     rUCON1  = 0x245;
  241.     rUBRDIV1=( (int)(pclk/16./baud+0.5) -1 );
  242. //UART2
  243.     rULCON2 = 0x3;
  244.     rUCON2  = 0x245;
  245.     rUBRDIV2=( (int)(pclk/16./baud+0.5) -1 );   

  246.     for(i=0;i<100;i++);
  247. }

  248. //===================================================================
  249. void Uart_Select(int ch)
  250. {
  251.     whichUart = ch;
  252. }

  253. //===================================================================
  254. void Uart_TxEmpty(int ch)
  255. {
  256.     if(ch==0)
  257.         while(!(rUTRSTAT0 & 0x4)); //Wait until tx shifter is empty.
  258.          
  259.     else if(ch==1)
  260.         while(!(rUTRSTAT1 & 0x4)); //Wait until tx shifter is empty.
  261.         
  262.     else if(ch==2)
  263.         while(!(rUTRSTAT2 & 0x4)); //Wait until tx shifter is empty.
  264. }

  265. //=====================================================================
  266. char Uart_Getch(void)
  267. {
  268.     if(whichUart==0)
  269.     {      
  270.         while(!(rUTRSTAT0 & 0x1)); //Receive data ready
  271.         return RdURXH0();
  272.     }
  273.     else if(whichUart==1)
  274.     {      
  275.         while(!(rUTRSTAT1 & 0x1)); //Receive data ready
  276.         return RdURXH1();
  277.     }
  278.     else if(whichUart==2)
  279.     {
  280.         while(!(rUTRSTAT2 & 0x1)); //Receive data ready
  281.         return RdURXH2();
  282.     }
  283.    
  284.     return 0 ;
  285. }

  286. //====================================================================
  287. char Uart_GetKey(void)
  288. {
  289.     if(whichUart==0)
  290.     {      
  291.         if(rUTRSTAT0 & 0x1)    //Receive data ready
  292.             return RdURXH0();
  293.         else
  294.             return 0;
  295.     }
  296.     else if(whichUart==1)
  297.     {
  298.         if(rUTRSTAT1 & 0x1)    //Receive data ready
  299.             return RdURXH1();
  300.         else
  301.             return 0;
  302.     }
  303.     else if(whichUart==2)
  304.     {      
  305.         if(rUTRSTAT2 & 0x1)    //Receive data ready
  306.             return RdURXH2();
  307.         else
  308.             return 0;
  309.     }   

  310.         return 0 ;
  311. }

  312. //====================================================================
  313. void Uart_GetString(char *string)
  314. {
  315.     char *string2 = string;
  316.     char c;
  317.     while((c = Uart_Getch())!='\r')
  318.     {
  319.         if(c=='\b')
  320.         {
  321.             if( (int)string2 < (int)string )
  322.             {
  323.                 Uart_Printf("\b \b");
  324.                 string--;
  325.             }
  326.         }
  327.         else
  328.         {
  329.             *string++ = c;
  330.             Uart_SendByte(c);
  331.         }
  332.     }
  333.     *string='\0';
  334.     Uart_SendByte('\n');
  335. }

  336. //=====================================================================
  337. int Uart_GetIntNum(void)
  338. {
  339.     char str[30];
  340.     char *string = str;
  341.     int base     = 10;
  342.     int minus    = 0;
  343.     int result   = 0;
  344.     int lastIndex;   
  345.     int i;
  346.    
  347.     Uart_GetString(string);
  348.    
  349.     if(string[0]=='-')
  350.     {
  351.         minus = 1;
  352.         string++;
  353.     }
  354.    
  355.     if(string[0]=='0' && (string[1]=='x' || string[1]=='X'))
  356.     {
  357.         base    = 16;
  358.         string += 2;
  359.     }
  360.    
  361.     lastIndex = strlen(string) - 1;
  362.    
  363.     if(lastIndex<0)
  364.         return -1;
  365.    
  366.     if(string[lastIndex]=='h' || string[lastIndex]=='H' )
  367.     {
  368.         base = 16;
  369.         string[lastIndex] = 0;
  370.         lastIndex--;
  371.     }

  372.     if(base==10)
  373.     {
  374.         result = atoi(string);
  375.         result = minus ? (-1*result):result;
  376.     }
  377.     else
  378.     {
  379.         for(i=0;i<=lastIndex;i++)
  380.         {
  381.             if(isalpha(string[i]))
  382.             {
  383.                 if(isupper(string[i]))
  384.                     result = (result<<4) + string[i] - 'A' + 10;
  385.                 else
  386.                     result = (result<<4) + string[i] - 'a' + 10;
  387.             }
  388.             else
  389.                 result = (result<<4) + string[i] - '0';
  390.         }
  391.         result = minus ? (-1*result):result;
  392.     }
  393.     return result;
  394. }

  395. //*****************************************************************************
  396. //get a number for the uart
  397. //*****************************************************************************
  398. int Uart_GetIntNum_GJ(void)
  399. {
  400.     char string[16] ;
  401.     char *p_string = string ;
  402.     char c;
  403.     int i = 0 ;
  404.     int data = 0 ;

  405.     while(   ( c = Uart_Getch()) != '\r'  )
  406.     {
  407.                 if(c=='\b')                p_string--;
  408.                 else                *p_string++=c;
  409.                
  410.                 Uart_SendByte( c ) ;
  411.     }

  412.     *p_string = '\0';

  413.         i = 0 ;
  414.         while( string[i] != '\0' )
  415.         {
  416.                 data = data * 10 ;
  417.                 if( string[i]<'0'||string[i]>'9' )
  418.                         return -1 ;
  419.                 data = data + ( string[i]-'0' ) ;
  420.                 i++ ;               
  421.         }       
  422.        
  423.         return data ;
  424. }
  425. //*****************************************************************************

  426. //=====================================================================
  427. void Uart_SendByte(int data)
  428. {
  429.     if(whichUart==0)
  430.     {
  431.         if(data=='\n')
  432.         {
  433.             while(!(rUTRSTAT0 & 0x2));
  434.            // Delay(1);                 //because the slow response of hyper_terminal
  435.             WrUTXH0('\r');
  436.         }
  437.         while(!(rUTRSTAT0 & 0x2));   //Wait until THR is empty.
  438.       //  Delay(1);
  439.         WrUTXH0(data);
  440.     }
  441.     else if(whichUart==1)
  442.     {
  443.         if(data=='\n')
  444.         {
  445.             while(!(rUTRSTAT1 & 0x2));
  446.             //Delay(1);                 //because the slow response of hyper_terminal
  447.             rUTXH1 = '\r';
  448.         }
  449.         while(!(rUTRSTAT1 & 0x2));   //Wait until THR is empty.
  450.         //Delay(1);
  451.         rUTXH1 = data;
  452.     }   
  453.     else if(whichUart==2)
  454.     {
  455.         if(data=='\n')
  456.         {
  457.             while(!(rUTRSTAT2 & 0x2));
  458.             //Delay(1);                 //because the slow response of hyper_terminal
  459.             rUTXH2 = '\r';
  460.         }
  461.         while(!(rUTRSTAT2 & 0x2));   //Wait until THR is empty.
  462.         //Delay(1);
  463.         rUTXH2 = data;
  464.     }      
  465. }               

  466. //====================================================================
  467. void Uart_SendString(char *pt)
  468. {
  469.     while(*pt)
  470.         Uart_SendByte(*pt++);
  471. }

  472. //=====================================================================
  473. //If you don't use vsprintf(), the code size is reduced very much.
  474. void Uart_Printf(char *fmt,...)
  475. {
  476.     va_list ap;
  477.     char string[256];

  478.     va_start(ap,fmt);
  479.     vsprintf(string,fmt,ap);
  480.     Uart_SendString(string);
  481.     va_end(ap);
  482. }


  483. //**************************[ BOARD LED ]*********************************
  484. void Led_Display(int data)
  485. {
  486.           //Active is low.(LED On)
  487.           // GPF7  GPF6   GPF5   GPF4
  488.           //nLED_8 nLED4 nLED_2 nLED_1
  489. //    rGPFDAT = (rGPFDAT & 0xf) | !((data & 0xf)<<4);
  490. //    rGPFDAT = (rGPFDAT & ~(0xf<<4)) | ((~data & 0xf)<<4);   
  491.           //Active is low.(LED On)
  492.           // GPF7  GPF6   GPF5   GPF4
  493.           //nLED_8 nLED4 nLED_2 nLED_1
  494.         //    rGPFDAT = (rGPFDAT & 0xf) | !((data & 0xf)<<4);
  495.         rGPBDAT = (rGPBDAT & ~(0xf<<5)) | ((~data & 0xf)<<5);  
  496.         //rGPCDAT = (rGPBDAT & ~(0xf<<5)) | ((~data & 0xf0)<<5);   
  497. }

  498. //***************************[ BOARD BEEP ]*******************************
  499. /*
  500. void Beep(U32 freq, U32 ms)
  501. {
  502.         rGPBCON &= ~3;                        //set GPB0 as tout0, pwm output
  503.         rGPBCON |= 2;
  504.                
  505.         rTCFG0 &= ~0xff;
  506.         rTCFG0 |= 15;                        //prescaler = 15+1
  507.         rTCFG1 &= ~0xf;
  508.         rTCFG1 |= 2;                        //mux = 1/8
  509.         rTCNTB0 = (PCLK>>7)/freq;
  510.         rTCMPB0 = rTCNTB0>>1;        // 50%
  511.         rTCON &= ~0x1f;
  512.         rTCON |= 0xb;                        //disable deadzone, auto-reload, inv-off, update TCNTB0&TCMPB0, start timer 0
  513.         rTCON &= ~2;                        //clear manual update bit
  514.        
  515.         Delay(ms);
  516.        
  517.        
  518.         rGPBCON &= ~3;                        //set GPB0 as output
  519.         rGPBCON |= 1;
  520.         rGPBDAT &= ~1;
  521. }*/
  522. void Buzzer_Freq_Set( U32 freq )
  523. {
  524.         rGPBCON &= ~3;                        //set GPB0 as tout0, pwm output
  525.         rGPBCON |= 2;
  526.                
  527.         rTCFG0 &= ~0xff;
  528.         rTCFG0 |= 15;                        //prescaler = 15+1
  529.         rTCFG1 &= ~0xf;
  530.         rTCFG1 |= 2;                        //mux = 1/8
  531.         rTCNTB0 = (PCLK>>7)/freq;
  532.         rTCMPB0 = rTCNTB0>>1;        // 50%
  533.         rTCON &= ~0x1f;
  534.         rTCON |= 0xb;                        //disable deadzone, auto-reload, inv-off, update TCNTB0&TCMPB0, start timer 0
  535.         rTCON &= ~2;                        //clear manual update bit
  536. }

  537. void Buzzer_Stop( void )
  538. {
  539.         rGPBCON &= ~3;                        //set GPB0 as output
  540.         rGPBCON |= 1;
  541.         rGPBDAT &= ~1;
  542. }

  543. //***************************[ BOARD BEEP ]*******************************
  544. void Beep(U32 freq, U32 ms)
  545. {
  546.         Buzzer_Freq_Set( freq ) ;
  547.         Delay( ms ) ;
  548.         Buzzer_Stop() ;
  549. }

  550. /****************************************************************************
  551. 【功能說明】蜂鳴器PWM測試
  552. ****************************************************************************/
  553. void BUZZER_PWM_Test( void )
  554. {
  555.         U16 freq = 1000 ;
  556.        
  557.         Uart_Printf( "\nBUZZER TEST ( PWM Control )\n" );
  558.            Uart_Printf( "Press +/- to increase/reduce the frequency of BUZZER !\n" ) ;
  559.         Uart_Printf( "Press 'ESC' key to Exit this program !\n\n" );
  560.        
  561.         Buzzer_Freq_Set( freq ) ;

  562.     while( 1 )
  563.     {
  564.                 U8 key = Uart_Getch();

  565.                 if( key == '+' )
  566.                 {
  567.                         if( freq < 20000 )
  568.                                 freq += 10 ;
  569.                                
  570.                         Buzzer_Freq_Set( freq ) ;
  571.                 }

  572.                 if( key == '-' )
  573.                 {
  574.                         if( freq > 11 )
  575.                                 freq -= 10 ;
  576.                                
  577.                         Buzzer_Freq_Set( freq ) ;
  578.                 }
  579.                
  580.                 Uart_Printf( "\tFreq = %d\n", freq ) ;
  581.                 if( key == ESC_KEY )
  582.                 {
  583.                         Buzzer_Stop() ;
  584.                         return ;
  585.                 }

  586.         }

  587. }

  588. //********************** BOARD LCD backlight ]****************************
  589. void LcdBkLtSet(U32 HiRatio)
  590. {
  591. #define FREQ_PWM1                1000

  592.         if(!HiRatio)
  593.         {
  594.                 rGPBCON  = rGPBCON & (~(3<<2)) | (1<<2) ;        //GPB1設置為output
  595.                 rGPBDAT &= ~(1<<1);
  596.                 return;
  597.         }
  598.         rGPBCON = rGPBCON & (~(3<<2)) | (2<<2) ;                //GPB1設置為TOUT1
  599.        
  600.         if( HiRatio > 100 )
  601.                 HiRatio = 100 ;       
  602.        
  603.         rTCON = rTCON & (~(0xf<<8)) ;                        // clear manual update bit, stop Timer1

  604.         rTCFG0         &= 0xffffff00;                                        // set Timer 0&1 prescaler 0
  605.         rTCFG0 |= 15;                                                        //prescaler = 15+1

  606.         rTCFG1         &= 0xffffff0f;                                        // set Timer 1 MUX 1/16
  607.         rTCFG1  |= 0x00000030;                                        // set Timer 1 MUX 1/16

  608.         rTCNTB1         = ( 100000000>>8 )/FREQ_PWM1;                //if set inverter off, when TCNT2<=TCMP2, TOUT is high, TCNT2>TCMP2, TOUT is low
  609.         rTCMPB1  = ( rTCNTB1*(100-HiRatio))/100 ;        //if set inverter on,  when TCNT2<=TCMP2, TOUT is low,  TCNT2>TCMP2, TOUT is high

  610.         rTCON = rTCON & (~(0xf<<8)) | (0x0e<<8) ;
  611.         //自動重裝,輸出取反關閉,更新TCNTBn、TCMPBn,死區控制器關閉
  612.         rTCON = rTCON & (~(0xf<<8)) | (0x0d<<8) ;                //開啟背光控制
  613. }

  614. /****************************************************************************
  615. 【功能說明】LCD背光亮度控制,PWM控制占空比
  616. ****************************************************************************/
  617. void LCD_BackLight_Control( void )
  618. {
  619.         U8 HiRatio = 50 ;               
  620.            Uart_Printf( "\nNOTE : ONLY SOME type LCD kit  SUPPORT backlight adjust!!!\n" ) ;

  621.            Uart_Printf( "Press +/- to increase/reduce the light of LCD !\n" ) ;
  622.         Uart_Printf( "Press 'ESC' to Exit this test program !\n\n" );
  623.        
  624.         LcdBkLtSet( HiRatio ) ;

  625.     while( 1 )
  626.     {
  627.                 U8 key = Uart_Getch();

  628.                 if( key == '+' )
  629.                 {
  630.                         if( HiRatio < 100 )
  631.                                 HiRatio += 1 ;
  632.                 }
  633.                
  634.                 if( key == '-' )
  635.                 {
  636.                         if( HiRatio > 1 )
  637.                                 HiRatio -= 1 ;
  638.                 }
  639.                
  640.                 if( key == ESC_KEY ) break ;
  641.                
  642.                 LcdBkLtSet( HiRatio ) ;
  643.                 Uart_Printf( "LCD backlight HiRatio %d\n", HiRatio ) ;
  644.         }

  645. }

  646. //*************************[ Timer ]********************************
  647. void Timer_Start(int divider)  //0:16us,1:32us 2:64us 3:128us
  648. {
  649.     rWTCON = ((PCLK/1000000-1)<<8)|(divider<<3);  //Watch-dog timer control register
  650.     rWTDAT = 0xffff;  //Watch-dog timer data register
  651.     rWTCNT = 0xffff;  //Watch-dog count register

  652.       // Watch-dog timer enable & interrupt  disable
  653.     rWTCON = (rWTCON & ~(1<<5) & ~(1<<2)) |(1<<5);
  654. }

  655. //=================================================================
  656. int Timer_Stop(void)
  657. {
  658.     rWTCON = ((PCLK/1000000-1)<<8);
  659.     return (0xffff - rWTCNT);
  660. }


  661. //*************************[ MPLL ]*******************************
  662. void ChangeMPllValue(int mdiv,int pdiv,int sdiv)
  663. {
  664.     rMPLLCON = (mdiv<<12) | (pdiv<<4) | sdiv;
  665. }


  666. //************************[ HCLK, PCLK ]***************************
  667. /*
  668. // for 2410.
  669. void ChangeClockDivider(int hdivn,int pdivn)
  670. {
  671.      // hdivn,pdivn FCLK:HCLK:PCLK
  672.      //     0,0         1:1:1
  673.      //     0,1         1:1:2
  674.      //     1,0         1:2:2
  675.      //     1,1         1:2:4
  676.     rCLKDIVN = (hdivn<<1) | pdivn;   

  677.     if(hdivn)
  678.         MMU_SetAsyncBusMode();
  679.     else
  680.         MMU_SetFastBusMode();
  681. }
  682. */
  683. // Modified for 2440.
  684. void ChangeClockDivider(int hdivn_val,int pdivn_val)
  685. {
  686.         int hdivn=2, pdivn=0;
  687.        
  688.      // hdivn_val (FCLK:HCLK)ratio hdivn
  689.      // 11           1:1       (0)
  690.      // 12           1:2       (1)
  691.      // 13           1:3       (3)
  692.      // 14           1:4       (2)
  693.      // pdivn_val (HCLK:PCLK)ratio pdivn
  694.      // 11           1:1       (0)
  695.      // 12           1:2       (1)
  696.         switch(hdivn_val) {
  697.                 case 11: hdivn=0; break;
  698.                 case 12: hdivn=1; break;
  699.                 case 13:
  700.                 case 16: hdivn=3; break;
  701.                 case 14:
  702.                 case 18: hdivn=2; break;
  703.         }
  704.        
  705.         switch(pdivn_val) {
  706.                 case 11: pdivn=0; break;
  707.                 case 12: pdivn=1; break;
  708.         }
  709.        
  710.         //Uart_Printf("Clock division change [hdiv:%x, pdiv:%x]\n", hdivn, pdivn);
  711.         rCLKDIVN = (hdivn<<1) | pdivn;

  712.         switch(hdivn_val) {
  713.                 case 16:                // when 1, HCLK=FCLK/8.
  714.                         rCAMDIVN = (rCAMDIVN & ~(3<<8)) | (1<<8);
  715.                 break;
  716.                 case 18:         // when 1, HCLK=FCLK/6.
  717.                         rCAMDIVN = (rCAMDIVN & ~(3<<8)) | (1<<9);
  718.                 break;
  719.         }
  720.        
  721.     if(hdivn!=0)
  722.         MMU_SetAsyncBusMode();
  723.     else
  724.         MMU_SetFastBusMode();
  725. }



  726. //**************************[ UPLL ]*******************************
  727. void ChangeUPllValue(int mdiv,int pdiv,int sdiv)
  728. {
  729.     rUPLLCON = (mdiv<<12) | (pdiv<<4) | sdiv;
  730. }


  731. //*************************[ General Library ]**********************
  732. void * malloc(unsigned nbyte)
  733. //Very simple; Use malloc() & free() like Stack
  734. //void *mallocPt=Image$RW$Limit;
  735. {
  736.     void *returnPt = mallocPt;

  737.     mallocPt = (int *)mallocPt+nbyte/4+((nbyte%4)>0); //To align 4byte

  738.     if( (int)mallocPt > HEAPEND )
  739.     {
  740.         mallocPt = returnPt;
  741.         return NULL;
  742.     }
  743.     return returnPt;
  744. }

  745. //-------------------------------------------------------------------
  746. void free(void *pt)
  747. {
  748.     mallocPt = pt;
  749. }
復制代碼




回復

使用道具 舉報

無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
精品3atv在线视频| 91麻豆精品在线观看| 日韩不卡免费高清视频| 午夜丝袜av电影| 99re8这里只有精品| 欧美俄罗斯性视频| 欧美性videosxxxxx| 91在线你懂得| 久久激情综合| 久久不见久久见免费视频7| 久久99亚洲网美利坚合众国| av免费在线播放| 天天摸夜夜添狠狠添婷婷| 中文字幕在线观看成人| 天天综合天天添夜夜添狠狠添| 日本日本精品二区免费| 日韩女优在线播放| 亚洲欧美国内爽妇网| 欧美性xxxx| 国产欧美一二三区| 精品一区二区影视| 欧美体内she精视频在线观看| 久久精品国产免费观看99| 久久99精品波多结衣一区| 亚洲色图欧美日韩| 宅男噜噜噜66国产免费观看| 亚洲在线色站| 国产精品久久久久久免费观看 | 成人黄色免费电影| 777片理伦片在线观看| 激情网站在线观看| 玖玖爱这里只有精品| www.啪啪.com| 中文字幕第100页| 免费看黄在线看| 伊人久久大香线蕉成人综合网| 97人人香蕉| 国产精品欧美亚洲777777| 色噜噜国产精品视频一区二区| 欧美www视频| 欧美日韩国产大片| 日本丰满少妇一区二区三区| 亚洲一区二区三区在线播放| 亚洲国产精品精华液ab| 成人av网站在线| 国内精品国产成人| 热久久免费视频| 天堂蜜桃91精品| 激情在线视频播放| 国产高清视频免费最新在线| 日本桃色视频| 久草在线在线视频| 嫩草影院一二三| 国产精选在线视频拍拍拍| 美女把腿扒开让男人桶免费| 日韩一卡二卡在线| 精品人妻一区二区三区日产乱码卜| 男人插女人下面免费视频| 97在线免费视频观看| 在线不卡日本| 在线精品日韩| 在线免费观看成人网| 亚洲三级一区| a级黄色片网站| 99久久久无码国产精品性色戒| 性刺激综合网| 日韩偷拍一区二区| 亚洲国产高清国产精品| 亚洲精品中文字幕在线| 自拍另类欧美| 嫩草影院中文字幕| 天天夜碰日日摸日日澡性色av| 轻点好疼好大好爽视频| 国产av天堂无码一区二区三区| 国产一级爱c视频| 亚洲色成人一区二区三区小说| 久久国产成人精品国产成人亚洲| av天堂永久资源网| 亚洲色图38p| 国产乱人伦真实精品视频| 国产精品久久综合av爱欲tv| 国产精品视频网| 91国产丝袜在线放| 免费久久一级欧美特大黄 | 精品国产乱码久久久久久夜甘婷婷| 欧美一区二区黄| 日韩av在线播放资源| 亚洲欧美激情另类校园| 欧美日韩成人在线播放| 欧美在线日韩在线| 91免费视频网站| 久久久久一区二区| 成人国产一区二区三区| 蜜臀久久99精品久久久酒店新书| 亚洲a级黄色片| 国产人妻大战黑人20p| 5566中文字幕| 国产精品51麻豆cm传媒| 亚洲福利在线观看视频| 偷窥韩漫第三季| 黄色网址网站在线观看| 美女网站在线| 久久av色综合| 99re6热只有精品免费观看| 欧美色图激情小说| 午夜亚洲性色视频| 99视频在线精品| 亚洲电影中文字幕在线观看| 91精品在线麻豆| 一区二区三区四区视频| 日本精品视频网站| 欧美一区二区三区四区夜夜大片| 成人毛片100部免费看| 高潮一区二区三区| 国产一区在线观看免费| 久久这里只有精品9| 先锋影视中文字幕| 国产91福利| 天堂av最新在线| 8x国产一区二区三区精品推荐| 日韩国产在线| 精品一区二区三区视频| 亚洲视频一区二区在线观看| 欧美日免费三级在线| 中文字幕欧美日韩| 91精品久久久久久久久久入口 | 91成人在线视频| 久久久久一区二区三区| 一本大道熟女人妻中文字幕在线 | 免费在线观看av电影| 麻豆一区在线| 亚洲高清网站| 欧美国产视频在线| 欧美久久久久久久久久| 欧美床上激情在线观看| 国产一区免费在线| 亚洲天堂av线| 黄色一级视频免费| 爱福利一区二区| 蜜臀在线观看| 欧美日韩国产网站| 99riav视频一区二区| 不卡视频在线| 国产一区二区三区av电影| 亚洲综合丝袜美腿| 国产亚洲人成a一在线v站| 成人乱色短篇合集| 精品一卡二卡三卡| 久久综合综合久久| 国内精品久久久久久不卡影院| 污视频在线看操| 日本伊人久久| 麻豆91精品91久久久的内涵| 亚洲国产cao| 中文字幕亚洲字幕| 欧美色图亚洲自拍| 韩国av中国字幕| 一级日韩一级欧美| 国产精品三级a三级三级午夜| 成人美女大片| 亚洲综合电影一区二区三区| 亚洲三级电影网站| xvideos亚洲| 日韩电影免费观看在| 久久久午夜精品福利内容| 国产伦精品一区二区三区四区 | 日韩国产成人| 国产视频中文字幕在线观看| 国产欧美日韩影院| 91麻豆高清视频| 亚洲精品久久久久中文字幕欢迎你| 成人欧美在线观看| 日韩高清在线一区二区| 国产精品毛片久久久久久久av| 男女激情网站| 一区二区在线免费播放| 大白屁股一区二区视频| 日韩欧美电影一二三| 96成人在线视频| 久久久久亚洲av无码网站| 精品免费久久久| 国产福利在线观看| 午夜久久免费观看| 亚洲综合一区二区| 4438全国成人免费| 亚洲综合色在线观看| 国产精品视频在| 中文字幕欧美日韩久久| 手机在线免费看av| 亚洲神马久久| 欧美午夜不卡视频| 97人人香蕉| 五月天精品视频| 国产人成免费视频| 成人福利av| 国产精品1区2区| 国产视频一区在线| 在线看无码的免费网站| 国产在线拍揄自揄拍| 成人高清免费| 亚洲专区视频| 亚洲理论在线观看| 亚洲欧美福利视频| 亚洲午夜精品久久| 日韩精品一区二区三| 日韩av电影免费| 精品一区二区三区中文字幕老牛| 日韩理论片一区二区| 欧美一区亚洲一区| 日本精品一二三区| 精品一区二区三区在线观看l| 欧美极品免费| 99视频在线精品| 欧美xxxx做受欧美.88| 欧美精品第三页| 天堂在线观看av| 欧美调教sm| 99久久综合国产精品| 久久亚洲精品国产亚洲老地址| 黄色一级片播放| 亚洲乱码在线观看| 成人ssswww在线播放| 国产一区91精品张津瑜| 日韩最新中文字幕电影免费看| 丝袜老师办公室里做好紧好爽| 国产又大又粗又硬| 伦理av在线| 成人动漫在线一区| 欧美激情性做爰免费视频| 色悠悠久久综合网| 欧美最猛黑人xxxx黑人猛交黄| 四虎4545www精品视频| 国产偷国产偷精品高清尤物| 91国自产精品中文字幕亚洲| 精品人妻一区二区三区日产| 日日爱夜夜操| 欧美人与拘性视交免费看| 欧美性猛交xxxxx免费看| 欧美少妇一区| 一区二区国产欧美| 日韩av影片| 欧美国产一区在线| 亚洲一区二区三区成人在线视频精品 | 99精品国产一区二区三区| 日韩欧美在线中文字幕| 欧美另类高清视频在线| 国产精品51麻豆cm传媒| а_天堂中文在线| 91免费看视频| 国产日韩欧美另类| 久久99久久98精品免观看软件| 日本福利片高清在线观看| 日韩中文字幕一区二区三区| 一级做a爰片久久毛片美女图片| 日本不卡一区二区在线观看| 成人午夜国产福到在线| 红桃视频在线观看一区二区| 欧美精品aⅴ在线视频| 91午夜在线观看| 日韩在线一二三| 国产免费久久| 欧美精品一区二区精品网| 欧美日韩亚洲一| 国产精品理人伦一区二区三区| 久久99国内| 亚洲成av人影院在线观看| 毛葺葺老太做受视频| 女生裸体无遮挡天堂网站免费 | 色欲AV无码精品一区二区久久| 日本在线免费观看视频| 久久久久.com| 午夜精品久久久99热福利| 黄色精品视频在线观看| 毛片网站在线免费观看| 久久亚洲捆绑美女| 国产欧美日韩综合精品二区| 国产口爆吞精一区二区| 欧美中文高清| 欧美一级理论性理论a| 亚洲综合色在线观看| 97影院理论午夜| 久久国产精品露脸对白| 国产精品亚洲一区二区三区| 亚洲s码欧洲m码国产av| 麻豆精品蜜桃| 在线精品视频一区二区| 国产日韩一区二区在线| www黄视频| 日韩av中文字幕一区二区三区| 91国产精品91| 99热国产在线观看| 99久久亚洲国产日韩美女 | 亚洲三级一区| 久久91精品视频| 午夜在线观看免费一区| 日本乱人伦a精品| 波多野结衣黄色网址| 国产精品777777在线播放| 欧美精品日韩精品| 欧美视频国产视频| 永久在线免费观看| 久久久噜噜噜久久人人看| 欧美资源一区| 国产丝袜护土调教在线视频 | 亚洲片在线资源| 国产成人a亚洲精v品无码| 爱爱视频网站| 国产一区在线精品| 不卡一卡2卡3卡4卡精品在| 久久久久亚洲av无码专区| 中文不卡1区2区3区| 欧美天天综合网| wwwxxxx在线观看| 在线国产情侣| 亚洲成年人影院| 国产精品久久久久9999小说| 浪潮av在线| 久久精品亚洲国产奇米99| 亚洲国产激情一区二区三区| 深夜免费福利视频| 精品无码三级在线观看视频 | 窝窝社区一区二区| 久久精品美女视频网站| 99精品视频99| 偷拍亚洲精品| 欧美精品电影免费在线观看| 波多野结衣黄色网址| 午夜精品影视国产一区在线麻豆| 亚洲视频在线视频| 久久精品www人人爽人人| 成人激情久久| 伊人男人综合视频网| 日韩精品一区二区在线播放 | 国产精品无码在线| 国产亚av手机在线观看| 欧美人与禽zozo性伦| 永久免费看mv网站入口78| 另类激情视频| 精品国产人成亚洲区| 国产大学生自拍| 亚洲91网站| 欧美精品在线观看91| 国产精品伊人久久 | 亚洲一区二区三区日韩| 欧美天堂一区| 中文字幕日韩精品在线| 一级黄色在线视频| 天天射综合网视频| 91精品一区二区| 国产成人久久精品77777| 国产69精品久久久久777| 四虎免费在线观看视频| 一级毛片电影| 亚洲一区二区三区四区在线观看 | 一级片avav网址| 国产精品网曝门| 日本免费色视频| 男人天堂视频在线观看| 亚洲精品在线不卡| 无码任你躁久久久久久久| 在线一区免费| 国产伦精品一区二区三区免| 嫩草影院入口一二三免费| 亚洲国产成人一区二区三区| 少妇网站在线观看| 国产免费拔擦拔擦8x高清在线人 | 欧美性猛交xxx| 欧美福利第一页| 久久久久97| 日本精品视频网站| 国产精品人人| 中文字幕成人在线观看| 久久久久亚洲av无码麻豆| 欧美精品高清| 色中色综合影院手机版在线观看 | 久久久久亚洲天堂| 色呦哟—国产精品| 91传媒在线免费观看| 麻豆入口视频在线观看| 一区二区三区.www| 99久久久无码国产精品性| 欧美美女在线直播| 亚洲在线第一页| 丁香婷婷激情| 在线观看不卡一区| 免费在线观看国产精品| 亚欧美无遮挡hd高清在线视频| 国产精品高清一区二区三区| 国产一级粉嫩xxxx| 欧美午夜精品久久久久久超碰| 久久一级黄色片| 亚洲小说欧美另类社区| 一区二区精品免费视频| 国产小视频免费在线网址| 欧美一区日韩一区| 中文字幕久久熟女蜜桃| 免费人成在线不卡| 久久人妻精品白浆国产| 欧美与亚洲与日本直播| 69视频在线免费观看|