s3c2451_gpio函数

来源:互联网 发布:linux中复制命令 编辑:程序博客网 时间:2024/06/05 02:56
  1. #ifndef _S3C2451_GPIO_  
  2. #define _S3C2451_GPIO_  
  3.   
  4. #define GPACON  *((volatile int *)0x56000000)  
  5. #define GPADATA  *((volatile int *)0x56000004)  
  6. #define GPBCON  *((volatile int *)0x56000010)  
  7. #define GPBDATA  *((volatile int *)0x56000014)  
  8. #define GPFCON  *((volatile int *)0x56000050)  
  9. #define GPFDATA  *((volatile int *)0x56000054)  
  10. #define BIT(n) (1 << (n))  
  11.   
  12. enum{  
  13.     GPAIO = 0,  
  14.     GPBIO,  
  15.     GPFIO  
  16. };  
  17.   
  18. enum{  
  19.     INPUT = 0,  
  20.     OUTPUT  
  21. };  
  22. int GPIO_key();  
  23. int GPIO_init(int gpiox,int pin,int dir);  
  24. int GPIO_writedata(int gpiox,int pin,int data);  
  25.   
  26. #endif</pre><br>  
  27. <br>  
  28. <pre></pre>  
  29. <pre code_snippet_id="2259825" snippet_file_name="blog_20170312_3_6194001" name="code" class="html">#include"s3c2451_gpio.h"  
  30.  char temp = 0;  
  31.  char i = 0;  
  32. int GPIO_init(int gpiox,int pin,int dir)  
  33. {  
  34.     if(gpiox == GPBIO)  
  35.     {  
  36.         if(dir == INPUT)  
  37.         {  
  38.             GPBCON &= ~BIT(pin*2);  
  39.             GPBCON &= ~BIT(pin*2 + 1);  
  40.         }  
  41.         else if(dir == OUTPUT)  
  42.         {  
  43.             GPBCON |= BIT(pin*2);  
  44.             GPBCON &= ~BIT(pin*2 + 1);  
  45.         }         
  46.     }  
  47.     else if(gpiox == GPAIO)  
  48.     {  
  49.           
  50.          if(dir == OUTPUT)  
  51.         {  
  52.             GPACON &= ~BIT(pin);  
  53.         }     
  54.           
  55.     }  
  56.     else if(gpiox == GPFIO)  
  57.     {  
  58.         if(dir == INPUT)  
  59.         {  
  60.             GPFCON &= ~BIT(pin*2);  
  61.             GPFCON &= ~BIT(pin*2 + 1);  
  62.         }  
  63.         else if(dir == OUTPUT)  
  64.         {  
  65.             GPFCON |= BIT(pin*2);  
  66.             GPFCON &= ~BIT(pin*2 + 1);  
  67.         }     
  68.           
  69.     }  
  70.     return 0;  
  71. }  
  72.   
  73. int GPIO_writedata(int gpiox,int pin,int data)  
  74. {  
  75.     if(gpiox == GPBIO)  
  76.     {  
  77.         if(data == 0)  
  78.             GPBDATA &= ~BIT(pin);  
  79.         else  
  80.             GPBDATA |= BIT(pin);  
  81.     }  
  82.     else if(gpiox == GPAIO)  
  83.     {  
  84.         if(data == 0)  
  85.             GPADATA &= ~BIT(pin);  
  86.         else  
  87.             GPADATA |= BIT(pin);  
  88.           
  89.     }  
  90.     return 0;  
  91. }  
  92.   
  93. int GPIO_key()  
  94. {  
  95.       
  96.     if((GPFDATA & 0x01)== 0)  
  97.     {  
  98.         i++;  
  99.         if(i%2)  
  100.         GPIO_writedata(GPBIO,5,0);  
  101.         else  
  102.         GPIO_writedata(GPBIO,5,1);  
  103.     }  
  104.     else if((GPFDATA & 0x02)== 0)  
  105.     {  
  106.         GPIO_writedata(GPBIO,6,temp);  
  107.           
  108.         temp = ~temp;  
  109.         temp &= 0x01;  
  110.     }  
  111.     else if((GPFDATA & 0x04)== 0)  
  112.     {  
  113.         GPIO_writedata(GPAIO,25,0);  
  114.     }  
  115.     else if((GPFDATA & 0x08)== 0)  
  116.     {  
  117.         GPIO_writedata(GPAIO,26,0);  
  118.     }  
  119.     return 0;  
  120. }  
0 0