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

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

?? hal_adc.c

?? Kinetis_K60開源底層驅動開發包(20120328)
?? C
字號:
/*
 * 測試硬件平臺:LPLD_K60 Card
 * 版權所有:北京拉普蘭德電子技術有限公司
 * 網絡銷售:http://laplenden.taobao.com
 * 公司門戶:http://www.lpld.cn
 *
 * 文件名: HAL_ADC.c
 * 用途: ADC底層模塊相關函數
 * 最后修改日期: 20120323
 *
 * 開發者使用協議:
 *  本代碼面向所有使用者開放源代碼,開發者可以隨意修改源代碼。但本段及以上注釋應
 *  予以保留,不得更改或刪除原版權所有者姓名。二次開發者可以加注二次版權所有者,
 *  但應在遵守此協議的基礎上,開放源代碼、不得出售代碼本身。
 */
#include "common.h"
#include "HAL_ADC.h"


//全局變量定義
tADC_Config Adc0_Config;  // ADC0 寄存器結構體
tADC_Config Adc1_Config;  // ADC0 寄存器結構體


/*
 * LPLD_ADC_Init
 * ADC模塊通用初始化函數--用于非中斷模式、單次轉換、軟件觸發
 * 
 * 參數:
 *    adcmap--ADC寄存器基地址
 *      |__ADC0_BASE_PTR--ADC0
 *      |__ADC1_BASE_PTR--ADC1
 *    mode--AD轉換精度
 *      |__MODE_8--單端8位,差分9位
 *      |__MODE_12--單端12位,差分13位
 *      |__MODE_10--單端10位,差分11位
 *      |__MODE_16--單端16位,差分16位
 *    diff--單端輸入或差分輸入
 *      |__1--差分
 *      |__0--單端
 *
 * 輸出:
 *    0--配置錯誤
 *    1--配置成功
 */
uint8_t LPLD_ADC_Init(ADC_MemMapPtr adcmap, uint8_t mode, uint8_t diff)
{
  tADC_ConfigPtr ADC_CfgPtr;
  
  // 開啟ADC模塊時鐘
  if(adcmap == ADC0_BASE_PTR)
  {
    SIM_SCGC6 |= (SIM_SCGC6_ADC0_MASK);
    ADC_CfgPtr = &Adc0_Config;
  }
  else if(adcmap == ADC1_BASE_PTR)
  {
    SIM_SCGC3 |= (SIM_SCGC3_ADC1_MASK);
    ADC_CfgPtr = &Adc1_Config;
  }
  else
  {
    return 0;
  }
  
  // 初始化ADC
  // 首先進行32次的硬件平均校準
  ADC_CfgPtr->CONFIG1  = ADLPC_NORMAL | ADC_CFG1_ADIV(ADIV_8) | ADLSMP_LONG | ADC_CFG1_MODE(MODE_16)
                              | ADC_CFG1_ADICLK(ADICLK_BUS_2);  
  ADC_CfgPtr->CONFIG2  = MUXSEL_ADCA | ADACKEN_DISABLED | ADHSC_HISPEED | ADC_CFG2_ADLSTS(ADLSTS_20) ;
  ADC_CfgPtr->COMPARE1 = 0x1234u ; 
  ADC_CfgPtr->COMPARE2 = 0x5678u ;
  ADC_CfgPtr->STATUS2  = ADTRG_SW | ACFE_DISABLED | ACFGT_GREATER | ACREN_ENABLED | DMAEN_DISABLED | ADC_SC2_REFSEL(REFSEL_EXT);
  ADC_CfgPtr->STATUS3  = CAL_OFF | ADCO_SINGLE | AVGE_ENABLED | ADC_SC3_AVGS(AVGS_32);
  ADC_CfgPtr->PGA      = PGAEN_DISABLED | PGACHP_NOCHOP | PGALP_NORMAL | ADC_PGA_PGAG(PGAG_64);
  ADC_CfgPtr->STATUS1A = AIEN_OFF | DIFF_SINGLE | ADC_SC1_ADCH(31);       
  ADC_CfgPtr->STATUS1B = AIEN_OFF | DIFF_SINGLE | ADC_SC1_ADCH(31);  
  
  ADC_Config_Alt(adcmap, ADC_CfgPtr);    // 配置 ADC
  ADC_Cal(adcmap);                       // 進行校準
  
  // 重新為正常使用進行配置,4次硬件平均
  // ADC輸入時鐘源為 BusClk/2
  // ADC輸入時鐘分頻為 8
  // 長采樣時間設置
  ADC_CfgPtr->CONFIG1  = ADLPC_NORMAL | ADC_CFG1_ADIV(ADIV_8) | ADLSMP_LONG
                              | ADC_CFG1_ADICLK(ADICLK_BUS_2);  
  
  // 選擇轉換精度
  switch(mode)
  {
    case MODE_8:
       ADC_CfgPtr->CONFIG1 |= ADC_CFG1_MODE(MODE_8);
       break;
    case MODE_12:
       ADC_CfgPtr->CONFIG1 |= ADC_CFG1_MODE(MODE_12);
       break;
    case MODE_10:
       ADC_CfgPtr->CONFIG1 |= ADC_CFG1_MODE(MODE_10);
       break;
    case MODE_16:
       ADC_CfgPtr->CONFIG1 |= ADC_CFG1_MODE(MODE_16);
       break;
    default:
      return 0;
  }
  
  // 選擇ADxxa為輸入通道
  // Asynchronous異步時鐘輸出使能
  // 高速轉換
  // 長采樣時間時鐘周期選擇 額外20個時鐘周期,共24個ADCK周期
  // 總采樣周期見K60技術文檔 page:840
  ADC_CfgPtr->CONFIG2  = MUXSEL_ADCA | ADACKEN_ENABLED | ADHSC_HISPEED | ADC_CFG2_ADLSTS(ADLSTS_20) ;
  ADC_CfgPtr->COMPARE1 = 0x1234u ; 
  ADC_CfgPtr->COMPARE2 = 0x5678u ;
  ADC_CfgPtr->STATUS2  = ADTRG_SW | ACFE_DISABLED | ACFGT_GREATER | ACREN_DISABLED | DMAEN_DISABLED | ADC_SC2_REFSEL(REFSEL_EXT);
  ADC_CfgPtr->STATUS3  = CAL_OFF | ADCO_SINGLE | AVGE_ENABLED | ADC_SC3_AVGS(AVGS_4);
  ADC_CfgPtr->PGA      = PGAEN_DISABLED | PGACHP_NOCHOP | PGALP_NORMAL | ADC_PGA_PGAG(PGAG_64);
  
  //選擇單端或差分模式
  if(diff == 0)
  {
    ADC_CfgPtr->STATUS1A = AIEN_OFF | DIFF_SINGLE | ADC_SC1_ADCH(31);
  }  
  else if(diff == 1)
  {
    ADC_CfgPtr->STATUS1A = AIEN_OFF | DIFF_DIFFERENTIAL | ADC_SC1_ADCH(31);
  } 
  else
  {
    return 0;
  }
  
  ADC_Config_Alt(adcmap, ADC_CfgPtr);  // 配置ADC0
  
  return 1;
}


/*
 * LPLD_ADC_SE_Get
 * 取得ADC模塊單端輸入轉換值--軟件觸發
 * 
 * 參數:
 *    adc--ADC寄存器基地址
 *      |__ADC0_BASE_PTR--ADC0
 *      |__ADC1_BASE_PTR--ADC1
 *    channel--ADC通道號,不同的通道號對應不同的引腳,注意有些通道并非都有ADC0或ADC1
 *      |__0--ADC0:PGA0_DP;  ADC1:PGA1_DP
 *      |__1--ADC0:PGA2_DP;  ADC1:PGA3_DP
 *      |__2--ADC0:PGA0_DP;  ADC1:PGA1_DP
 *      |__3--ADC0:ADC0_DP3; ADC1:PGA0_DP
 *      |__4--ADC0:NC;       ADC1:PTE0
 *      |__5--ADC0:NC;       ADC1:PTE1
 *      |__6--ADC0:NC;       ADC1:PTE2
 *      |__7--ADC0:NC;       ADC1:PTE3
 *      |__8--ADC0:PTB0;     ADC1:PTB0
 *      |__9--ADC0:PTB1;     ADC1:PTB1
 *      |__10--ADC0:PTA7;    ADC1:PTB4
 *      |__11--ADC0:PTA8;    ADC1:PTB5
 *      |__12--ADC0:PTB2;    ADC1:PTB6
 *      |__13--ADC0:PTB3;    ADC1:PTB7
 *      |__14--ADC0:PTC0;    ADC1:PTB10
 *      |__15--ADC0:PTC1;    ADC1:PTB11
 *      |__16--ADC0:ADC0_SE16;ADC1:ADC1_SE16
 *      |__17--ADC0:PTE24;   ADC1:PTA17
 *      |__18--ADC0:PTE25;   ADC1:VREF Output
 *      |__19--ADC0:PGA0_DM; ADC1:PGA1_DM
 *      |__20--ADC0:PGA2_DM; ADC1:PGA3_DM
 *      |__23--ADC0:DAC0_OUT;ADC1:DAC1_OUT
 *      |__26--ADC0:Temperature Sensor;  ADC1:Temperature Sensor
 *      |__27--ADC0:Bandgap; ADC1:Bandgap
 *      |__29--ADC0:VREFH;   ADC1:VREFH
 *      |__30--ADC0:VREFL;   ADC1:VREFL
 *
 * 輸出:
 *    0--配置錯誤,或電壓值為0
 *    其他--AD通道轉換值,右對齊
 */
uint16_t LPLD_ADC_SE_Get(ADC_MemMapPtr adc, uint8_t channel)
{
  if(channel>30)
    return 0;
  
  //不同的通道對應不同的引腳,因此需要判斷并配置
  if(adc == ADC0_BASE_PTR)
  {
    switch(channel)
    {
      case 0:   //ADC0_DP0 -- PGA0_DP
      case 1:   //ADC0_DP1 -- PGA2_DP
      case 2:   //PGA0_DP
      case 3:   //ADC0_DP3 -- PGA1_DP
        break;
      case 8:  //ADC0_SE8 -- PTB0
      case 9:  //ADC0_SE9 -- PTB1
        SIM_SCGC5 |= SIM_SCGC5_PORTB_MASK; 
        PORT_PCR_REG(PORTB_BASE_PTR, channel-8) =  PORT_PCR_MUX(0);
        break;
      case 10:  //ADC0_SE10 -- PTA7
      case 11:  //ADC0_SE11 -- PTA8
        SIM_SCGC5 |= SIM_SCGC5_PORTA_MASK; 
        PORT_PCR_REG(PORTA_BASE_PTR, channel-3) =  PORT_PCR_MUX(0);
        break;
      case 12:  //ADC0_SE12 -- PTB2
      case 13:  //ADC0_SE13 -- PTB3
        SIM_SCGC5 |= SIM_SCGC5_PORTB_MASK; 
        PORT_PCR_REG(PORTB_BASE_PTR, channel-10) =  PORT_PCR_MUX(0);
        break;
      case 14:  //ADC0_SE14 -- PTC0
      case 15:  //ADC0_SE15 -- PTC1
        SIM_SCGC5 |= SIM_SCGC5_PORTC_MASK; 
        PORT_PCR_REG(PORTC_BASE_PTR, channel-14) =  PORT_PCR_MUX(0);
        break;
      case 16:   //ADC0_SE16
        break;
      case 17:   //ADC0_SE17 -- PTE24
      case 18:   //ADC0_SE17 -- PTE25
        SIM_SCGC5 |= SIM_SCGC5_PORTE_MASK; 
        PORT_PCR_REG(PORTE_BASE_PTR, channel+7) =  PORT_PCR_MUX(0);
        break;
      case 19:   //ADC0_DM0 -- PGA0_DM
      case 20:   //ADC0_DM1 -- PGA2_DM
      case 23:   //ADC0_SE23 -- DAC0_OUT
      case 26:   //Temperature Sensor (S.E)
      case 27:   //Bandgap (S.E)
      case 29:   //VREFH (S.E)
      case 30:   //VREFL
        break;
      default:
        return 0;  
    }
  }
  else if(adc == ADC1_BASE_PTR)
  {
    switch(channel)
    {
      case 0:   //ADC1_DP0 -- PGA1_DP
      case 1:   //ADC1_DP1 -- PGA3_DP
      case 2:   //PGA1_DP 
      case 3:   //ADC1_DP3 -- PGA0_DP
        break;
      case 4:   //ADC1_SE4a -- PTE0
      case 5:   //ADC1_SE5a -- PTE1
      case 6:   //ADC1_SE6a -- PTE2
      case 7:   //ADC1_SE7a -- PTE3
        SIM_SCGC5 |= SIM_SCGC5_PORTE_MASK; 
        PORT_PCR_REG(PORTE_BASE_PTR, channel-4) =  PORT_PCR_MUX(0);
        break;
      case 8:  //ADC1_SE8 -- PTB0
      case 9:  //ADC1_SE9 -- PTB1
        SIM_SCGC5 |= SIM_SCGC5_PORTB_MASK; 
        PORT_PCR_REG(PORTB_BASE_PTR, channel-8) =  PORT_PCR_MUX(0);
        break;
      case 10:  //ADC1_SE10 -- PTB4
      case 11:  //ADC1_SE11 -- PTB5
      case 12:  //ADC1_SE12 -- PTB6
      case 13:  //ADC1_SE13 -- PTB7
        SIM_SCGC5 |= SIM_SCGC5_PORTB_MASK; 
        PORT_PCR_REG(PORTB_BASE_PTR, channel-6) =  PORT_PCR_MUX(0);
        break;
      case 14:  //ADC1_SE14 -- PTB10
      case 15:  //ADC1_SE15 -- PTB11
        SIM_SCGC5 |= SIM_SCGC5_PORTB_MASK; 
        PORT_PCR_REG(PORTB_BASE_PTR, channel-4) =  PORT_PCR_MUX(0);
        break;
      case 16:   //ADC1_SE16
        break;
      case 17:  //ADC1_SE17 -- PTA17
        SIM_SCGC5 |= SIM_SCGC5_PORTA_MASK; 
        PORT_PCR_REG(PORTA_BASE_PTR, channel) =  PORT_PCR_MUX(0);
        break;
      case 18:   //VREF Output
      case 19:   //ADC1_DM0 -- PGA1_DM
      case 20:   //ADC1_DM1 -- PGA3_DM
      case 23:   //DAC1_OUT 
      case 26:   //Temperature Sensor (S.E)
      case 27:   //Bandgap (S.E)
      case 29:   //VREFH (S.E)
      case 30:   //VREFL
        break;
      default:
        return 0;  
    }
  }
  else
  {
    return 0;
  }
  
  ADC_SC1_REG(adc,0) &= ~(ADC_SC1_ADCH_MASK);
  ADC_SC1_REG(adc,0) |= ADC_SC1_ADCH(channel);
  
  while(ADC_SC1_REG(adc,0)&ADC_SC1_COCO_MASK == 0);  //等待轉換完成
  
  return ADC_R_REG(adc, 0);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99精品偷自拍| 国产高清在线精品| 欧美自拍丝袜亚洲| 亚洲综合色视频| 欧美色爱综合网| 视频一区二区三区中文字幕| 91精品久久久久久久久99蜜臂| 丝袜国产日韩另类美女| 日韩欧美国产不卡| 国产一区二区精品久久99| 国产农村妇女毛片精品久久麻豆| 成人午夜免费av| 亚洲人快播电影网| 欧美老年两性高潮| 国产精品一级二级三级| 国产精品国产三级国产普通话99 | 精品久久久影院| 国产成人在线视频免费播放| 亚洲视频一区二区在线| 欧美日韩五月天| 狠狠色2019综合网| 亚洲精品免费电影| 日韩精品最新网址| 99精品久久久久久| 日韩成人一区二区| 中日韩av电影| 欧美日本一区二区三区| 激情六月婷婷久久| 夜色激情一区二区| 欧美α欧美αv大片| 色婷婷综合久久久| 久久99久久99小草精品免视看| 国产精一区二区三区| 国产精品福利av| 91精品国产综合久久久久久久| 国产凹凸在线观看一区二区 | 亚洲久本草在线中文字幕| 69p69国产精品| 成人av先锋影音| 老色鬼精品视频在线观看播放| 日韩美女视频19| 精品国产在天天线2019| 欧美色图一区二区三区| 国产白丝网站精品污在线入口| 日欧美一区二区| 亚洲视频免费在线观看| 精品国产乱码久久久久久闺蜜 | 亚洲国产毛片aaaaa无费看| 欧美一区在线视频| 色香色香欲天天天影视综合网| 黄色日韩三级电影| 日韩专区中文字幕一区二区| 亚洲少妇30p| 国产丝袜美腿一区二区三区| 欧美一级黄色片| 欧美视频一区二区在线观看| 成人免费高清视频在线观看| 久国产精品韩国三级视频| 亚洲国产精品天堂| 亚洲天堂久久久久久久| 国产精品日韩精品欧美在线| 欧美电影免费观看高清完整版| 欧美日韩视频不卡| 91成人网在线| 色婷婷综合中文久久一本| 国产福利一区二区三区| 国产一区二区在线影院| 免费日韩伦理电影| 日日嗨av一区二区三区四区| 亚洲成人自拍一区| 天天综合色天天| 午夜精品国产更新| 性久久久久久久| 亚洲国产成人91porn| 亚洲国产精品一区二区www| 亚洲自拍偷拍图区| 一区二区三区四区激情| 亚洲激情成人在线| 樱桃国产成人精品视频| 一区二区三区四区高清精品免费观看| 综合久久久久久久| 中文字幕日韩一区| 综合在线观看色| 亚洲最大的成人av| 亚洲综合视频网| 亚洲国产综合人成综合网站| 亚洲一区中文在线| 欧美性淫爽ww久久久久无| 欧美性色综合网| 欧美日本一道本| 欧美一区二区三区四区在线观看| 91精品免费在线| 久久人人爽人人爽| 国产精品视频九色porn| 亚洲精选免费视频| 亚洲成人动漫在线免费观看| 亚洲成人免费看| 蜜桃久久久久久| 国产精一区二区三区| 99这里都是精品| 欧美日韩一级二级三级| 日韩天堂在线观看| 欧美国产精品久久| 又紧又大又爽精品一区二区| 午夜激情久久久| 蜜桃91丨九色丨蝌蚪91桃色| 国产精品影视网| 色欧美88888久久久久久影院| 欧美性生交片4| 26uuu久久综合| 亚洲男同性视频| 蜜臀va亚洲va欧美va天堂 | 成人免费毛片a| 欧美视频一区二区三区在线观看 | 丁香六月久久综合狠狠色| av中文字幕亚洲| 欧美日韩精品欧美日韩精品一| 日韩欧美一区二区久久婷婷| 国产欧美日韩精品一区| 亚洲国产精品自拍| 国产毛片精品视频| 在线观看日产精品| 26uuu国产电影一区二区| 亚洲欧美日韩综合aⅴ视频| 免费亚洲电影在线| 色综合色狠狠天天综合色| 日韩欧美中文一区二区| 亚洲免费电影在线| 狠狠狠色丁香婷婷综合久久五月| 色狠狠av一区二区三区| 久久免费精品国产久精品久久久久| 亚洲色欲色欲www| 狠狠久久亚洲欧美| 欧美女孩性生活视频| 国产精品理伦片| 麻豆91在线看| 欧美性猛交xxxx黑人交| 国产精品拍天天在线| 日韩国产高清影视| 色狠狠一区二区| 欧美国产精品一区| 黑人巨大精品欧美黑白配亚洲| 欧美喷水一区二区| 樱花影视一区二区| 91伊人久久大香线蕉| 久久91精品国产91久久小草| 欧美日韩一二三区| 中文字幕在线不卡| 国产麻豆成人传媒免费观看| 日韩三级视频中文字幕| 亚洲1区2区3区视频| 欧美亚洲免费在线一区| 亚洲欧美日韩中文播放| www.欧美日韩国产在线| 国产三级一区二区三区| 激情综合色综合久久| 制服丝袜激情欧洲亚洲| 亚洲一区二区三区小说| 91在线你懂得| 中文字幕在线观看不卡| 国产成人精品免费| 久久久久久久久久美女| 美女网站一区二区| 欧美va在线播放| 久久国产精品99久久久久久老狼| 欧美日韩激情一区| 五月综合激情网| 欧美日韩国产美| 日韩和欧美一区二区| 欧美女孩性生活视频| 日韩电影免费在线| 91精品国产入口| 捆绑变态av一区二区三区| 日韩免费观看高清完整版| 麻豆国产欧美日韩综合精品二区 | 欧美性猛交xxxx乱大交退制版| 亚洲一区免费观看| 欧美日韩国产成人在线免费| 香蕉久久一区二区不卡无毒影院| 欧美伊人久久大香线蕉综合69| 午夜久久久影院| 欧美成人一级视频| 国产精品综合在线视频| 中文久久乱码一区二区| www.亚洲国产| 亚洲一区二区在线观看视频| 欧美乱妇15p| 国产综合色产在线精品| 欧美极品aⅴ影院| 91蝌蚪porny九色| 午夜视频一区在线观看| 26uuu欧美日本| 国产精品毛片a∨一区二区三区| 一本大道久久精品懂色aⅴ| 亚洲午夜久久久久久久久电影网| 欧美精品少妇一区二区三区| 国内精品国产成人| 亚洲精品国产一区二区精华液 | 日本韩国一区二区| 日本va欧美va瓶|