6410 gpio控制及接口
生活随笔
收集整理的這篇文章主要介紹了
6410 gpio控制及接口
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
updating
unsigned tmp;//gpe1 pull up,置位3:2=10b,其余不變 tmp = readl(S3C64XX_GPEPUD); tmp &= ~(2<<2); tmp |= 2<<2; writel(tmp,S3C64XX_GPEPUD);//gpe1 output mode,置位7:6:5:4=0001b,其余不變 tmp =readl(S3C64XX_GPECON); tmp &= ~(F<<4); tmp |= 1<<4; writel(tmp,S3C64XX_GPECON);//gpe1 output 0,置位1=0b,其余不變 tmp = __raw_readl(S3C64XX_GPEDAT); tmp &=~(1<<1) //
if(line==0 ){uart_scancode_start(S3C64XX_GPA(3));printk("-----------uart_open(%d) called\n", line);}if(line==1){uart_scancode_start(S3C64XX_GPA(7));printk("-----------uart_open(%d) called\n", line);}static void uart_scancode_init(unsigned long pin) { /*s3c_gpio_cfgpin(S3C64XX_GPM(3), S3C_GPIO_OUTPUT);//out mode s3c_gpio_setpull(S3C64XX_GPM(3),S3C_GPIO_PULL_UP);//pull */s3c_gpio_cfgpin(pin, S3C_GPIO_OUTPUT);//out mode s3c_gpio_setpull(pin,S3C_GPIO_PULL_UP);//pull}static void uart_scancode_start(unsigned long pin) {uart_scancode_init(pin);gpio_set_value(pin,0);//gpio_set_value(S3C64XX_GPM(3),1);}static void uart_scancode_stop(unsigned long pin) {gpio_set_value(pin,1);//gpio_set_value(S3C64XX_GPM(3),0);}
其中需要說明的是
1.s3c_gpio_cfgpin(pin, S3C_GPIO_OUTPUT);//out ?mode
第二個參數可選的值有
S3C_GPIO_OUTPUT
S3C_GPIO_INPUT
S3C_GPIO_SFN(x)
其定義分別是,在gpio-cfg.c
#define S3C_GPIO_INPUT (S3C_GPIO_SPECIAL(0))
#define S3C_GPIO_OUTPUT(S3C_GPIO_SPECIAL(1))
#define S3C_GPIO_SFN(x) (S3C_GPIO_SPECIAL(x))
比如
欲配置GPL8為output模式
可以是s3c_gpio_cfgpin(pin,?S3C_GPIO_OUTPUT)
也可以是s3c_gpio_cfgpin(pin,?S3C_GPIO_SFN(1))
欲配置GPL8為中斷模式
可以是s3c_gpio_cfgpin(pin,?S3C_GPIO_SFN(3))
2.s3c_gpio_setpull(pin,S3C_GPIO_PULL_UP)
第二個參數可選為
#define S3C_GPIO_PULL_NONE ((__force s3c_gpio_pull_t)0x00)
#define S3C_GPIO_PULL_DOWN ((__force s3c_gpio_pull_t)0x01)
#define S3C_GPIO_PULL_UP ((__force s3c_gpio_pull_t)0x02)
比如GPN的某個上拉位
unsigned tmp;//gpe1 pull up,置位3:2=10b,其余不變 tmp = readl(S3C64XX_GPEPUD); tmp &= ~(2<<2); tmp |= 2<<2; writel(tmp,S3C64XX_GPEPUD);//gpe1 output mode,置位7:6:5:4=0001b,其余不變 tmp =readl(S3C64XX_GPECON); tmp &= ~(F<<4); tmp |= 1<<4; writel(tmp,S3C64XX_GPECON);//gpe1 output 0,置位1=0b,其余不變 tmp = __raw_readl(S3C64XX_GPEDAT); tmp &=~(1<<1) //
if(line==0 ){uart_scancode_start(S3C64XX_GPA(3));printk("-----------uart_open(%d) called\n", line);}if(line==1){uart_scancode_start(S3C64XX_GPA(7));printk("-----------uart_open(%d) called\n", line);}static void uart_scancode_init(unsigned long pin) { /*s3c_gpio_cfgpin(S3C64XX_GPM(3), S3C_GPIO_OUTPUT);//out mode s3c_gpio_setpull(S3C64XX_GPM(3),S3C_GPIO_PULL_UP);//pull */s3c_gpio_cfgpin(pin, S3C_GPIO_OUTPUT);//out mode s3c_gpio_setpull(pin,S3C_GPIO_PULL_UP);//pull}static void uart_scancode_start(unsigned long pin) {uart_scancode_init(pin);gpio_set_value(pin,0);//gpio_set_value(S3C64XX_GPM(3),1);}static void uart_scancode_stop(unsigned long pin) {gpio_set_value(pin,1);//gpio_set_value(S3C64XX_GPM(3),0);}
其中需要說明的是
1.s3c_gpio_cfgpin(pin, S3C_GPIO_OUTPUT);//out ?mode
第二個參數可選的值有
S3C_GPIO_OUTPUT
S3C_GPIO_INPUT
S3C_GPIO_SFN(x)
其定義分別是,在gpio-cfg.c
#define S3C_GPIO_INPUT (S3C_GPIO_SPECIAL(0))
#define S3C_GPIO_OUTPUT(S3C_GPIO_SPECIAL(1))
#define S3C_GPIO_SFN(x) (S3C_GPIO_SPECIAL(x))
比如
欲配置GPL8為output模式
可以是s3c_gpio_cfgpin(pin,?S3C_GPIO_OUTPUT)
也可以是s3c_gpio_cfgpin(pin,?S3C_GPIO_SFN(1))
欲配置GPL8為中斷模式
可以是s3c_gpio_cfgpin(pin,?S3C_GPIO_SFN(3))
2.s3c_gpio_setpull(pin,S3C_GPIO_PULL_UP)
第二個參數可選為
#define S3C_GPIO_PULL_NONE ((__force s3c_gpio_pull_t)0x00)
#define S3C_GPIO_PULL_DOWN ((__force s3c_gpio_pull_t)0x01)
#define S3C_GPIO_PULL_UP ((__force s3c_gpio_pull_t)0x02)
比如GPN的某個上拉位
轉載于:https://www.cnblogs.com/-song/archive/2012/06/20/3331868.html
總結
以上是生活随笔為你收集整理的6410 gpio控制及接口的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C# DateTimePicker控件设
- 下一篇: [Erlang-0003][OTP] E