1、I/O内存方式控制设备
申请:
struct resource *request_mem_region(start,len,*name)
本函数申请一个从start开始,长度为len字节的内存区,成功返回 非NULL;否则返回NULL,所 有已经在使用的I/O内存在/proc/iomem中列出。
void *ioremap(phys_addr,size)
返回一个虚拟地址,这个虚拟地址对应一个size大小的物理地址空间
访问:
从I/O内存读:
unsigned ioread8(void *addr)
unsigned ioread16(void *addr)
unsigned ioread32(void *addr)
从I/O内存写:
unsigned iowrite8(void *addr)
unsigned iowrite16(void *addr)
unsigned iowrite32(void *addr)
释放:
void iounmap(void *addr)
本函数接收ioremap函数申请的虚拟地址作为参数
void release_mem_region(start,len)
释放申请的内存资源
2、I/O内存控制单一引脚
int s3c_gpio_cfgpin(unsigned int pin,unsigned int to)
pin代表引脚,to代表一个功能,例如下面程序:
s3c_gpio_cfgpin(S5PV210_GPJ2(0) , S3C_GPIO_SFN(1) )
表示将GPJ2_0配置成特殊功能0x01,此功能是Output;
int s3c_gpio_setpull(pin , pull)
设置管脚为上拉或下拉状态
int gpio_request(gpio, *lable)
申请一个管脚gpio,并使用label去描述它,成功返回0,失败返回-1;
void gpio_free(gpio)
释放一个已经申请的引脚gpio
int gpio_direction_output(gpio, value)
在管脚gpio中输出一个电平value
int gpio_direction_input(gpio)
在管脚gpio中读取一个电平0/1