📄 gpio-ext.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 + -