打印
[demo程序]

NV32F100x gpio.c和gpio.h中文注释

[复制链接]
1319|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jp_chen|  楼主 | 2017-7-26 16:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
jp_chen|  楼主 | 2017-7-26 16:26 | 只看该作者
本帖最后由 jp_chen 于 2017-7-26 16:28 编辑
/******************************************************************************
* [url=home.php?mod=space&uid=247401]@brief[/url] providing common gpio API.
*
******************************************************************************/
#include "gpio.h"

/******************************************************************************
* Local variables
******************************************************************************/


/******************************************************************************
* Local function prototypes
******************************************************************************/

/******************************************************************************
* Local functions
*****************************************************************************/

/******************************************************************************
* Global functions
******************************************************************************/

/******************************************************************************
* define GPIO APIs
*
*//*! @addtogroup gpio_api_list
* @{
*******************************************************************************/

/*****************************************************************************//*!
* [url=home.php?mod=space&uid=72445]@[/url]   初始化GPIO寄存器,使得寄存器的值为默认的复位值。
*        
* @ 输入 pGPIO      指向GPIO模块.
*
* @ 无返回
*
*****************************************************************************/
void GPIO_DeInit(GPIO_Type *pGPIO)
{
    /* 完整性核对 */
#if defined(CPU_NV32)
     ASSERT((pGPIO == GPIOA) || (pGPIO == GPIOB));
#endif
#if defined(CPU_NV32M3)
    ASSERT(pGPIO == GPIOA);
#endif
#if defined(CPU_NV32M4)
      ASSERT((pGPIO == GPIOA) || (pGPIO == GPIOB) || (pGPIO == GPIOC));
#endif

    pGPIO->PCOR = 0x00000000;   /* 复位端口清零输出寄存器*/
    pGPIO->PDDR = 0x00000000;   /* 复位端口数据方向寄存器 */
    //pGPIO->PDIR = 0x00000000;  /*复位端口数据输入寄存器 */
    pGPIO->PDOR = 0x00000000;   /* 复位端口数据输出寄存器 */
    pGPIO->PIDR = 0xFFFFFFFF;   /* 复位端口输入禁用寄存器 */
    pGPIO->PSOR = 0x00000000;   /* 复位端口置位输出寄存器*/
    pGPIO->PTOR = 0x00000000;   /* 复位端口切换输出寄存器 */
}

/*****************************************************************************//*!
* @  由u32PinMask初始化指定的GPIO引脚
*        
* @ 输入 pGPIO      指向GPIO模块.
* @ 输入 u32PinMask 需要被初始化的GPIO引脚掩码
* @ 输入 sGpioType  引脚属性
*
* @ 无返回
*
* @ 注释
*   . 如果端口设置为输入,端口禁用高电流驱动?
*   . 如果端口设置为输出,禁用内部上拉
*****************************************************************************/
void GPIO_Init(GPIO_Type *pGPIO, uint32_t u32PinMask, GPIO_PinConfigType sGpioType)
{
    /* 完整性检查*/
#if defined(CPU_NV32)
     ASSERT((pGPIO == GPIOA) || (pGPIO == GPIOB));
#endif
#if defined(CPU_NV32M3)
    ASSERT(pGPIO == GPIOA);
#endif
#if defined(CPU_NV32M4)
      ASSERT((pGPIO == GPIOA) || (pGPIO == GPIOB) || (pGPIO == GPIOC));
#endif
   
    /* 配置GPIO为输入或者输出 */
    if ((sGpioType == GPIO_PinOutput) || (sGpioType == GPIO_PinOutput_HighCurrent)) //配置GPIO为输出且为高电流驱动
    {
        pGPIO->PDDR |= u32PinMask;      /*使能端口数据方向寄存器,引脚配置为通用输出*/
        pGPIO->PIDR |= u32PinMask;      /*置位端口输入禁用寄存器,端口输入禁用*/   
    }
    else if ((sGpioType == GPIO_PinInput) || (sGpioType == GPIO_PinInput_InternalPullup)) //配置GPIO为输入且为内部上拉
    {
        pGPIO->PDDR &= ~u32PinMask;   /*复位端口数据寄存器,引脚配置为通用输入*/
        pGPIO->PIDR &= ~u32PinMask;   /*清除端口输入禁用寄存器,引脚配置为通用输入*/
    }
    /*配置GPIO端口上拉*/
#if defined(CPU_NV32)
    switch((uint32_t)pGPIO)
    {
        case GPIOA_BASE:  //GPIOA基地址
            (sGpioType == GPIO_PinInput_InternalPullup)?(PORT->PUEL |= u32PinMask):(PORT->PUEL &= ~u32PinMask);
            break;
        case GPIOB_BASE:  //GPIOB基地址
            (sGpioType == GPIO_PinInput_InternalPullup)?(PORT->PUEH |= u32PinMask):(PORT->PUEH &= ~u32PinMask);
            break;
        default:
            break;
     }
#endif
   
#if defined(CPU_NV32M3)
    switch((uint32_t)pGPIO)
    {
        case GPIOA_BASE:
            (sGpioType == GPIO_PinInput_InternalPullup)?(PORT->PUEL |= u32PinMask):(PORT->PUEL &= ~u32PinMask);
            break;
        default:
            break;
     }
#endif
   
#if defined(CPU_NV32M4)
    switch((uint32_t)pGPIO)
    {
        case GPIOA_BASE:
            (sGpioType == GPIO_PinInput_InternalPullup)?(PORT->PUE0 |= u32PinMask):(PORT->PUE0 &= ~u32PinMask);
            break;
        case GPIOB_BASE:
            (sGpioType == GPIO_PinInput_InternalPullup)?(PORT->PUE1 |= u32PinMask):(PORT->PUE1 &= ~u32PinMask);
            break;
        case GPIOC_BASE:
            (sGpioType == GPIO_PinInput_InternalPullup)?(PORT->PUE2 |= u32PinMask):(PORT->PUE2 &= ~u32PinMask);
            break;
        default:
            break;
     }
#endif   
   
    /* 配置GPIO端口为高电流驱动输出*/
#if defined(CPU_NV32M3)
    if (u32PinMask & GPIO_PTC5_MASK) //选择指定端口
    {   
        PORT->HDRVE |= PORT_HDRVE_PTC5_MASK; //使能端口高电流驱动
    }   
    if (u32PinMask & GPIO_PTC1_MASK)
    {   
        PORT->HDRVE |= PORT_HDRVE_PTC1_MASK;
    }   
    if (u32PinMask & GPIO_PTB5_MASK)    //选择指定引脚
    {   
        PORT->HDRVE |= PORT_HDRVE_PTB5_MASK;  //使能PB5端口高电流驱动
    }   
#endif
   
#if defined(CPU_NV32) | defined(CPU_NV32M4)
    if (pGPIO == GPIOA)
    {
        if (u32PinMask & GPIO_PTB4_MASK)
        {   
            PORT->HDRVE |= PORT_HDRVE_PTB4_MASK;
        }   
        if (u32PinMask & GPIO_PTB5_MASK)
        {   
            PORT->HDRVE |= PORT_HDRVE_PTB5_MASK;
        }   
        if (u32PinMask & GPIO_PTD0_MASK)
        {   
            PORT->HDRVE |= PORT_HDRVE_PTD0_MASK;
        }   
        if (u32PinMask & GPIO_PTD1_MASK)
        {   
            PORT->HDRVE |= PORT_HDRVE_PTD1_MASK;
        }   
    }
    if (pGPIO == GPIOB)
    {
        if (u32PinMask & GPIO_PTE0_MASK)
        {   
            PORT->HDRVE |= PORT_HDRVE_PTE0_MASK;
        }   
        if (u32PinMask & GPIO_PTE1_MASK)
        {   
            PORT->HDRVE |= PORT_HDRVE_PTE1_MASK;
        }   
        if (u32PinMask & GPIO_PTH0_MASK)
        {   
            PORT->HDRVE |= PORT_HDRVE_PTH0_MASK;
        }   
        if (u32PinMask & GPIO_PTH1_MASK)
        {   
            PORT->HDRVE |= PORT_HDRVE_PTH1_MASK;
        }   
    }

#endif
   
}

/*****************************************************************************//*!
* @ 由u32PinMask配置指定的引脚切换输出
*        
* @ 输入 pGPIO      指向GPIO模块
* @ 输入 u32PinMask  指定的需要切换输出的引脚掩码
*
* @ 无返回
*
* @ Pass/ Fail criteria: none
*****************************************************************************/
void GPIO_Toggle(GPIO_Type *pGPIO, uint32_t u32PinMask)
{
    /*完整性核对 */
#if defined(CPU_NV32)
     ASSERT((pGPIO == GPIOA) || (pGPIO == GPIOB));
#endif
#if defined(CPU_NV32M3)
    ASSERT(pGPIO == GPIOA);
#endif
#if defined(CPU_NV32M4)
      ASSERT((pGPIO == GPIOA) || (pGPIO == GPIOB) || (pGPIO == GPIOC));
#endif

    pGPIO->PTOR = u32PinMask;   /* 通过u32PinMask切换端口输入*/
}

/*****************************************************************************//*!
* @ 通过pGPIO读取指定的GPIO端口输入寄存器的值
*        
* @ 输入 pGPIO     指向GPIO模块.
*
* @ 返回32位无符号型端口输入数据  
*
*****************************************************************************/
uint32_t GPIO_Read(GPIO_Type *pGPIO)
{
    /*完整性核对*/
#if defined(CPU_NV32)
     ASSERT((pGPIO == GPIOA) || (pGPIO == GPIOB));
#endif
#if defined(CPU_NV32M3)
    ASSERT(pGPIO == GPIOA);
#endif
#if defined(CPU_NV32M4)
      ASSERT((pGPIO == GPIOA) || (pGPIO == GPIOB) || (pGPIO == GPIOC));
#endif

    return (pGPIO->PDIR);   /*读取端口数据输入寄存器值*/
  
}

/*****************************************************************************//*!
* @ 通过PGPIO写数据到端口数据输入寄存器
*        
* @ 输入 pGPIO       指向GPIO模块
* @ 输入 u32Value    输出的值
*
* @ 无返回
*
* @ Pass/ Fail criteria: none
*****************************************************************************/
void GPIO_Write(GPIO_Type *pGPIO, uint32_t u32Value)
{
    /*完整性核对*/
#if defined(CPU_NV32)
     ASSERT((pGPIO == GPIOA) || (pGPIO == GPIOB));
#endif
#if defined(CPU_NV32M3)
    ASSERT(pGPIO == GPIOA);
#endif
#if defined(CPU_NV32M4)
      ASSERT((pGPIO == GPIOA) || (pGPIO == GPIOB) || (pGPIO == GPIOC));
#endif
   
    pGPIO->PDOR = u32Value;    /*写数据到端口输出寄存器*/
  
}

使用特权

评论回复
板凳
jp_chen|  楼主 | 2017-7-26 16:28 | 只看该作者
/*****************************************************************************//*!
* @ 通过GPIO_Pin初始化GPIO端口指定的单个引脚
*        
* @ 输入 GPIO_Pin        GPIO引脚名字
* @ 输入 GPIO_PinConfig  配置输入和输出
*
* @ 无返回
*****************************************************************************/
void GPIO_PinInit(GPIO_PinType GPIO_Pin, GPIO_PinConfigType GPIO_PinConfig)
{
    /*完整性核对*/
    ASSERT(GPIO_Pin <= GPIO_PTI7);
      
    /*配置GPIO上拉*/
#if defined(CPU_NV32)
      if (GPIO_Pin < GPIO_PTE0)                   /*GPIOA寄存器分配位*/
      {
        switch (GPIO_PinConfig)
        {
        case GPIO_PinOutput:                   /*GPIO端口设置为输出*/
            GPIOA->PDDR |= (1<<GPIO_Pin);      /*使能端口数据方向寄存器,引脚配置为输出*/
            GPIOA->PIDR |= (1<<GPIO_Pin);      /* 置位端口输入禁用寄存器,引脚未配置为通用输入 */
            PORT->PUEL &= ~(1<<GPIO_Pin);    /*禁用上拉*/
          break;
        case GPIO_PinInput:                     /*GPIO端口配置为输入*/
            GPIOA->PDDR &= ~(1<<GPIO_Pin);     /* 复位端口数据方向寄存器,引脚配置为通用输入 */
            GPIOA->PIDR &= ~(1<<GPIO_Pin);     /* 清除端口输入禁用寄存器,引脚配置为通用输入 */
            PORT->PUEL &= ~(1<<GPIO_Pin);    /* 禁用上拉 */
          break;
        case GPIO_PinInput_InternalPullup:    /*GPIO端口配置为输入内部上拉*/
            GPIOA->PDDR &= ~(1<<GPIO_Pin);     /* 复位端口数据方向寄存器,引脚配置为通用输入 */
            GPIOA->PIDR &= ~(1<<GPIO_Pin);     /* 清除端口输入禁用寄存器,引脚配置为通用输入 */
            PORT->PUEL |= (1<<GPIO_Pin);    /*使能内部上拉*/
          break;
        case GPIO_PinOutput_HighCurrent:      /*GPIO端口配置为输出,高电流驱动*/
            GPIOA->PDDR |= (1<<GPIO_Pin);      /*使能端口数据方向寄存器,引脚配置为输出*/
            GPIOA->PIDR |= (1<<GPIO_Pin);      /* 置位端口输入禁用寄存器,引脚未配置为通用输入*/
            PORT->PUEL &= ~(1<<GPIO_Pin);    /*禁用内部上拉*/
          break;
        }
      }
      else if (GPIO_Pin < GPIO_PTI0)
      {
        GPIO_Pin = (GPIO_PinType)(GPIO_Pin - 32);     /*GPIOB寄存器分配位*/
        switch (GPIO_PinConfig)
        {
        case GPIO_PinOutput:                     /*GPIO端口配置为输出*/
            GPIOB->PDDR |= (1<<GPIO_Pin);      /*使能数据方向寄存器,引脚配置为通用输出*/
            GPIOB->PIDR |= (1<<GPIO_Pin);      /*置位端口输入禁用寄存器,引脚未配置为通用输入*/
            PORT->PUEH &= ~(1<<GPIO_Pin);    /*禁用上拉输入*/
          break;
        case GPIO_PinInput:                     /*GPIO端口配置为输入*/
            GPIOB->PDDR &= ~(1<<GPIO_Pin);     /*复位端口数据方向寄存器,引脚配置为通用输入*/
            GPIOB->PIDR &= ~(1<<GPIO_Pin);     /*清除端口输入禁用寄存器,引脚配置为通用输入 */
            PORT->PUEH &= ~(1<<GPIO_Pin);    /*禁用上拉*/
          break;
        case GPIO_PinInput_InternalPullup:      /*GPIO设置为输出内部上拉*/
            GPIOB->PDDR &= ~(1<<GPIO_Pin);     /* 复位端口数据方向寄存器,引脚配置为通用输入 */
            GPIOB->PIDR &= ~(1<<GPIO_Pin);     /*清除端口输入禁用寄存器,引脚配置为通用输入 */
            PORT->PUEH |= (1<<GPIO_Pin);    /*使能上拉*/
          break;
        case GPIO_PinOutput_HighCurrent:        /*GPIO配置为输出高电流驱动*/
            GPIOB->PDDR |= (1<<GPIO_Pin);      /*使能数据方向寄存器,引脚配置为通用输出*/
            GPIOB->PIDR |= (1<<GPIO_Pin);      /*置位端口输入禁用寄存器,引脚未配置为通用输入*/
            PORT->PUEH &= ~(1<<GPIO_Pin);    /*禁用上拉输入*/
          break;
        }
      }
#endif
      
#if defined(CPU_NV32M3)
      if (GPIO_Pin < GPIO_PTE0)            
      {
        switch (GPIO_PinConfig)
        {
        case GPIO_PinOutput:                     
            GPIOA->PDDR |= (1<<GPIO_Pin);      
            GPIOA->PIDR |= (1<<GPIO_Pin);      
            PORT->PUEL &= ~(1<<GPIO_Pin);  
          break;
        case GPIO_PinInput:                     
            GPIOA->PDDR &= ~(1<<GPIO_Pin);   
            GPIOA->PIDR &= ~(1<<GPIO_Pin);     
            PORT->PUEL &= ~(1<<GPIO_Pin);   
          break;
        case GPIO_PinInput_InternalPullup:
            GPIOA->PDDR &= ~(1<<GPIO_Pin);   
            GPIOA->PIDR &= ~(1<<GPIO_Pin);   
            PORT->PUEL |= (1<<GPIO_Pin);   
        case GPIO_PinOutput_HighCurrent:
            GPIOA->PDDR |= (1<<GPIO_Pin);      
            GPIOA->PIDR |= (1<<GPIO_Pin);      
            PORT->PUEL &= ~(1<<GPIO_Pin);   
          break;
        }
      }
#endif
   
   
#if defined(CPU_NV32M4)
      if (GPIO_Pin < GPIO_PTE0)              /*GPIOA寄存器分配位*/
      {
        switch (GPIO_PinConfig)
        {
        case GPIO_PinOutput:
            GPIOA->PDDR |= (1<<GPIO_Pin);      
            GPIOA->PIDR |= (1<<GPIO_Pin);      
            PORT->PUE0 &= ~(1<<GPIO_Pin);   
          break;
        case GPIO_PinInput:
            GPIOA->PDDR &= ~(1<<GPIO_Pin);     
            GPIOA->PIDR &= ~(1<<GPIO_Pin);     
            PORT->PUE0 &= ~(1<<GPIO_Pin);   
          break;
        case GPIO_PinInput_InternalPullup:
            GPIOA->PDDR &= ~(1<<GPIO_Pin);   
            GPIOA->PIDR &= ~(1<<GPIO_Pin);   
            PORT->PUE0 |= (1<<GPIO_Pin);   
          break;
        case GPIO_PinOutput_HighCurrent:
            GPIOA->PDDR |= (1<<GPIO_Pin);      
            GPIOA->PIDR |= (1<<GPIO_Pin);     
            PORT->PUE0 &= ~(1<<GPIO_Pin);   
          break;
        }
      }
      else if (GPIO_Pin < GPIO_PTI0)
      {
        GPIO_Pin = (GPIO_PinType)(GPIO_Pin - 32);    /*GPIOB寄存器分配位*/
        switch (GPIO_PinConfig)
        {
        case GPIO_PinOutput:
            GPIOB->PDDR |= (1<<GPIO_Pin);     
            GPIOB->PIDR |= (1<<GPIO_Pin);      
            PORT->PUE1 &= ~(1<<GPIO_Pin);   
          break;
        case GPIO_PinInput:
            GPIOB->PDDR &= ~(1<<GPIO_Pin);   
            GPIOB->PIDR &= ~(1<<GPIO_Pin);   
            PORT->PUE1 &= ~(1<<GPIO_Pin);   
          break;
        case GPIO_PinInput_InternalPullup:
            GPIOB->PDDR &= ~(1<<GPIO_Pin);   
            GPIOB->PIDR &= ~(1<<GPIO_Pin);   
            PORT->PUE1 |= (1<<GPIO_Pin);   
          break;
        case GPIO_PinOutput_HighCurrent:
            GPIOB->PDDR |= (1<<GPIO_Pin);      
            GPIOB->PIDR |= (1<<GPIO_Pin);      
            PORT->PUE1 &= ~(1<<GPIO_Pin);   
          break;
        }
      }
      else
      {
        GPIO_Pin = (GPIO_PinType)(GPIO_Pin - 64);  /*GPIOC寄存器分配位*/
        switch (GPIO_PinConfig)
        {
        case GPIO_PinOutput:
            GPIOC->PDDR |= (1<<GPIO_Pin);      
            GPIOC->PIDR |= (1<<GPIO_Pin);     
            PORT->PUE2 &= ~(1<<GPIO_Pin);   
          break;
        case GPIO_PinInput:
            GPIOC->PDDR &= ~(1<<GPIO_Pin);   
            GPIOC->PIDR &= ~(1<<GPIO_Pin);   
            PORT->PUE2 &= ~(1<<GPIO_Pin);   
          break;
        case GPIO_PinInput_InternalPullup:
            GPIOC->PDDR &= ~(1<<GPIO_Pin);   
            GPIOC->PIDR &= ~(1<<GPIO_Pin);   
            PORT->PUE2 |= (1<<GPIO_Pin);   
          break;
        case GPIO_PinOutput_HighCurrent:
            GPIOC->PDDR |= (1<<GPIO_Pin);     
            GPIOC->PIDR |= (1<<GPIO_Pin);      
            PORT->PUE2 &= ~(1<<GPIO_Pin);   
          break;
        }
      }
#endif
      
    /*配置GPIO端口高强度驱动使能寄存器*/
    if(GPIO_PinConfig == GPIO_PinOutput_HighCurrent)     /*端口配置为输出,高电流驱动*/
    {
#if defined(CPU_NV32M3)
        switch (GPIO_Pin)            /*选择端口*/
        {
            case GPIO_PTB5:               
                PORT->HDRVE |= PORT_HDRVE_PTB5_MASK;    /*使能PB5端口高电流驱动*/
                break;
            case GPIO_PTC1:
                PORT->HDRVE |= PORT_HDRVE_PTC1_MASK;
                break;
            case GPIO_PTC5:
                PORT->HDRVE |= PORT_HDRVE_PTC5_MASK;
                break;
            default:
                break;
        }
#endif
   
#if defined(CPU_NV32M4) | defined(CPU_NV32)
        switch (GPIO_Pin)
        {
            case GPIO_PTB4:
                PORT->HDRVE |= PORT_HDRVE_PTB4_MASK;
                break;
            case GPIO_PTB5:
                PORT->HDRVE |= PORT_HDRVE_PTB5_MASK;
                break;
            case GPIO_PTD0:
                PORT->HDRVE |= PORT_HDRVE_PTD0_MASK;
                break;
            case GPIO_PTD1:
                PORT->HDRVE |= PORT_HDRVE_PTD1_MASK;
                break;
            case GPIO_PTE0:
                PORT->HDRVE |= PORT_HDRVE_PTE0_MASK;
                break;
            case GPIO_PTE1:
                PORT->HDRVE |= PORT_HDRVE_PTE1_MASK;
                break;
            case GPIO_PTH0:
                PORT->HDRVE |= PORT_HDRVE_PTH0_MASK;
                break;
            case GPIO_PTH1:
                PORT->HDRVE |= PORT_HDRVE_PTH1_MASK;
                break;
            default:
                break;
        }
#endif
    }
}

/*****************************************************************************//*!
* @  通过GPIO_Pin,切换指定的单个引脚的输出
*        
* @ 输入 GPIO_Pin      引脚名字
*
* @ 无返回
*
*****************************************************************************/
void GPIO_PinToggle(GPIO_PinType GPIO_Pin)
{
    /*完整性核对 */
    ASSERT(GPIO_Pin <= GPIO_PTI7);

    if (GPIO_Pin < GPIO_PTE0)
    {
        /* PTA0-7, PTB0-7, PTC0-7, PTD0-7 */
        GPIOA->PTOR = (1<<GPIO_Pin);   /*端口切换输出寄存器置一,PDORn中对应位置为现有逻辑电平的反相电平*/
    }

#if (defined(CPU_NV32) | defined(CPU_NV32M4))

    else if (GPIO_Pin < GPIO_PTI0)
    {
        /* PTE0-7, PTF0-7, PTH0-7, PTI0-7 */
        GPIO_Pin = (GPIO_PinType)(GPIO_Pin - GPIO_PTE0);
        GPIOB->PTOR = (1<<GPIO_Pin);
    }
#endif

#if defined(CPU_NV32M4)  
    else if(GPIO_Pin < GPIO_PIN_MAX)
    {
        /* PTI0-7 */
        GPIO_Pin = (GPIO_PinType)(GPIO_Pin - GPIO_PTI0);
        GPIOC->PTOR = (1<<GPIO_Pin);
    }
#endif
}

/*****************************************************************************//*!
* @ 通过GPIO_Pin设置指定的单个GPIO端口逻辑电平为1
*        
* @ 输入 GPIO_Pin      引脚名字
*
* @  无返回
*
*****************************************************************************/
void GPIO_PinSet(GPIO_PinType GPIO_Pin)
{
    /*完整性核对*/
    ASSERT(GPIO_Pin <= GPIO_PTI7);
   
    if (GPIO_Pin < GPIO_PTE0)
    {
        /* PTA0-7, PTB0-7, PTC0-7, PTD0-7 */
        GPIOA->PSOR = (1<<GPIO_Pin);    /*PDORn中的对应位位置为逻辑电平1*/
    }

#if (defined(CPU_NV32) | defined(CPU_NV32M4))

    else if (GPIO_Pin < GPIO_PTI0)
    {
        /* PTE0-7, PTF0-7, PTH0-7, PTI0-7 */
        GPIO_Pin = (GPIO_PinType)(GPIO_Pin - GPIO_PTE0);
        GPIOB->PSOR = (1<<GPIO_Pin);
    }
#endif

#if defined(CPU_NV32M4)
    else if(GPIO_Pin < GPIO_PIN_MAX)
    {
        /* PTI0-7 */
        GPIO_Pin = (GPIO_PinType)(GPIO_Pin - GPIO_PTI0);
        GPIOC->PSOR = (1<<GPIO_Pin);
    }
#endif
}

/*****************************************************************************//*!
* @  通过GPIO_Pin设置指定的单个GPIO端口逻辑电平为0
*        
* @ 输入 GPIO_Pin  引脚名字
*
* @ 无返回
*
*****************************************************************************/
void GPIO_PinClear(GPIO_PinType GPIO_Pin)
{
    /* Sanity check */
    ASSERT(GPIO_Pin <= GPIO_PTI7);
   
    if (GPIO_Pin < GPIO_PTE0)
    {
        /* PTA0-7, PTB0-7, PTC0-7, PTD0-7 */
        GPIOA->PCOR = (1<<GPIO_Pin);   /*PD0Rn中的对应位清零为逻辑电平0*/
    }

#if (defined(CPU_NV32) | defined(CPU_NV32M4))

    else if (GPIO_Pin < GPIO_PTI0)
    {
        /* PTE0-7, PTF0-7, PTH0-7, PTI0-7 */
        GPIO_Pin = (GPIO_PinType)(GPIO_Pin - GPIO_PTE0);
        GPIOB->PCOR = (1<<GPIO_Pin);
    }
#endif

#if defined(CPU_NV32M4)
    else if(GPIO_Pin < GPIO_PIN_MAX)
    {
        /* PTI0-7 */
        GPIO_Pin = (GPIO_PinType)(GPIO_Pin - GPIO_PTI0);
        GPIOC->PCOR = (1<<GPIO_Pin);
    }
#endif
}

/*! @} End of gpio_api_list */

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

113

帖子

0

粉丝