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

📄 gpio-ext.c

📁 Wince BSP 下的Wifi 驱动 基于PXA270 CPU
💻 C
字号:
/*
File name: gpio-ext.c
Description: This is an utility for configuring the Bulverde
	- We implemented it based on the Monta_Vista generic.c
*/
#include <windows.h>
#include <nkintr.h>
#include <ceddk.h>
#include <bulverde.h>

#include "pxa-gpio.h"

void set_GPIO_mode(volatile BULVERDE_GPIO_REG* gpioRegPt, int gpio_mode)
{
	int gpio = gpio_mode & GPIO_MD_MASK_NR;
	int fn = (gpio_mode & GPIO_MD_MASK_FN) >> 8;
	int gafr;
	XLLP_VUINT32_T	*regPt;

	regPt = GPDR(gpioRegPt, gpio);
	if (gpio_mode & GPIO_MD_MASK_DIR) {
		*regPt |= GPIO_bit(gpio);
	} else {
		*regPt &= ~GPIO_bit(gpio);
	}
	regPt = GAFR(gpioRegPt, gpio);
	gafr = *regPt & ~(0x3 << (((gpio) & 0xf)*2));
	*regPt = gafr |  (fn  << (((gpio) & 0xf)*2));
	return;
}


void set_GPIO_signal(volatile BULVERDE_GPIO_REG* gpioRegPt, int signum, SIGSTATE state)
{
	XLLP_VUINT32_T	*regPt;
	
	switch (state) {
	case SIG_DOWN:
		regPt = GPCR(gpioRegPt, signum);
		*regPt |= GPIO_bit(signum);
		break;
	case SIG_UP:
		regPt = GPSR(gpioRegPt, signum);
		*regPt |= GPIO_bit(signum);
		break;
	}
	return;
}

void set_GPIO_IRQ_edge(volatile BULVERDE_GPIO_REG* gpioRegPt, int gpio_nr, SIGSTATE edge)
{
	XLLP_VUINT32_T	*regPt;
	DWORD			setbit;


	if (gpio_nr > 95) {
		goto funcFinal;
	}
	setbit = (gpio_nr > 63)? (1 << (gpio_nr-64)): ((gpio_nr > 31)?(1<<(gpio_nr-32)):(1 << gpio_nr));

	switch (edge) {
	case SIG_FALLING:
		regPt = GFER_x(gpioRegPt, gpio_nr);
		*regPt |= setbit;
		regPt = GRER_x(gpioRegPt, gpio_nr);
		*regPt &= (~setbit);
		break;
	case SIG_RISING:
		regPt = GRER_x(gpioRegPt, gpio_nr);
		*regPt |= setbit;
		regPt = GFER_x(gpioRegPt, gpio_nr);
		*regPt &= (~setbit);
		break;
		break;
	}
funcFinal:
	return;
}

⌨️ 快捷键说明

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