[demo程序] NV32F100x gpio.c和gpio.h中文注释

[复制链接]
 楼主| jp_chen 发表于 2017-7-26 16:25 | 显示全部楼层 |阅读模式
本帖最后由 jp_chen 于 2017-7-26 16:27 编辑

gpio.rar (2.57 KB, 下载次数: 209)
 楼主| jp_chen 发表于 2017-7-26 16:26 | 显示全部楼层
本帖最后由 jp_chen 于 2017-7-26 16:28 编辑
  1. /******************************************************************************
  2. * [url=home.php?mod=space&uid=247401]@brief[/url] providing common gpio API.
  3. *
  4. ******************************************************************************/
  5. #include "gpio.h"

  6. /******************************************************************************
  7. * Local variables
  8. ******************************************************************************/


  9. /******************************************************************************
  10. * Local function prototypes
  11. ******************************************************************************/

  12. /******************************************************************************
  13. * Local functions
  14. *****************************************************************************/

  15. /******************************************************************************
  16. * Global functions
  17. ******************************************************************************/

  18. /******************************************************************************
  19. * define GPIO APIs
  20. *
  21. *//*! @addtogroup gpio_api_list
  22. * @{
  23. *******************************************************************************/

  24. /*****************************************************************************//*!
  25. * [url=home.php?mod=space&uid=72445]@[/url]   初始化GPIO寄存器,使得寄存器的值为默认的复位值。
  26. *        
  27. * @ 输入 pGPIO      指向GPIO模块.
  28. *
  29. * @ 无返回
  30. *
  31. *****************************************************************************/
  32. void GPIO_DeInit(GPIO_Type *pGPIO)
  33. {
  34.     /* 完整性核对 */
  35. #if defined(CPU_NV32)
  36.      ASSERT((pGPIO == GPIOA) || (pGPIO == GPIOB));
  37. #endif
  38. #if defined(CPU_NV32M3)
  39.     ASSERT(pGPIO == GPIOA);
  40. #endif
  41. #if defined(CPU_NV32M4)
  42.       ASSERT((pGPIO == GPIOA) || (pGPIO == GPIOB) || (pGPIO == GPIOC));
  43. #endif

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

  52. /*****************************************************************************//*!
  53. * @  由u32PinMask初始化指定的GPIO引脚
  54. *        
  55. * @ 输入 pGPIO      指向GPIO模块.
  56. * @ 输入 u32PinMask 需要被初始化的GPIO引脚掩码
  57. * @ 输入 sGpioType  引脚属性
  58. *
  59. * @ 无返回
  60. *
  61. * @ 注释
  62. *   . 如果端口设置为输入,端口禁用高电流驱动?
  63. *   . 如果端口设置为输出,禁用内部上拉
  64. *****************************************************************************/
  65. void GPIO_Init(GPIO_Type *pGPIO, uint32_t u32PinMask, GPIO_PinConfigType sGpioType)
  66. {
  67.     /* 完整性检查*/
  68. #if defined(CPU_NV32)
  69.      ASSERT((pGPIO == GPIOA) || (pGPIO == GPIOB));
  70. #endif
  71. #if defined(CPU_NV32M3)
  72.     ASSERT(pGPIO == GPIOA);
  73. #endif
  74. #if defined(CPU_NV32M4)
  75.       ASSERT((pGPIO == GPIOA) || (pGPIO == GPIOB) || (pGPIO == GPIOC));
  76. #endif
  77.    
  78.     /* 配置GPIO为输入或者输出 */
  79.     if ((sGpioType == GPIO_PinOutput) || (sGpioType == GPIO_PinOutput_HighCurrent)) //配置GPIO为输出且为高电流驱动
  80.     {
  81.         pGPIO->PDDR |= u32PinMask;      /*使能端口数据方向寄存器,引脚配置为通用输出*/
  82.         pGPIO->PIDR |= u32PinMask;      /*置位端口输入禁用寄存器,端口输入禁用*/   
  83.     }
  84.     else if ((sGpioType == GPIO_PinInput) || (sGpioType == GPIO_PinInput_InternalPullup)) //配置GPIO为输入且为内部上拉
  85.     {
  86.         pGPIO->PDDR &= ~u32PinMask;   /*复位端口数据寄存器,引脚配置为通用输入*/
  87.         pGPIO->PIDR &= ~u32PinMask;   /*清除端口输入禁用寄存器,引脚配置为通用输入*/
  88.     }
  89.     /*配置GPIO端口上拉*/
  90. #if defined(CPU_NV32)
  91.     switch((uint32_t)pGPIO)
  92.     {
  93.         case GPIOA_BASE:  //GPIOA基地址
  94.             (sGpioType == GPIO_PinInput_InternalPullup)?(PORT->PUEL |= u32PinMask):(PORT->PUEL &= ~u32PinMask);
  95.             break;
  96.         case GPIOB_BASE:  //GPIOB基地址
  97.             (sGpioType == GPIO_PinInput_InternalPullup)?(PORT->PUEH |= u32PinMask):(PORT->PUEH &= ~u32PinMask);
  98.             break;
  99.         default:
  100.             break;
  101.      }
  102. #endif
  103.    
  104. #if defined(CPU_NV32M3)
  105.     switch((uint32_t)pGPIO)
  106.     {
  107.         case GPIOA_BASE:
  108.             (sGpioType == GPIO_PinInput_InternalPullup)?(PORT->PUEL |= u32PinMask):(PORT->PUEL &= ~u32PinMask);
  109.             break;
  110.         default:
  111.             break;
  112.      }
  113. #endif
  114.    
  115. #if defined(CPU_NV32M4)
  116.     switch((uint32_t)pGPIO)
  117.     {
  118.         case GPIOA_BASE:
  119.             (sGpioType == GPIO_PinInput_InternalPullup)?(PORT->PUE0 |= u32PinMask):(PORT->PUE0 &= ~u32PinMask);
  120.             break;
  121.         case GPIOB_BASE:
  122.             (sGpioType == GPIO_PinInput_InternalPullup)?(PORT->PUE1 |= u32PinMask):(PORT->PUE1 &= ~u32PinMask);
  123.             break;
  124.         case GPIOC_BASE:
  125.             (sGpioType == GPIO_PinInput_InternalPullup)?(PORT->PUE2 |= u32PinMask):(PORT->PUE2 &= ~u32PinMask);
  126.             break;
  127.         default:
  128.             break;
  129.      }
  130. #endif   
  131.    
  132.     /* 配置GPIO端口为高电流驱动输出*/
  133. #if defined(CPU_NV32M3)
  134.     if (u32PinMask & GPIO_PTC5_MASK) //选择指定端口
  135.     {   
  136.         PORT->HDRVE |= PORT_HDRVE_PTC5_MASK; //使能端口高电流驱动
  137.     }   
  138.     if (u32PinMask & GPIO_PTC1_MASK)
  139.     {   
  140.         PORT->HDRVE |= PORT_HDRVE_PTC1_MASK;
  141.     }   
  142.     if (u32PinMask & GPIO_PTB5_MASK)    //选择指定引脚
  143.     {   
  144.         PORT->HDRVE |= PORT_HDRVE_PTB5_MASK;  //使能PB5端口高电流驱动
  145.     }   
  146. #endif
  147.    
  148. #if defined(CPU_NV32) | defined(CPU_NV32M4)
  149.     if (pGPIO == GPIOA)
  150.     {
  151.         if (u32PinMask & GPIO_PTB4_MASK)
  152.         {   
  153.             PORT->HDRVE |= PORT_HDRVE_PTB4_MASK;
  154.         }   
  155.         if (u32PinMask & GPIO_PTB5_MASK)
  156.         {   
  157.             PORT->HDRVE |= PORT_HDRVE_PTB5_MASK;
  158.         }   
  159.         if (u32PinMask & GPIO_PTD0_MASK)
  160.         {   
  161.             PORT->HDRVE |= PORT_HDRVE_PTD0_MASK;
  162.         }   
  163.         if (u32PinMask & GPIO_PTD1_MASK)
  164.         {   
  165.             PORT->HDRVE |= PORT_HDRVE_PTD1_MASK;
  166.         }   
  167.     }
  168.     if (pGPIO == GPIOB)
  169.     {
  170.         if (u32PinMask & GPIO_PTE0_MASK)
  171.         {   
  172.             PORT->HDRVE |= PORT_HDRVE_PTE0_MASK;
  173.         }   
  174.         if (u32PinMask & GPIO_PTE1_MASK)
  175.         {   
  176.             PORT->HDRVE |= PORT_HDRVE_PTE1_MASK;
  177.         }   
  178.         if (u32PinMask & GPIO_PTH0_MASK)
  179.         {   
  180.             PORT->HDRVE |= PORT_HDRVE_PTH0_MASK;
  181.         }   
  182.         if (u32PinMask & GPIO_PTH1_MASK)
  183.         {   
  184.             PORT->HDRVE |= PORT_HDRVE_PTH1_MASK;
  185.         }   
  186.     }

  187. #endif
  188.    
  189. }

  190. /*****************************************************************************//*!
  191. * @ 由u32PinMask配置指定的引脚切换输出
  192. *        
  193. * @ 输入 pGPIO      指向GPIO模块
  194. * @ 输入 u32PinMask  指定的需要切换输出的引脚掩码
  195. *
  196. * @ 无返回
  197. *
  198. * @ Pass/ Fail criteria: none
  199. *****************************************************************************/
  200. void GPIO_Toggle(GPIO_Type *pGPIO, uint32_t u32PinMask)
  201. {
  202.     /*完整性核对 */
  203. #if defined(CPU_NV32)
  204.      ASSERT((pGPIO == GPIOA) || (pGPIO == GPIOB));
  205. #endif
  206. #if defined(CPU_NV32M3)
  207.     ASSERT(pGPIO == GPIOA);
  208. #endif
  209. #if defined(CPU_NV32M4)
  210.       ASSERT((pGPIO == GPIOA) || (pGPIO == GPIOB) || (pGPIO == GPIOC));
  211. #endif

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

  214. /*****************************************************************************//*!
  215. * @ 通过pGPIO读取指定的GPIO端口输入寄存器的值
  216. *        
  217. * @ 输入 pGPIO     指向GPIO模块.
  218. *
  219. * @ 返回32位无符号型端口输入数据  
  220. *
  221. *****************************************************************************/
  222. uint32_t GPIO_Read(GPIO_Type *pGPIO)
  223. {
  224.     /*完整性核对*/
  225. #if defined(CPU_NV32)
  226.      ASSERT((pGPIO == GPIOA) || (pGPIO == GPIOB));
  227. #endif
  228. #if defined(CPU_NV32M3)
  229.     ASSERT(pGPIO == GPIOA);
  230. #endif
  231. #if defined(CPU_NV32M4)
  232.       ASSERT((pGPIO == GPIOA) || (pGPIO == GPIOB) || (pGPIO == GPIOC));
  233. #endif

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

  237. /*****************************************************************************//*!
  238. * @ 通过PGPIO写数据到端口数据输入寄存器
  239. *        
  240. * @ 输入 pGPIO       指向GPIO模块
  241. * @ 输入 u32Value    输出的值
  242. *
  243. * @ 无返回
  244. *
  245. * @ Pass/ Fail criteria: none
  246. *****************************************************************************/
  247. void GPIO_Write(GPIO_Type *pGPIO, uint32_t u32Value)
  248. {
  249.     /*完整性核对*/
  250. #if defined(CPU_NV32)
  251.      ASSERT((pGPIO == GPIOA) || (pGPIO == GPIOB));
  252. #endif
  253. #if defined(CPU_NV32M3)
  254.     ASSERT(pGPIO == GPIOA);
  255. #endif
  256. #if defined(CPU_NV32M4)
  257.       ASSERT((pGPIO == GPIOA) || (pGPIO == GPIOB) || (pGPIO == GPIOC));
  258. #endif
  259.    
  260.     pGPIO->PDOR = u32Value;    /*写数据到端口输出寄存器*/
  261.   
  262. }

 楼主| jp_chen 发表于 2017-7-26 16:28 | 显示全部楼层
  1. /*****************************************************************************//*!
  2. * @ 通过GPIO_Pin初始化GPIO端口指定的单个引脚
  3. *        
  4. * @ 输入 GPIO_Pin        GPIO引脚名字
  5. * @ 输入 GPIO_PinConfig  配置输入和输出
  6. *
  7. * @ 无返回
  8. *****************************************************************************/
  9. void GPIO_PinInit(GPIO_PinType GPIO_Pin, GPIO_PinConfigType GPIO_PinConfig)
  10. {
  11.     /*完整性核对*/
  12.     ASSERT(GPIO_Pin <= GPIO_PTI7);
  13.       
  14.     /*配置GPIO上拉*/
  15. #if defined(CPU_NV32)
  16.       if (GPIO_Pin < GPIO_PTE0)                   /*GPIOA寄存器分配位*/
  17.       {
  18.         switch (GPIO_PinConfig)
  19.         {
  20.         case GPIO_PinOutput:                   /*GPIO端口设置为输出*/
  21.             GPIOA->PDDR |= (1<<GPIO_Pin);      /*使能端口数据方向寄存器,引脚配置为输出*/
  22.             GPIOA->PIDR |= (1<<GPIO_Pin);      /* 置位端口输入禁用寄存器,引脚未配置为通用输入 */
  23.             PORT->PUEL &= ~(1<<GPIO_Pin);    /*禁用上拉*/
  24.           break;
  25.         case GPIO_PinInput:                     /*GPIO端口配置为输入*/
  26.             GPIOA->PDDR &= ~(1<<GPIO_Pin);     /* 复位端口数据方向寄存器,引脚配置为通用输入 */
  27.             GPIOA->PIDR &= ~(1<<GPIO_Pin);     /* 清除端口输入禁用寄存器,引脚配置为通用输入 */
  28.             PORT->PUEL &= ~(1<<GPIO_Pin);    /* 禁用上拉 */
  29.           break;
  30.         case GPIO_PinInput_InternalPullup:    /*GPIO端口配置为输入内部上拉*/
  31.             GPIOA->PDDR &= ~(1<<GPIO_Pin);     /* 复位端口数据方向寄存器,引脚配置为通用输入 */
  32.             GPIOA->PIDR &= ~(1<<GPIO_Pin);     /* 清除端口输入禁用寄存器,引脚配置为通用输入 */
  33.             PORT->PUEL |= (1<<GPIO_Pin);    /*使能内部上拉*/
  34.           break;
  35.         case GPIO_PinOutput_HighCurrent:      /*GPIO端口配置为输出,高电流驱动*/
  36.             GPIOA->PDDR |= (1<<GPIO_Pin);      /*使能端口数据方向寄存器,引脚配置为输出*/
  37.             GPIOA->PIDR |= (1<<GPIO_Pin);      /* 置位端口输入禁用寄存器,引脚未配置为通用输入*/
  38.             PORT->PUEL &= ~(1<<GPIO_Pin);    /*禁用内部上拉*/
  39.           break;
  40.         }
  41.       }
  42.       else if (GPIO_Pin < GPIO_PTI0)
  43.       {
  44.         GPIO_Pin = (GPIO_PinType)(GPIO_Pin - 32);     /*GPIOB寄存器分配位*/
  45.         switch (GPIO_PinConfig)
  46.         {
  47.         case GPIO_PinOutput:                     /*GPIO端口配置为输出*/
  48.             GPIOB->PDDR |= (1<<GPIO_Pin);      /*使能数据方向寄存器,引脚配置为通用输出*/
  49.             GPIOB->PIDR |= (1<<GPIO_Pin);      /*置位端口输入禁用寄存器,引脚未配置为通用输入*/
  50.             PORT->PUEH &= ~(1<<GPIO_Pin);    /*禁用上拉输入*/
  51.           break;
  52.         case GPIO_PinInput:                     /*GPIO端口配置为输入*/
  53.             GPIOB->PDDR &= ~(1<<GPIO_Pin);     /*复位端口数据方向寄存器,引脚配置为通用输入*/
  54.             GPIOB->PIDR &= ~(1<<GPIO_Pin);     /*清除端口输入禁用寄存器,引脚配置为通用输入 */
  55.             PORT->PUEH &= ~(1<<GPIO_Pin);    /*禁用上拉*/
  56.           break;
  57.         case GPIO_PinInput_InternalPullup:      /*GPIO设置为输出内部上拉*/
  58.             GPIOB->PDDR &= ~(1<<GPIO_Pin);     /* 复位端口数据方向寄存器,引脚配置为通用输入 */
  59.             GPIOB->PIDR &= ~(1<<GPIO_Pin);     /*清除端口输入禁用寄存器,引脚配置为通用输入 */
  60.             PORT->PUEH |= (1<<GPIO_Pin);    /*使能上拉*/
  61.           break;
  62.         case GPIO_PinOutput_HighCurrent:        /*GPIO配置为输出高电流驱动*/
  63.             GPIOB->PDDR |= (1<<GPIO_Pin);      /*使能数据方向寄存器,引脚配置为通用输出*/
  64.             GPIOB->PIDR |= (1<<GPIO_Pin);      /*置位端口输入禁用寄存器,引脚未配置为通用输入*/
  65.             PORT->PUEH &= ~(1<<GPIO_Pin);    /*禁用上拉输入*/
  66.           break;
  67.         }
  68.       }
  69. #endif
  70.       
  71. #if defined(CPU_NV32M3)
  72.       if (GPIO_Pin < GPIO_PTE0)            
  73.       {
  74.         switch (GPIO_PinConfig)
  75.         {
  76.         case GPIO_PinOutput:                     
  77.             GPIOA->PDDR |= (1<<GPIO_Pin);      
  78.             GPIOA->PIDR |= (1<<GPIO_Pin);      
  79.             PORT->PUEL &= ~(1<<GPIO_Pin);  
  80.           break;
  81.         case GPIO_PinInput:                     
  82.             GPIOA->PDDR &= ~(1<<GPIO_Pin);   
  83.             GPIOA->PIDR &= ~(1<<GPIO_Pin);     
  84.             PORT->PUEL &= ~(1<<GPIO_Pin);   
  85.           break;
  86.         case GPIO_PinInput_InternalPullup:
  87.             GPIOA->PDDR &= ~(1<<GPIO_Pin);   
  88.             GPIOA->PIDR &= ~(1<<GPIO_Pin);   
  89.             PORT->PUEL |= (1<<GPIO_Pin);   
  90.         case GPIO_PinOutput_HighCurrent:
  91.             GPIOA->PDDR |= (1<<GPIO_Pin);      
  92.             GPIOA->PIDR |= (1<<GPIO_Pin);      
  93.             PORT->PUEL &= ~(1<<GPIO_Pin);   
  94.           break;
  95.         }
  96.       }
  97. #endif
  98.    
  99.    
  100. #if defined(CPU_NV32M4)
  101.       if (GPIO_Pin < GPIO_PTE0)              /*GPIOA寄存器分配位*/
  102.       {
  103.         switch (GPIO_PinConfig)
  104.         {
  105.         case GPIO_PinOutput:
  106.             GPIOA->PDDR |= (1<<GPIO_Pin);      
  107.             GPIOA->PIDR |= (1<<GPIO_Pin);      
  108.             PORT->PUE0 &= ~(1<<GPIO_Pin);   
  109.           break;
  110.         case GPIO_PinInput:
  111.             GPIOA->PDDR &= ~(1<<GPIO_Pin);     
  112.             GPIOA->PIDR &= ~(1<<GPIO_Pin);     
  113.             PORT->PUE0 &= ~(1<<GPIO_Pin);   
  114.           break;
  115.         case GPIO_PinInput_InternalPullup:
  116.             GPIOA->PDDR &= ~(1<<GPIO_Pin);   
  117.             GPIOA->PIDR &= ~(1<<GPIO_Pin);   
  118.             PORT->PUE0 |= (1<<GPIO_Pin);   
  119.           break;
  120.         case GPIO_PinOutput_HighCurrent:
  121.             GPIOA->PDDR |= (1<<GPIO_Pin);      
  122.             GPIOA->PIDR |= (1<<GPIO_Pin);     
  123.             PORT->PUE0 &= ~(1<<GPIO_Pin);   
  124.           break;
  125.         }
  126.       }
  127.       else if (GPIO_Pin < GPIO_PTI0)
  128.       {
  129.         GPIO_Pin = (GPIO_PinType)(GPIO_Pin - 32);    /*GPIOB寄存器分配位*/
  130.         switch (GPIO_PinConfig)
  131.         {
  132.         case GPIO_PinOutput:
  133.             GPIOB->PDDR |= (1<<GPIO_Pin);     
  134.             GPIOB->PIDR |= (1<<GPIO_Pin);      
  135.             PORT->PUE1 &= ~(1<<GPIO_Pin);   
  136.           break;
  137.         case GPIO_PinInput:
  138.             GPIOB->PDDR &= ~(1<<GPIO_Pin);   
  139.             GPIOB->PIDR &= ~(1<<GPIO_Pin);   
  140.             PORT->PUE1 &= ~(1<<GPIO_Pin);   
  141.           break;
  142.         case GPIO_PinInput_InternalPullup:
  143.             GPIOB->PDDR &= ~(1<<GPIO_Pin);   
  144.             GPIOB->PIDR &= ~(1<<GPIO_Pin);   
  145.             PORT->PUE1 |= (1<<GPIO_Pin);   
  146.           break;
  147.         case GPIO_PinOutput_HighCurrent:
  148.             GPIOB->PDDR |= (1<<GPIO_Pin);      
  149.             GPIOB->PIDR |= (1<<GPIO_Pin);      
  150.             PORT->PUE1 &= ~(1<<GPIO_Pin);   
  151.           break;
  152.         }
  153.       }
  154.       else
  155.       {
  156.         GPIO_Pin = (GPIO_PinType)(GPIO_Pin - 64);  /*GPIOC寄存器分配位*/
  157.         switch (GPIO_PinConfig)
  158.         {
  159.         case GPIO_PinOutput:
  160.             GPIOC->PDDR |= (1<<GPIO_Pin);      
  161.             GPIOC->PIDR |= (1<<GPIO_Pin);     
  162.             PORT->PUE2 &= ~(1<<GPIO_Pin);   
  163.           break;
  164.         case GPIO_PinInput:
  165.             GPIOC->PDDR &= ~(1<<GPIO_Pin);   
  166.             GPIOC->PIDR &= ~(1<<GPIO_Pin);   
  167.             PORT->PUE2 &= ~(1<<GPIO_Pin);   
  168.           break;
  169.         case GPIO_PinInput_InternalPullup:
  170.             GPIOC->PDDR &= ~(1<<GPIO_Pin);   
  171.             GPIOC->PIDR &= ~(1<<GPIO_Pin);   
  172.             PORT->PUE2 |= (1<<GPIO_Pin);   
  173.           break;
  174.         case GPIO_PinOutput_HighCurrent:
  175.             GPIOC->PDDR |= (1<<GPIO_Pin);     
  176.             GPIOC->PIDR |= (1<<GPIO_Pin);      
  177.             PORT->PUE2 &= ~(1<<GPIO_Pin);   
  178.           break;
  179.         }
  180.       }
  181. #endif
  182.       
  183.     /*配置GPIO端口高强度驱动使能寄存器*/
  184.     if(GPIO_PinConfig == GPIO_PinOutput_HighCurrent)     /*端口配置为输出,高电流驱动*/
  185.     {
  186. #if defined(CPU_NV32M3)
  187.         switch (GPIO_Pin)            /*选择端口*/
  188.         {
  189.             case GPIO_PTB5:               
  190.                 PORT->HDRVE |= PORT_HDRVE_PTB5_MASK;    /*使能PB5端口高电流驱动*/
  191.                 break;
  192.             case GPIO_PTC1:
  193.                 PORT->HDRVE |= PORT_HDRVE_PTC1_MASK;
  194.                 break;
  195.             case GPIO_PTC5:
  196.                 PORT->HDRVE |= PORT_HDRVE_PTC5_MASK;
  197.                 break;
  198.             default:
  199.                 break;
  200.         }
  201. #endif
  202.    
  203. #if defined(CPU_NV32M4) | defined(CPU_NV32)
  204.         switch (GPIO_Pin)
  205.         {
  206.             case GPIO_PTB4:
  207.                 PORT->HDRVE |= PORT_HDRVE_PTB4_MASK;
  208.                 break;
  209.             case GPIO_PTB5:
  210.                 PORT->HDRVE |= PORT_HDRVE_PTB5_MASK;
  211.                 break;
  212.             case GPIO_PTD0:
  213.                 PORT->HDRVE |= PORT_HDRVE_PTD0_MASK;
  214.                 break;
  215.             case GPIO_PTD1:
  216.                 PORT->HDRVE |= PORT_HDRVE_PTD1_MASK;
  217.                 break;
  218.             case GPIO_PTE0:
  219.                 PORT->HDRVE |= PORT_HDRVE_PTE0_MASK;
  220.                 break;
  221.             case GPIO_PTE1:
  222.                 PORT->HDRVE |= PORT_HDRVE_PTE1_MASK;
  223.                 break;
  224.             case GPIO_PTH0:
  225.                 PORT->HDRVE |= PORT_HDRVE_PTH0_MASK;
  226.                 break;
  227.             case GPIO_PTH1:
  228.                 PORT->HDRVE |= PORT_HDRVE_PTH1_MASK;
  229.                 break;
  230.             default:
  231.                 break;
  232.         }
  233. #endif
  234.     }
  235. }

  236. /*****************************************************************************//*!
  237. * @  通过GPIO_Pin,切换指定的单个引脚的输出
  238. *        
  239. * @ 输入 GPIO_Pin      引脚名字
  240. *
  241. * @ 无返回
  242. *
  243. *****************************************************************************/
  244. void GPIO_PinToggle(GPIO_PinType GPIO_Pin)
  245. {
  246.     /*完整性核对 */
  247.     ASSERT(GPIO_Pin <= GPIO_PTI7);

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

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

  254.     else if (GPIO_Pin < GPIO_PTI0)
  255.     {
  256.         /* PTE0-7, PTF0-7, PTH0-7, PTI0-7 */
  257.         GPIO_Pin = (GPIO_PinType)(GPIO_Pin - GPIO_PTE0);
  258.         GPIOB->PTOR = (1<<GPIO_Pin);
  259.     }
  260. #endif

  261. #if defined(CPU_NV32M4)  
  262.     else if(GPIO_Pin < GPIO_PIN_MAX)
  263.     {
  264.         /* PTI0-7 */
  265.         GPIO_Pin = (GPIO_PinType)(GPIO_Pin - GPIO_PTI0);
  266.         GPIOC->PTOR = (1<<GPIO_Pin);
  267.     }
  268. #endif
  269. }

  270. /*****************************************************************************//*!
  271. * @ 通过GPIO_Pin设置指定的单个GPIO端口逻辑电平为1
  272. *        
  273. * @ 输入 GPIO_Pin      引脚名字
  274. *
  275. * @  无返回
  276. *
  277. *****************************************************************************/
  278. void GPIO_PinSet(GPIO_PinType GPIO_Pin)
  279. {
  280.     /*完整性核对*/
  281.     ASSERT(GPIO_Pin <= GPIO_PTI7);
  282.    
  283.     if (GPIO_Pin < GPIO_PTE0)
  284.     {
  285.         /* PTA0-7, PTB0-7, PTC0-7, PTD0-7 */
  286.         GPIOA->PSOR = (1<<GPIO_Pin);    /*PDORn中的对应位位置为逻辑电平1*/
  287.     }

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

  289.     else if (GPIO_Pin < GPIO_PTI0)
  290.     {
  291.         /* PTE0-7, PTF0-7, PTH0-7, PTI0-7 */
  292.         GPIO_Pin = (GPIO_PinType)(GPIO_Pin - GPIO_PTE0);
  293.         GPIOB->PSOR = (1<<GPIO_Pin);
  294.     }
  295. #endif

  296. #if defined(CPU_NV32M4)
  297.     else if(GPIO_Pin < GPIO_PIN_MAX)
  298.     {
  299.         /* PTI0-7 */
  300.         GPIO_Pin = (GPIO_PinType)(GPIO_Pin - GPIO_PTI0);
  301.         GPIOC->PSOR = (1<<GPIO_Pin);
  302.     }
  303. #endif
  304. }

  305. /*****************************************************************************//*!
  306. * @  通过GPIO_Pin设置指定的单个GPIO端口逻辑电平为0
  307. *        
  308. * @ 输入 GPIO_Pin  引脚名字
  309. *
  310. * @ 无返回
  311. *
  312. *****************************************************************************/
  313. void GPIO_PinClear(GPIO_PinType GPIO_Pin)
  314. {
  315.     /* Sanity check */
  316.     ASSERT(GPIO_Pin <= GPIO_PTI7);
  317.    
  318.     if (GPIO_Pin < GPIO_PTE0)
  319.     {
  320.         /* PTA0-7, PTB0-7, PTC0-7, PTD0-7 */
  321.         GPIOA->PCOR = (1<<GPIO_Pin);   /*PD0Rn中的对应位清零为逻辑电平0*/
  322.     }

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

  324.     else if (GPIO_Pin < GPIO_PTI0)
  325.     {
  326.         /* PTE0-7, PTF0-7, PTH0-7, PTI0-7 */
  327.         GPIO_Pin = (GPIO_PinType)(GPIO_Pin - GPIO_PTE0);
  328.         GPIOB->PCOR = (1<<GPIO_Pin);
  329.     }
  330. #endif

  331. #if defined(CPU_NV32M4)
  332.     else if(GPIO_Pin < GPIO_PIN_MAX)
  333.     {
  334.         /* PTI0-7 */
  335.         GPIO_Pin = (GPIO_PinType)(GPIO_Pin - GPIO_PTI0);
  336.         GPIOC->PCOR = (1<<GPIO_Pin);
  337.     }
  338. #endif
  339. }

  340. /*! @} End of gpio_api_list */
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

113

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

20

主题

113

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部