[技术问答] 通过BOS位实现GPIO寄存器位操作的代码示例

[复制链接]
 楼主| Bruing 发表于 2018-8-28 17:07 | 显示全部楼层 |阅读模式
  1. /**********************************************************************
  2. *
  3. * 实验名称:GPIO位带操作
  4. * 实验平台:NV32开发板
  5. * 板载芯片:NV32F101FL64E
  6. * 实验效果:通BOS位操作,实现GPIO寄存器的位操作。 不仅降低了总线占有率和CPU
  7. *           执行时间,还节省代码空间
  8. *
  9. ************************************************************************/
  10. #include "common.h"
  11. #include "systick.h"
  12. #include "bos.h"
  13. #include "gpio.h"
  14. #include "delay.h"
  15. #include "sysinit.h"
  16. #include "start.h"


  17. #define LED0_OFF    PTE7_OUT_HIGH //PE7输出为高电平
  18. #define LED0_ON     PTE7_OUT_LOW  //PE7输出为低电平
  19. #define LED1_OFF    PTH1_OUT_HIGH
  20. #define LED1_ON     PTH1_OUT_LOW
  21. #define LED2_OFF    PTH2_OUT_HIGH  
  22. #define LED2_ON     PTH2_OUT_LOW

  23. int main (void);

  24. int main (void)
  25. {
  26.         uint32_t velua;
  27.        
  28.    sysinit();
  29.          DelayInit(); //延时初始化

  30.    BOS_BIT_SET(&GPIOB->PDDR,7);  //设置PE7引脚为输出
  31.          
  32.          BOS_BIT_SET(&GPIOB->PDDR,25); //设置PH1引脚为输出
  33.          
  34.          BOS_BIT_SET(&GPIOB->PDDR,26); //设置PH2引脚为输出
  35.        
  36.          BOS_BIT_CLEAR(&GPIOA->PDDR,1); //设置PA1引脚为输入
  37.          BOS_BIT_CLEAR(&GPIOA->PIDR,1);
  38.          BOS_BIT_SET(&PORT->PUEL ,1);  //端口PA1使能上拉
  39.          velua=PTA1_IN;                //读取PA1端口输入
  40.          printf("PA1=%X.\r\n",velua);
  41.        
  42.     while(1)
  43.     {
  44.                         DelayMs(1000);
  45.                         LED0_OFF;
  46.                         DelayMs(1000);
  47.                         LED1_OFF;
  48.                         DelayMs(1000);
  49.                   LED2_OFF;
  50.                         DelayMs(1000);
  51.                         LED2_ON;
  52.                         DelayMs(1000);
  53.                         LED1_ON;
  54.                         DelayMs(1000);
  55.                         LED0_ON;
  56.                         DelayMs(1000);
  57.                         LED0_ON;
  58.                         LED1_ON;
  59.                         LED2_ON;
  60.                         DelayMs(1000);
  61.                         LED0_ON;
  62.                         LED1_ON;
  63.                         LED2_ON;
  64.     }
  65. }

  66. /********************************************************************/

 楼主| Bruing 发表于 2018-8-28 17:18 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

71

主题

308

帖子

1

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