XINU
Functions | Variables
gpioinit.c File Reference
#include <xinu.h>
Include dependency graph for gpioinit.c:

Go to the source code of this file.

Functions

devcall gpioinit (struct dentry *devptr)
 

Variables

struct gpiocblk gpiotab [NGPIO]
 

Function Documentation

◆ gpioinit()

devcall gpioinit ( struct dentry devptr)

Definition at line 11 of file gpioinit.c.

References gpio_csreg::clear_data, gpio_csreg::deb_ena, dentry::dvcsr, dentry::dvintr, dentry::dvirq, dentry::dvminor, gpio_csreg::falling, gpiocblk::gphookfn, GPIO1_BASE, GPIO2_BASE, GPIO3_BASE, gpiotab, gpio_csreg::irqclear0, gpio_csreg::irqclear1, gpio_csreg::irqstatus0, gpio_csreg::irqstatus1, gpio_csreg::irqwaken0, gpio_csreg::irqwaken1, gpio_csreg::level0, gpio_csreg::level1, NULL, gpio_csreg::oe, OK, PRCM_FCLK_BIT, PRCM_FCLK_GPIO1, PRCM_FCLK_GPIO2, PRCM_FCLK_GPIO3, gpio_csreg::rising, set_evec(), and gpio_csreg::sysconfig.

14 {
15  struct gpio_csreg *csrptr; /* Pointer ot GPIO CSRs */
16  struct gpiocblk *gpioptr; /* Pointer ot GPIO Control block*/
17  uint32 *fclkreg; /* FCLK Register for debounce */
18 
19  csrptr = (struct gpio_csreg *)(devptr->dvcsr);
20  gpioptr = &gpiotab[devptr->dvminor];
21 
22  /* Get the FCLK Register for the corresponding GPIO module */
23 
24  if(csrptr == GPIO1_BASE) {
25  fclkreg = PRCM_FCLK_GPIO1;
26  } else if(csrptr == GPIO2_BASE) {
27  fclkreg = PRCM_FCLK_GPIO2;
28  } else if(csrptr == GPIO3_BASE) {
29  fclkreg = PRCM_FCLK_GPIO3;
30  } else {
31  /* GPIO0 FCLK is ON by default */
32  fclkreg = NULL;
33  }
34 
35  /* Initialize register values */
36 
37  csrptr->sysconfig = 0x0;
38 
39  /* Disable output for all pins */
40 
41  csrptr->oe = 0xFFFFFFFF;
42 
43  /* Clear all pending interrupts */
44 
45  csrptr->irqstatus0 = 0xFFFFFFFF;
46  csrptr->irqstatus1 = 0xFFFFFFFF;
47 
48  /* Disable all interrupts */
49 
50  csrptr->irqclear0 = 0xFFFFFFFF;
51  csrptr->irqclear1 = 0xFFFFFFFF;
52 
53  /* Clear all pins */
54 
55  csrptr->clear_data = 0xFFFFFFFF;
56 
57  /* Clear wakeup settings */
58 
59  csrptr->irqwaken0 = 0x0;
60  csrptr->irqwaken1 = 0x0;
61 
62  /* Clear all interrupt trigger settings */
63 
64  csrptr->rising = 0x0;
65  csrptr->falling = 0x0;
66  csrptr->level0 = 0x0;
67  csrptr->level1 = 0x0;
68 
69  /* Disable debouncing */
70 
71  csrptr->deb_ena = 0x0;
72 
73  /* Setup debouncing clock */
74 
75  if(fclkreg != NULL) {
76  *fclkreg |= PRCM_FCLK_BIT;
77  }
78 
79  /* Interrupt A */
80 
81  set_evec( devptr->dvirq, (uint32)devptr->dvintr );
82 
83  /* Interrupt B is the next interrupt line */
84 
85  set_evec( (devptr->dvirq)+1, (uint32)devptr->dvintr );
86 
87  gpioptr->gphookfn = NULL;
88 
89  return OK;
90 }
#define NULL
連結リスト用のNULLポインタ
Definition: kernel.h:68
int32 dvminor
Definition: conf.h:8
volatile uint32 sysconfig
Definition: gpio.h:15
volatile uint32 irqwaken0
Definition: gpio.h:26
#define OK
処理が成功した場合
Definition: kernel.h:77
#define GPIO3_BASE
Definition: gpio.h:124
volatile uint32 deb_ena
Definition: gpio.h:39
volatile uint32 irqwaken1
Definition: gpio.h:27
volatile uint32 oe
Definition: gpio.h:32
#define PRCM_FCLK_GPIO1
Definition: gpio.h:139
volatile uint32 level1
Definition: gpio.h:36
gpiointhook gphookfn
Definition: gpio.h:49
#define PRCM_FCLK_GPIO2
Definition: gpio.h:140
int32 set_evec(uint32, uint32)
Definition: evec.c:37
#define PRCM_FCLK_GPIO3
Definition: gpio.h:141
#define GPIO2_BASE
Definition: gpio.h:123
volatile uint32 rising
Definition: gpio.h:37
volatile uint32 clear_data
Definition: gpio.h:42
Definition: gpio.h:48
volatile uint32 falling
Definition: gpio.h:38
volatile uint32 irqclear0
Definition: gpio.h:24
#define GPIO1_BASE
Definition: gpio.h:122
byte dvirq
Definition: conf.h:21
struct gpiocblk gpiotab[NGPIO]
Definition: gpioinit.c:5
unsigned int uint32
符号なし32ビット整数(unsigned int)
Definition: kernel.h:15
volatile uint32 irqclear1
Definition: gpio.h:25
void * dvcsr
Definition: conf.h:19
#define PRCM_FCLK_BIT
Definition: gpio.h:142
volatile uint32 level0
Definition: gpio.h:35
void(* dvintr)(void)
Definition: conf.h:20
volatile uint32 irqstatus1
Definition: gpio.h:21
volatile uint32 irqstatus0
Definition: gpio.h:20
Here is the call graph for this function:

Variable Documentation

◆ gpiotab

struct gpiocblk gpiotab[NGPIO]

Definition at line 5 of file gpioinit.c.

Referenced by gpiocontrol(), gpiohandler(), and gpioinit().