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

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

?? hal_gpio.c

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

/*
 *******需用到GPIO中斷,請在isr.h中粘貼一下代碼:*********

//GPIO模塊中斷服務定義
#undef  VECTOR_103
#define VECTOR_103 LPLD_GPIO_Isr
#undef  VECTOR_104
#define VECTOR_104 LPLD_GPIO_Isr
#undef  VECTOR_105
#define VECTOR_105 LPLD_GPIO_Isr
#undef  VECTOR_106
#define VECTOR_106 LPLD_GPIO_Isr
#undef  VECTOR_107
#define VECTOR_107 LPLD_GPIO_Isr
//以下函數在LPLD_Kinetis底層包,不必修改
extern void LPLD_GPIO_Isr(void);

 ***********************代碼結束*************************
*/

#include "common.h"
#include "HAL_GPIO.h"


//用戶自定義中斷服務函數數組
GPIO_ISR_CALLBACK GPIO_ISR[5];

/*
 * LPLD_GPIO_Init
 * GPIO通用初始化函數
 * 
 * 參數:
 *    port--端口基地址
 *      |__PORTA_BASE_PTR--Port A
 *      |__PORTB_BASE_PTR--Port B
 *      |__PORTC_BASE_PTR--Port C
 *      |__PORTD_BASE_PTR--Port D
 *      |__PORTE_BASE_PTR--Port E
 *    port_bit--端口位數
 *      |__0~31
 *    dir--端口數據方向
 *      |__1--輸出
 *      |__0--輸入
 *    data--輸出初始電平/輸入上拉或下拉
 *      |__2--如果dir=0,輸入內部下拉
 *      |__1--如果dir=0,輸入內部上拉; 如果dir=1,輸出高電平
 *      |__0--如果dir=0,輸入不使能上下拉; 如果dir=1,輸出低電平
 *    irqc--輸入中斷
 *      |__0--不使能中斷
 *      |__其他--見技術文檔 PORTx_PCRn寄存器 IRQC位描述
 *
 * 輸出:
 *    0--配置錯誤
 *    1--配置成功
 */
uint8_t LPLD_GPIO_Init(PORT_MemMapPtr port, uint8_t port_bit, uint8_t dir, uint8_t data, uint8_t irqc)
{
  GPIO_MemMapPtr p;
  //判斷端口位數合理性
  if(port_bit>31)
    return 0;
  
  //選擇IO口時鐘控制掩碼
  if(port == PORTA_BASE_PTR)
  {
    p = PTA_BASE_PTR; 
    SIM_SCGC5 |= SIM_SCGC5_PORTA_MASK; 
  }
  else if(port == PORTB_BASE_PTR)
  {
    p = PTB_BASE_PTR; 
    SIM_SCGC5 |= SIM_SCGC5_PORTB_MASK; 
  }
  else if(port == PORTC_BASE_PTR)
  {
    p = PTC_BASE_PTR; 
    SIM_SCGC5 |= SIM_SCGC5_PORTC_MASK; 
  }
  else if(port == PORTD_BASE_PTR)
  {
    p = PTD_BASE_PTR; 
    SIM_SCGC5 |= SIM_SCGC5_PORTD_MASK; 
  }
  else if(port == PORTE_BASE_PTR)
  {
    p = PTE_BASE_PTR; 
    SIM_SCGC5 |= SIM_SCGC5_PORTE_MASK; 
  }
  else
  {
    return 0;
  }
  //配置為GPIO功能
  PORT_PCR_REG(port, port_bit) = PORT_PCR_MUX(1);
  //輸入或輸出設置
  if(dir==1)
  {
    GPIO_PDDR_REG(p) |= 0x1u<<port_bit;
    //設置初始輸出
    if(data==1)
    {
      GPIO_PSOR_REG(p) = 0x1u<<port_bit; 
    }
    else
    {
      GPIO_PCOR_REG(p) = 0x1u<<port_bit;  
    }
  }
  else
  { 
    GPIO_PDDR_REG(p) &= ~(0x1u<<port_bit);
    //配置中斷方式
    if(irqc>0xC) return 0;
    PORT_PCR_REG(port, port_bit) |= PORT_PCR_IRQC(irqc); 
    //配置內部上拉或下拉或不使能
    if(data==1)
    {
      //上拉
      PORT_PCR_REG(port, port_bit) |= PORT_PCR_PE_MASK | PORT_PCR_PS_MASK ; 
    }
    else if(data==2)
    {
      //下拉
      PORT_PCR_REG(port, port_bit) |= PORT_PCR_PE_MASK ; 
    }
    else
    {
      //不使能上下拉
      PORT_PCR_REG(port, port_bit) &= ~PORT_PCR_PE_MASK ; 
    }
  }
  
  return 1;
}

/*
 * LPLD_GPIO_SetIsr
 * 設置GPIO通道用戶定義的中斷服務函數
 * 
 * 參數:
 *    port--端口基地址
 *      |__PORTA_BASE_PTR--Port A
 *      |__PORTB_BASE_PTR--Port B
 *      |__PORTC_BASE_PTR--Port C
 *      |__PORTD_BASE_PTR--Port D
 *      |__PORTE_BASE_PTR--Port E
 *    isr_func--用戶中斷程序入口地址
 *      |__用戶在工程文件下定義的中斷函數名,函數必須為:無返回值,無參數(eg. void isr(void);)
 *
 * 輸出:
 *    0--配置錯誤
 *    1--配置成功
 *
 */
uint8_t LPLD_GPIO_SetIsr(PORT_MemMapPtr port, GPIO_ISR_CALLBACK isr_func)
{
  //選擇IO口
  if(port == PORTA_BASE_PTR)
  {
    GPIO_ISR[0] = isr_func;
    return 1;
  }
  else if(port == PORTB_BASE_PTR)
  {
    GPIO_ISR[1] = isr_func;
    return 1;
  }
  else if(port == PORTC_BASE_PTR)
  {
    GPIO_ISR[2] = isr_func;
    return 1;
  }
  else if(port == PORTD_BASE_PTR)
  {
    GPIO_ISR[3] = isr_func;
    return 1;
  }
  else if(port == PORTE_BASE_PTR)
  {
    GPIO_ISR[4] = isr_func;
    return 1;
  }
  else
  {
    return 0;
  }
}

/*
 * LPLD_GPIO_Set
 * 設置GPIO端口0~31位輸出
 * 
 * 參數:
 *    p--GPIO口基地址
 *      |__PTA_BASE_PTR--Port A
 *      |__PTB_BASE_PTR--Port B
 *      |__PTC_BASE_PTR--Port C
 *      |__PTD_BASE_PTR--Port D
 *      |__PTE_BASE_PTR--Port E
 *    data--輸出數據
 *      |__0x00000000~0xFFFFFFFF--低到高代表GPIO口的第0~31位數據
 *
 * 輸出:
 *
 */
void LPLD_GPIO_Set(GPIO_MemMapPtr p, uint32_t data)
{ 
  GPIO_PDOR_REG(p) = data;
}

/*
 * LPLD_GPIO_Set_b
 * 設置GPIO端口一位的輸出
 * 
 * 參數:
 *    p--GPIO口基地址
 *      |__PTA_BASE_PTR--Port A
 *      |__PTB_BASE_PTR--Port B
 *      |__PTC_BASE_PTR--Port C
 *      |__PTD_BASE_PTR--Port D
 *      |__PTE_BASE_PTR--Port E
 *    port_bit--位數
 *      |__0~31--GPIO口的第0~31位
 *    data--輸出數據
 *      |__0~1--位輸出高或低電平
 *
 * 輸出:
 *
 */
void LPLD_GPIO_Set_b(GPIO_MemMapPtr p, uint8_t port_bit, uint8_t data)
{
  if(data==0)
    GPIO_PCOR_REG(p) = 0x1u<<port_bit;
  else
    GPIO_PSOR_REG(p) = 0x1u<<port_bit;
}

/*
 * LPLD_GPIO_Toggle
 * 設置GPIO端口0~31的電平翻轉
 * 
 * 參數:
 *    p--GPIO口基地址
 *      |__PTA_BASE_PTR--Port A
 *      |__PTB_BASE_PTR--Port B
 *      |__PTC_BASE_PTR--Port C
 *      |__PTD_BASE_PTR--Port D
 *      |__PTE_BASE_PTR--Port E
 *    data--翻轉數據
 *      |__0x00000000~0xFFFFFFFF--低到高代表GPIO口的第0~31位的翻轉,1為反轉,0為保持不變。
 *
 * 輸出:
 *
 */
void LPLD_GPIO_Toggle(GPIO_MemMapPtr p, uint32_t data)
{
  GPIO_PTOR_REG(p) = data;
}

/*
 * LPLD_GPIO_Toggle_b
 * 設置GPIO端口一位的翻轉
 * 
 * 參數:
 *    p--GPIO口基地址
 *      |__PTA_BASE_PTR--Port A
 *      |__PTB_BASE_PTR--Port B
 *      |__PTC_BASE_PTR--Port C
 *      |__PTD_BASE_PTR--Port D
 *      |__PTE_BASE_PTR--Port E
 *    port_bit--位數
 *      |__0~31--設置GPIO口的一位翻轉
 *
 * 輸出:
 *
 */
void LPLD_GPIO_Toggle_b(GPIO_MemMapPtr p, uint8_t port_bit)
{
  GPIO_PTOR_REG(p) = 0x1u<<port_bit;
}

/*
 * LPLD_GPIO_Get
 * 取得GPIO口的數據
 * 
 * 參數:
 *    p--GPIO口基地址
 *      |__PTA_BASE_PTR--Port A
 *      |__PTB_BASE_PTR--Port B
 *      |__PTC_BASE_PTR--Port C
 *      |__PTD_BASE_PTR--Port D
 *      |__PTE_BASE_PTR--Port E
 *
 * 輸出:
 *    指定GPIO口的32位輸入
 *
 */
uint32_t LPLD_GPIO_Get(GPIO_MemMapPtr p)
{
  return GPIO_PDIR_REG(p);
}

/*
 * LPLD_GPIO_Get_b
 * 取得GPIO口某一位的數據
 * 
 * 參數:
 *    p--GPIO口基地址
 *      |__PTA_BASE_PTR--Port A
 *      |__PTB_BASE_PTR--Port B
 *      |__PTC_BASE_PTR--Port C
 *      |__PTD_BASE_PTR--Port D
 *      |__PTE_BASE_PTR--Port E
 *    port_bit--位數
 *      |__0~31--GPIO口的第0~31位
 *
 * 輸出:
 *    指定GPIO口的指定位數的電平
 *
 */
uint8_t LPLD_GPIO_Get_b(GPIO_MemMapPtr p, uint8_t port_bit)
{
  return (GPIO_PDIR_REG(p)>>port_bit)&0x1u;
}

/*
 * LPLD_GPIO_Isr
 * GPIO通用中斷底層入口函數
 * 
 * 用戶無需修改,程序自動進入對應通道中斷函數
 */
void LPLD_GPIO_Isr(void)
{
  #define GPIO_VECTORNUM   (*(volatile uint8_t*)(0xE000ED04))
  uint8_t gpio_port = GPIO_VECTORNUM - 103;
    
  //調用用戶自定義中斷服務
  GPIO_ISR[gpio_port]();  
  
  //清除中斷標志位
  PORT_ISFR_REG((PORT_MemMapPtr)((0x40049+gpio_port)<<12))=0xFFFFFFFF;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美一区二区三区沐欲| 欧美日韩日本视频| 国产欧美日韩麻豆91| 国产麻豆9l精品三级站| 国产精品色婷婷久久58| 91丨九色丨尤物| 亚洲国产精品久久艾草纯爱| 欧美二区三区的天堂| 精品一区二区三区在线播放 | 国内精品伊人久久久久影院对白| 精品免费日韩av| 国产成人在线色| 一区二区三区四区在线播放| 欧美精品久久久久久久多人混战 | 国产日韩亚洲欧美综合| 99视频精品在线| 亚洲图片欧美一区| 精品少妇一区二区三区| 成人污污视频在线观看| 欧美日韩小视频| 亚洲亚洲人成综合网络| 欧美精品三级在线观看| 激情综合亚洲精品| 粉嫩一区二区三区性色av| 自拍偷拍国产亚洲| 欧美一区二区三区免费| 国v精品久久久网| 亚洲成人中文在线| 久久一夜天堂av一区二区三区| 成人高清视频免费观看| 亚洲va在线va天堂| 国产校园另类小说区| 在线影院国内精品| 国产麻豆视频一区| 日韩精品一二三四| 亚洲日本在线a| 久久久久综合网| 欧美浪妇xxxx高跟鞋交| 国产凹凸在线观看一区二区| 一区二区三区在线观看视频| www国产精品av| 欧美老女人第四色| 91丨porny丨最新| 久88久久88久久久| 午夜激情久久久| 1000精品久久久久久久久| 日韩欧美国产一区在线观看| 日本道免费精品一区二区三区| 国产在线精品免费| 日本午夜精品一区二区三区电影 | 久久精品99国产精品日本| 亚洲综合成人网| 国产精品卡一卡二| 精品国产百合女同互慰| 欧美乱熟臀69xxxxxx| 色婷婷精品久久二区二区蜜臂av | 亚洲va韩国va欧美va精品| 国产精品家庭影院| 日本一区二区三级电影在线观看| 日韩一级视频免费观看在线| 日本电影欧美片| 色婷婷综合久久久中文一区二区| 国产成人精品亚洲777人妖| 激情综合色播激情啊| 日本成人中文字幕| 亚洲一区二区不卡免费| 一区二区三区影院| 亚洲最大成人网4388xx| 亚洲私人黄色宅男| 亚洲色图欧美偷拍| 最新中文字幕一区二区三区| 国产精品盗摄一区二区三区| 久久久99免费| 日本一区二区三区四区在线视频 | 欧美激情一区二区三区四区| 久久精品人人做人人综合| 26uuu欧美| 国产亚洲成av人在线观看导航| 久久这里只有精品视频网| 欧美成人国产一区二区| 精品国产露脸精彩对白| 久久精品水蜜桃av综合天堂| 国产日韩一级二级三级| 国产精品另类一区| 亚洲欧美色图小说| 亚洲国产裸拍裸体视频在线观看乱了 | 国产一区二区三区精品欧美日韩一区二区三区| 五月综合激情婷婷六月色窝| 免费高清不卡av| 精品一区二区三区久久久| 精品在线亚洲视频| 国产91色综合久久免费分享| 丁香六月久久综合狠狠色| 91影院在线免费观看| 欧美三级乱人伦电影| 日韩天堂在线观看| 国产日韩精品久久久| 国产精品欧美久久久久一区二区 | 亚洲一区中文在线| 日日噜噜夜夜狠狠视频欧美人| 日本女优在线视频一区二区| 国内精品视频一区二区三区八戒| 成人免费观看av| 欧美亚洲动漫精品| 精品国产一区二区国模嫣然| 国产精品三级久久久久三级| 亚洲免费观看在线视频| 天天做天天摸天天爽国产一区| 精品一区二区国语对白| 成人一区二区三区中文字幕| 色噜噜久久综合| 精品av综合导航| 亚洲精品成人精品456| 免费人成在线不卡| 99re热这里只有精品视频| 欧美精品免费视频| 亚洲国产精品激情在线观看| 亚洲国产中文字幕| 国产精品一二一区| 欧美乱熟臀69xxxxxx| 国产精品久久久久天堂| 日韩主播视频在线| 成人激情综合网站| 欧美一区二区三区播放老司机| 国产欧美久久久精品影院| 一区二区三区视频在线观看| 国内精品写真在线观看| 欧美日韩亚洲另类| 国产精品动漫网站| 国产乱理伦片在线观看夜一区| 欧美性视频一区二区三区| 久久久精品免费观看| 日韩电影免费在线看| 91在线小视频| 国产天堂亚洲国产碰碰| 捆绑紧缚一区二区三区视频| 色呦呦网站一区| 国产精品色哟哟| 久久国产精品99久久人人澡| av激情成人网| 久久精品无码一区二区三区| 免费观看成人鲁鲁鲁鲁鲁视频| 色综合色狠狠天天综合色| 国产视频一区在线观看| 麻豆成人av在线| 欧美精品一二三| 亚洲国产精品久久人人爱| 色综合一个色综合| 国产精品视频yy9299一区| 激情深爱一区二区| 欧美sm美女调教| 六月丁香婷婷久久| 欧美日韩中文精品| 亚洲午夜免费电影| 欧美在线一区二区| 一个色在线综合| 日本乱人伦一区| 亚洲人成7777| 一本到一区二区三区| 亚洲色图制服诱惑 | 舔着乳尖日韩一区| 欧美视频在线观看一区| 一区2区3区在线看| 欧美午夜片在线观看| 亚洲黄一区二区三区| 91激情在线视频| 一区二区三区四区在线播放 | 免费成人美女在线观看| 9191久久久久久久久久久| 亚洲国产cao| 日韩视频一区二区在线观看| 美美哒免费高清在线观看视频一区二区| 欧美男人的天堂一二区| 日韩成人午夜精品| 精品日韩在线一区| 国产精品亚洲综合一区在线观看| 久久婷婷综合激情| 丁香激情综合五月| 一区二区在线观看不卡| 欧美视频一区在线| 日韩精品91亚洲二区在线观看| 337p亚洲精品色噜噜| 在线免费不卡电影| 亚洲成人午夜影院| 日韩精品资源二区在线| 国产一区二区在线视频| 国产精品女主播av| 欧美中文字幕一区| 麻豆精品新av中文字幕| 久久嫩草精品久久久精品| 成人午夜视频福利| 亚洲主播在线播放| 日韩欧美国产wwwww| 成人午夜短视频| 亚洲国产日韩一区二区| 精品久久久久一区二区国产| 成人深夜在线观看| 婷婷六月综合网| 国产亚洲精品超碰| 精品视频1区2区|