XINU
gpioinit.c
Go to the documentation of this file.
1 /* gpioinit.c - gpioinit */
2 
3 #include <xinu.h>
4 
6 
7 /*------------------------------------------------------------------------
8  * gpioinit - Initialize settings for a gpio device
9  *------------------------------------------------------------------------
10  */
12  struct dentry *devptr /* Entry in device switch table */
13  )
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
#define NGPIO
Definition: gpio.h:10
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
Definition: conf.h:6
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
devcall gpioinit(struct dentry *devptr)
Definition: gpioinit.c:11
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
int32 devcall
デバイスコール関数 返り値の型
Definition: kernel.h:49
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