⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gpio.c

📁 pxa270 Linux开发板上用的读取、修改PXA270寄存器的程序
💻 C
字号:
/* * gpiotool - user-level access to PXA27x GPIO registers * * (C) 2006 by Harald Welte <laforge@openezx.org> * * This program is Free Software and licensed under GNU GPL Version 2, * as published by the Free Software Foundation. */#include <string.h>#include "gpio_regs.h"#include "mmio.h"void pxa_gpio_mode_set(int gpio_mode){	int gpio = gpio_mode & GPIO_MD_MASK_NR;	int fn = (gpio_mode & GPIO_MD_MASK_FN) >> 8;	u_int32_t gafr;	u_int32_t tmp;	if (gpio_mode & GPIO_DFLT_LOW)		mmio_wr(GPCR(gpio), GPIO_bit(gpio));	else if (gpio_mode & GPIO_DFLT_HIGH)		mmio_wr(GPSR(gpio), GPIO_bit(gpio));	tmp = mmio_rd(GPDR(gpio));	if (gpio_mode & GPIO_MD_MASK_DIR)		tmp |= GPIO_bit(gpio);	else		tmp &= ~GPIO_bit(gpio);	mmio_wr(GPDR(gpio), tmp);	gafr = mmio_rd(GAFR(gpio));	gafr &= ~(0x03 << (((gpio) & 0xf)*2));	gafr |=  (fn   << (((gpio) & 0xf)*2));	mmio_wr(GAFR(gpio), gafr);}int pxa_gpio_mode_get(int gpio_in){	int gpio = gpio_in & GPIO_MD_MASK_NR;	int mode = 0;	u_int32_t tmp;	tmp = mmio_rd(GPDR(gpio));	if (tmp & GPIO_bit(gpio))		mode  |= GPIO_OUT;	tmp = mmio_rd(GAFR(gpio));	tmp = (tmp >> (((gpio) & 0xf)*2)) & 0x03;		return mode | (tmp << 8);}int pxa_gpio_read(int gpio){	unsigned long addr = GPLR(gpio);		return mmio_rd(addr) & GPIO_bit(gpio) ? 1 : 0;}int pxa_gpio_set(int gpio, int val){	if (val == 0)		return mmio_wr(GPCR(gpio), GPIO_bit(gpio));	else		return mmio_wr(GPSR(gpio), GPIO_bit(gpio));}char *pxa_gpio_mode2txt(int mode){	static char buf[255];	buf[0] = 0;	if (mode & GPIO_OUT)		strcat(buf, "OUT ");	else		strcat(buf, "IN  ");	switch (mode & GPIO_MD_MASK_FN) {	case GPIO_ALT_FN_3_IN:		strcat(buf, "AF3 ");		break;	case GPIO_ALT_FN_2_IN:		strcat(buf, "AF2 ");		break;	case GPIO_ALT_FN_1_IN:		strcat(buf, "AF1 ");		break;	}	return buf;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -