亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mcg.c

?? [拉普蘭德]TSL1401線性CCD模塊資料包
?? C
?? 第 1 頁 / 共 2 頁
字號:
int fll_freq(int fll_ref)
{
  int fll_freq_khz;
  
  if (MCG_C4 & MCG_C4_DMX32_MASK) // if DMX32 set
  {
    switch ((MCG_C4 & MCG_C4_DRST_DRS_MASK) >> MCG_C4_DRST_DRS_SHIFT) // determine multiplier based on DRS
    {
    case 0:
      fll_freq_khz = ((fll_ref * 732) / 1000);
      break;
    case 1:
      fll_freq_khz = ((fll_ref * 1464) / 1000);
      break;
    case 2:
      fll_freq_khz = ((fll_ref * 2197) / 1000);
      break;
    case 3:
      fll_freq_khz = ((fll_ref * 2929) / 1000);
      break;
    }
  }
  else // if DMX32 = 0
  {
    switch ((MCG_C4 & MCG_C4_DRST_DRS_MASK) >> MCG_C4_DRST_DRS_SHIFT) // determine multiplier based on DRS
    {
    case 0:
      fll_freq_khz = ((fll_ref * 640) / 1000);
      break;
    case 1:
      fll_freq_khz = ((fll_ref * 1280) / 1000);
      break;
    case 2:
      fll_freq_khz = ((fll_ref * 1920) / 1000);
      break;
    case 3:
      fll_freq_khz = ((fll_ref * 2560) / 1000);
      break;
    }
  }    
  return fll_freq_khz;
} // fll_freq

int fei_fbe(unsigned char crystal_val, unsigned char hgo_val)
{
  unsigned char frdiv_val;
  int i;
  
  if ((crystal_val > 15) && (crystal_val != 24)) {return 1;} // return 1 if one of the available crystal options is not available
  
  if (hgo_val > 0)
  {
    hgo_val = 1; // force hgo_val to 1 if > 0
  }

#if (defined(K60_CLK))
     MCG_C2 = MCG_C2_RANGE(1); // select external clock and set range to provide correct FRDIV range
#else
// Enable external oscillator, select range based on crystal frequency
  if (crystal_val < 4)
  {
    MCG_C2 = MCG_C2_RANGE(1) | (MCG_C2_HGO_MASK << MCG_C2_HGO_SHIFT) | MCG_C2_EREFS_MASK;
  }
  else
  {
    MCG_C2 = MCG_C2_RANGE(2) | (MCG_C2_HGO_MASK << MCG_C2_HGO_SHIFT) | MCG_C2_EREFS_MASK;
  }
#endif

  switch (crystal_val) // determine FRDIV based on reference clock frequency
    {
    case 0:
      frdiv_val = 1;
      break;
    case 1:
      frdiv_val = 2;
      break;
    case 2:
    case 3:
    case 4:
      frdiv_val = 3;
      break;
    case 5:
    case 6:
    case 7:
    case 8:
    case 9:
      frdiv_val = 4;
      break;
    default:
      frdiv_val = 5;        
      break;
    }
// Select external oscilator and Reference Divider and clear IREFS to start ext osc
// CLKS=2, FRDIV=frdiv_val, IREFS=0, IRCLKEN=0, IREFSTEN=0
  MCG_C1 = MCG_C1_CLKS(2) | MCG_C1_FRDIV(frdiv_val);

  /* if we aren't using an osc input we don't need to wait for the osc to init */
#if (!defined(K60_CLK))
//  while (!(MCG_S & MCG_S_OSCINIT_MASK)){};  // wait for oscillator to initialize
  for (i = 0 ; i < 10000 ; i++)
  {
    if (MCG_S & MCG_S_OSCINIT_MASK) break; // jump out early if OSCINIT sets before loop finishes
  }
  if (!(MCG_S & MCG_S_OSCINIT_MASK)) return 2; // check bit is really set and return with error if not set
#endif

//  while (MCG_S & MCG_S_IREFST_MASK){}; // wait for Reference clock Status bit to clear
  for (i = 0 ; i < 2000 ; i++)
  {
    if (!(MCG_S & MCG_S_IREFST_MASK)) break; // jump out early if IREFST clears before loop finishes
  }
  if (MCG_S & MCG_S_IREFST_MASK) return 3; // check bit is really clear and return with error if not set
  
//  while (((MCG_S & MCG_S_CLKST_MASK) >> MCG_S_CLKST_SHIFT) != 0x2){}; // Wait for clock status bits to show clock source is ext ref clk
  for (i = 0 ; i < 2000 ; i++)
  {
    if (((MCG_S & MCG_S_CLKST_MASK) >> MCG_S_CLKST_SHIFT) == 0x2) break; // jump out early if CLKST shows EXT CLK slected before loop finishes
  }
  if (((MCG_S & MCG_S_CLKST_MASK) >> MCG_S_CLKST_SHIFT) != 0x2) return 4; // check EXT CLK is really selected and return with error if not
  
  return ((crystal_val + 1) * 2 * 1000); // MCGOUT frequency in kHz = crystal value * 2 * 1000

// Now in FBE
}

void fbe_pbe(unsigned char prdiv_val, unsigned char vdiv_val)
{  
  MCG_C5 = MCG_C5_PRDIV(prdiv_val);    //set PLL ref divider

// the PLLS bit is set to enable the PLL, MCGOUT still sourced from ext ref clk  
  MCG_C6 = MCG_C6_PLLS_MASK | MCG_C6_VDIV(24);
  
  while (!(MCG_S & MCG_S_PLLST_MASK)){}; // wait for PLL status bit to set

  while (!(MCG_S & MCG_S_LOCK_MASK)){}; // Wait for LOCK bit to set
// now in PBE 
// PBE frequency = FBE frequency, no need to change frequency
}

int pbe_pee(unsigned char crystal_val)
{
  unsigned char prdiv, vdiv;  
  MCG_C1 &= ~MCG_C1_CLKS_MASK; // switch CLKS mux to select PLL as MCG_OUT
  // Wait for clock status bits to update 
  while (((MCG_S & MCG_S_CLKST_MASK) >> MCG_S_CLKST_SHIFT) != 0x3){} 

  prdiv = ((MCG_C5 & MCG_C5_PRDIV_MASK) + 1);
  vdiv = ((MCG_C6 & MCG_C6_VDIV_MASK) + 24);
  
  return (((((crystal_val + 1) * 2)/prdiv) * vdiv) * 1000); //calculate PLL output frequency
}

int pee_pbe(unsigned char crystal_val)
{  
  MCG_C1 |= MCG_C1_CLKS(2); // switch CLKS mux to select external reference clock as MCG_OUT
  // Wait for clock status bits to update 
  while (((MCG_S & MCG_S_CLKST_MASK) >> MCG_S_CLKST_SHIFT) != 0x2){}; 

return ((crystal_val + 1) * 2000); // MCGOUT frequency in kHz

} // pee_pbe, freq = REF_CLK

void pbe_fbe(void)
{
  MCG_C6 &= ~MCG_C6_PLLS_MASK; // clear PLLs to disable PLL, still clocked from ext ref clk
  
  while (MCG_S & MCG_S_PLLST_MASK){}; // wait for PLLS status bit to set
// FBE frequency = PBE frequency, no need to change frequency  
} 

void fbe_fbi_fast(void)
{
  unsigned char temp_reg;
  
  MCG_C2 |= MCG_C2_IRCS_MASK; // select fast IRC by setting IRCS
  
  temp_reg = MCG_C1;
  temp_reg &= ~MCG_C1_CLKS_MASK;
  temp_reg |= MCG_C1_CLKS(1); // select IRC as MCGOUT
  MCG_C1 = temp_reg; // update MCG_C1
  
  while (!(MCG_S & MCG_S_IRCST_MASK)){}; // wait until internal reference switches to fast clock.
  
  while (((MCG_S & MCG_S_CLKST_MASK) >> MCG_S_CLKST_SHIFT) != 0x1){}; // Wait for clock status bits to update
// fast IRC clock speed is determined by FCTRIM value and must be trimmed to a known frequency
} //fbe_fbi_fast

void fbe_fbi_slow(void)
{
  unsigned char temp_reg;
  
  MCG_C2 &= ~MCG_C2_IRCS_MASK; // select slow IRC by clearing IRCS
  
  temp_reg = MCG_C1;
  temp_reg &= ~MCG_C1_CLKS_MASK;
  temp_reg |= MCG_C1_CLKS(1); // select IRC as MCGOUT
  MCG_C1 = temp_reg; // update MCG_C1
  
  while (!(MCG_S & MCG_S_IRCST_MASK)){}; // wait until internal reference switches to fast clock.
  
  while (((MCG_S & MCG_S_CLKST_MASK) >> MCG_S_CLKST_SHIFT) != 0x1){}; // Wait for clock status bits to update
// fast IRC clock speed is determined by FCTRIM value and must be trimmed to a known frequency
} //fbe_fbi_slow

void fbi_blpi(void)
{ 
  MCG_C2 |= MCG_C2_LP_MASK; //set LP bit to disable the FLL 
// no change in MCGOUT frequency  
} 


int atc (unsigned char irc, int irc_freq)
{
    uint32 temp_reg = 0;
    unsigned char temp_reg8 = 0;
    uint32 orig_SIM_CLKDIV1;
    unsigned short atcv;
    unsigned char clks_val;
    unsigned int i;
             
    printf("\n-------------------------------------------\n");
    printf("  MCG AutoTrim Utility\n");
    printf("-------------------------------------------\n");
    printf("\n");
    {
        if (irc > 0) // force irc to 1 if greater than 0
        {
          irc = 1;
        }
        
        clks_val = ((MCG_C1 & MCG_C1_CLKS_MASK) >> 6);
        
        if (((clks_val == 1) || (clks_val ==3)))
        {
          printf("\nAuto trim error - cannot use the internal clock source.\r\n\n");
          return 1; //error using IRC as system clock
        }
              
        if ((clks_val == 0) && (!(MCG_C6 & MCG_C6_PLLS_MASK)) && (MCG_C1 & MCG_C1_IREFS_MASK))
        {
          printf("\nAuto trim error - cannot use the FLL with internal clock source.\r\n\n");
          return 2; // error using FLL with IRC
        }
        if (((MCG_S & MCG_S_CLKST_MASK) >> MCG_S_CLKST_SHIFT) != 3)
        {
          printf("\nWARNING - PLL is not the internal clock source. Auto trim value will not be correct\r\n\n");
        }
                
        if(!irc) //determine if slow or fast IRC to be trimmed
        {
          if (irc_freq < 31250) // check frequency is above min spec.
          {
            printf("\nAuto trim error - target frequency is below 31250 Hz.\r\n\n");
            return 3;
          }
          if (irc_freq > 39062) // check frequency is below max spec.
          {
            printf("\nAuto trim error - target frequency is above 39062 Hz.\r\n\n");
            return 4;
          }         
        }
        else
        {
          if (irc_freq < 3000000) // check frequency is above min spec.
          {
            printf("\nAuto trim error - target frequency is below 3 MHz.\r\n\n");
            return 5;
          }
          if (irc_freq > 5000000) // check frequency is below max spec.
          {
            printf("\nAuto trim error - target frequency is above 5 MHz.\r\n\n");
            return 6;
          }            
        } // if
        for (i=0;i<0xffff;i++);
        orig_SIM_CLKDIV1 = SIM_CLKDIV1;        // backup current divider value
        temp_reg = SIM_CLKDIV1;                // bus clock needs to be between 8 and 16 MHz
        temp_reg &= ~SIM_CLKDIV1_OUTDIV2_MASK; // clear bus divider field
        temp_reg |= SIM_CLKDIV1_OUTDIV2(5);    //divide 96MHz PLL by 6 = 16MHz bus clock
        SIM_CLKDIV1 = temp_reg; 
// Set up autocal registers, must use floating point calculation
        if (irc)
          atcv = (unsigned short)(128.0f * (21.0f * (16000000.0f / (float)irc_freq))); 
        else
          atcv = (unsigned short)(21.0f * (16000000.0f / (float)irc_freq));
        
        MCG_ATCVL = (atcv & 0xFF); //Set ATCVL to lower 8 bits of count value
        MCG_ATCVH = ((atcv & 0xFF00) >> 8); // Set ATCVH to upper 8 bits of count value

// Enable autocal
        MCG_ATC = 0x0; // clear auto trim control register
        temp_reg8 |= (MCG_ATC_ATME_MASK | (irc << MCG_ATC_ATMS_SHIFT)); //Select IRC to trim and enable trim machine
        MCG_ATC = temp_reg8;
        
        while (MCG_ATC & MCG_ATC_ATME_MASK) {}; //poll for ATME bit to clear
        
        SIM_CLKDIV1 = orig_SIM_CLKDIV1; //restore the divider value
        
        if (MCG_ATC & MCG_ATC_ATMF_MASK) // check if error flag set
        {
          printf("Autotrim error.\r\n\n");
          printf("\n");
          printf("MCG_C1   = %#02X \r\n", (MCG_C1));
          printf("MCG_C2   = %#02X \r\n", (MCG_C2));
          printf("MCG_C3   = %#02X \r\n", (MCG_C3));
          printf("MCG_C4   = %#02X \r\n", (MCG_C4)) ;
          printf("MCG_C5   = %#02X \r\n", (MCG_C5));
          printf("MCG_C6   = %#02X \r\n\n", (MCG_C6));
          printf("MCG_S    = %#02X \r\n\n", (MCG_S)) ;
          printf("MCG_ATC   = %#02X \r\n",   (MCG_ATC)) ;
          printf("MCG_ATCVL = %#02X \r\n",   (MCG_ATCVL)) ;
          printf("MCG_ATVCH = %#02X \r\n",   (MCG_ATCVH));
          MCG_ATC |= MCG_ATC_ATMF_MASK; // clear fail flag
          return 7;
        } 
        else 
        {      
          printf("Autotrim Passed.\r\n\n");
          printf("MCG_C3   = %#02X \r\n", (MCG_C3));
          printf("MCG_C4   = %#02X \r\n", (MCG_C4));
          // Check trim value is not at either extreme of the range
          if (!irc)
          {
            if ((MCG_C3 == 0xFF) || (MCG_C3 == 0))
            {
              printf("\nAutotrim result is not valid.\r\n\n");
              return 8;
            }
          }
          else
          {
            if ((((MCG_C4 & MCG_C4_FCTRIM_MASK) >> MCG_C4_FCTRIM_SHIFT) == 0xF) ||
              (((MCG_C4 & MCG_C4_FCTRIM_MASK) >> MCG_C4_FCTRIM_SHIFT) == 0))
            {
              printf("\nAutotrim result is not valid.\r\n\n");
              return 8;
            }
          }
        }
          
    }// end else
    return irc;
}// end atc

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91丨九色丨尤物| 久久国产婷婷国产香蕉| 午夜视频久久久久久| 黄色日韩网站视频| 欧美丝袜丝交足nylons| 欧美精品xxxxbbbb| 欧美一级久久久| 国产精品视频免费| 本田岬高潮一区二区三区| 久久久高清一区二区三区| 精品国产污污免费网站入口| 亚洲曰韩产成在线| 色www精品视频在线观看| 国产欧美一区二区精品忘忧草| 国产精品久久久久久久第一福利 | 色屁屁一区二区| 欧美大片一区二区三区| 亚洲成人免费影院| 波多野结衣中文一区| 久久精品一区二区三区四区| 丝袜美腿亚洲综合| 欧美三片在线视频观看| 亚洲色图视频网| 99视频精品在线| 亚洲图片欧美激情| 在线视频一区二区三区| 一区二区成人在线| 欧美少妇性性性| 精品剧情v国产在线观看在线| 亚洲午夜一区二区| 精品视频一区三区九区| 亚洲国产sm捆绑调教视频| 一本一道久久a久久精品| 18欧美乱大交hd1984| 91亚洲资源网| 亚洲精品免费在线观看| 色播五月激情综合网| 亚洲自拍欧美精品| 欧美人与性动xxxx| 日本不卡高清视频| 久久精品亚洲麻豆av一区二区 | 中文无字幕一区二区三区| 国产一区二区三区电影在线观看| 久久久久久9999| av成人免费在线观看| 一区二区三区丝袜| 777欧美精品| 精品亚洲成a人| 国产精品灌醉下药二区| 在线观看亚洲精品视频| 日本最新不卡在线| 国产亚洲人成网站| 在线观看亚洲成人| 久久国产精品色婷婷| 国产精品美女一区二区| 欧美性xxxxx极品少妇| 久久国产精品区| 国产精品嫩草影院com| 欧美在线制服丝袜| 国产精品 日产精品 欧美精品| 国产精品久久影院| 欧美电影影音先锋| 成人精品国产免费网站| 亚洲一区二区美女| 国产视频视频一区| 欧美精品在欧美一区二区少妇| 国产精品538一区二区在线| 一区二区三区电影在线播| 日韩一级免费观看| 91免费国产在线观看| 久久国产精品区| 亚洲另类在线制服丝袜| 日韩欧美高清在线| 91福利小视频| 国产福利一区二区三区视频在线| 亚洲自拍都市欧美小说| 国产精品水嫩水嫩| 欧美一区日韩一区| 一本色道久久综合亚洲aⅴ蜜桃| 激情综合网天天干| 午夜精品久久久久久久蜜桃app| 久久久不卡影院| 日韩欧美国产一区在线观看| 日本丰满少妇一区二区三区| 国产剧情一区在线| 亚洲18影院在线观看| 国产精品久久久久久久裸模 | 日本精品视频一区二区| 麻豆久久久久久| 亚洲第一主播视频| 一区二区三区精品在线| 国产精品久久久久影院亚瑟| 精品国产乱码久久久久久蜜臀| 欧美日韩一卡二卡| 91免费在线播放| 99久久伊人精品| 成人的网站免费观看| 国产999精品久久| 久久国产婷婷国产香蕉| 免费成人av在线播放| 亚洲一卡二卡三卡四卡无卡久久| 亚洲天堂成人网| 国产精品剧情在线亚洲| 国产精品国产三级国产有无不卡| 国产午夜精品久久久久久久| 久久九九国产精品| 国产三级一区二区| 日本一区二区三区免费乱视频| 2020国产精品| 久久综合九色综合欧美就去吻| 欧美zozozo| 久久精品一区八戒影视| 欧美国产精品中文字幕| 国产精品全国免费观看高清| 国产精品日产欧美久久久久| 中文字幕高清一区| 国产精品激情偷乱一区二区∴| 亚洲视频精选在线| 亚洲精品综合在线| 一个色综合av| 三级久久三级久久久| 奇米精品一区二区三区在线观看一| 肉色丝袜一区二区| 久久狠狠亚洲综合| 丁香另类激情小说| 色综合久久久久久久久| 欧美军同video69gay| 日韩视频免费观看高清在线视频| wwwwww.欧美系列| 中文字幕在线不卡| 亚洲一区二区影院| 日韩国产欧美在线播放| 精品写真视频在线观看| 国产成人av一区二区三区在线| kk眼镜猥琐国模调教系列一区二区| 99久久国产综合色|国产精品| 色久综合一二码| 日韩午夜激情免费电影| 国产精品私人影院| 日韩精品电影一区亚洲| 国产一区二区三区四| 91麻豆文化传媒在线观看| 欧美高清www午色夜在线视频| 精品不卡在线视频| 亚洲色图一区二区三区| 99精品欧美一区二区三区综合在线| 在线观看91精品国产入口| 91精品欧美综合在线观看最新 | 2021中文字幕一区亚洲| 最新中文字幕一区二区三区| 日韩av中文在线观看| 福利一区在线观看| 欧美区视频在线观看| 国产欧美va欧美不卡在线| 亚洲永久免费av| 丁香六月综合激情| 91精品国产一区二区三区| 国产欧美日韩精品一区| 午夜日韩在线观看| jiyouzz国产精品久久| 日韩欧美亚洲国产精品字幕久久久| 欧美国产日韩一二三区| 日本欧美肥老太交大片| 一本色道久久综合亚洲aⅴ蜜桃| 精品国产91亚洲一区二区三区婷婷| 亚洲欧美日韩国产成人精品影院| 激情文学综合丁香| 欧美日韩亚洲国产综合| 最近日韩中文字幕| 丁香婷婷综合激情五月色| 欧美一级夜夜爽| 亚洲123区在线观看| 一本大道久久a久久精二百| 国产日韩av一区二区| 老司机午夜精品99久久| 欧美午夜影院一区| 亚洲女人的天堂| 粉嫩嫩av羞羞动漫久久久 | 国产91在线看| 日韩精品中文字幕在线不卡尤物| 亚洲成人激情社区| 91九色02白丝porn| 亚洲免费观看高清| 成人黄色777网| 国产精品视频线看| 国产精华液一区二区三区| 亚洲精品在线三区| 日本三级韩国三级欧美三级| 91成人免费在线| 亚洲精品欧美激情| 色久综合一二码| 一片黄亚洲嫩模| 欧美性大战久久久久久久| 亚洲国产精品一区二区www| 欧美在线视频你懂得| 亚洲成av人片观看| 欧美日韩国产首页| 日韩国产欧美三级| 精品剧情v国产在线观看在线| 激情综合色综合久久|