XINU
Functions
spiinit.c File Reference

SPIデバイスを初期化する。 More...

#include <xinu.h>
Include dependency graph for spiinit.c:

Go to the source code of this file.

Functions

int32 spiinit (struct dentry *devptr)
 

Detailed Description

SPIデバイスを初期化する。

Definition in file spiinit.c.

Function Documentation

◆ spiinit()

int32 spiinit ( struct dentry devptr)

Definition at line 14 of file spiinit.c.

References am335x_padctl, AM335X_PADCTL_PEN, AM335X_PADCTL_PUP, AM335X_PADCTL_RXTX, AM335X_PADCTL_TX, spi_csreg::ch, spi_csreg::chconf, spi_csreg::chctrl, dentry::dvminor, spi_csreg::modulctrl, OK, SPI_0_ADDR, SPI_0_PADCTL_CS0, SPI_0_PADCTL_D0, SPI_0_PADCTL_D1, SPI_0_PADCTL_SCLK, SPI_1_ADDR, SPI_1_PADCTL_CS0, SPI_1_PADCTL_D0, SPI_1_PADCTL_D1, SPI_1_PADCTL_SCLK, SPI_CHCONF_CLKD, SPI_CHCONF_DPE1, SPI_CHCONF_EPOL, SPI_CHCONF_FORCE, SPI_CHCONF_IS, SPI_CHCONF_WL, SPI_CHCTRL_EN, SPI_MODULCTRL_SINGLE, SPI_SYSCONFIG_SOFTRESET, SPI_SYSSTATUS_RESETDONE, spi_csreg::sysconfig, and spi_csreg::sysstatus.

16 {
17  struct spi_csreg *csrptr; /* SPI control and status regs */
18 
19  /* Set the CSR address and the pads */
20 
21  if (devptr->dvminor == 0)
22  {
23  csrptr = (struct spi_csreg *)SPI_0_ADDR;
27  0);
31  0);
35  0);
39  0);
40  }
41  else
42  {
43  *((uint32 *)0x44E00050) = 0x2;
44  csrptr = (struct spi_csreg *)SPI_1_ADDR;
48  3);
52  3);
56  3);
60  3);
61  }
62 
63  /* Reset the SPI device */
64 
66  while ((csrptr->sysstatus & SPI_SYSSTATUS_RESETDONE) == 0)
67  ;
68 
69  /* Put the device in single channel mode */
70 
72 
73  /* Set the default frequency and CS level */
74 
75  csrptr->ch[0].chconf = SPI_CHCONF_CLKD | SPI_CHCONF_EPOL |
76  (SPI_CHCONF_WL & 0x00000380) |
79 
80  /* Enable the channel */
81 
82  csrptr->ch[0].chctrl |= SPI_CHCTRL_EN;
83 
84  return OK;
85 }
struct spi_csreg::@14 ch[3]
#define SPI_CHCONF_DPE1
Definition: spi.h:57
#define SPI_1_PADCTL_D1
Definition: spi.h:35
#define AM335X_PADCTL_PEN
プルアップダウンが有効
Definition: am335x_control.h:7
#define SPI_CHCONF_CLKD
Definition: spi.h:50
volatile uint32 sysconfig
Definition: spi.h:6
#define SPI_MODULCTRL_SINGLE
Definition: spi.h:44
int32 dvminor
Definition: conf.h:8
#define SPI_0_PADCTL_SCLK
Definition: spi.h:28
#define SPI_CHCONF_IS
Definition: spi.h:58
#define SPI_0_PADCTL_D1
Definition: spi.h:30
#define SPI_0_PADCTL_D0
Definition: spi.h:29
#define OK
処理が成功した場合
Definition: kernel.h:77
#define SPI_1_PADCTL_D0
Definition: spi.h:34
#define SPI_1_PADCTL_SCLK
Definition: spi.h:33
#define AM335X_PADCTL_PUP
プルアップが選択された
Definition: am335x_control.h:9
#define SPI_CHCTRL_EN
Definition: spi.h:68
#define SPI_SYSSTATUS_RESETDONE
Definition: spi.h:42
#define AM335X_PADCTL_TX
出力限定モード
#define SPI_SYSCONFIG_SOFTRESET
Definition: spi.h:40
volatile uint32 chctrl
Definition: spi.h:16
#define SPI_0_ADDR
Definition: spi.h:25
#define SPI_CHCONF_FORCE
Definition: spi.h:60
Definition: spi.h:3
#define SPI_CHCONF_EPOL
Definition: spi.h:51
#define am335x_padctl(addr, val)
引数で指定されたアドレスに値を代入する。
#define SPI_CHCONF_WL
Definition: spi.h:52
#define SPI_1_PADCTL_CS0
Definition: spi.h:36
volatile uint32 modulctrl
Definition: spi.h:12
#define SPI_0_PADCTL_CS0
Definition: spi.h:31
volatile uint32 sysstatus
Definition: spi.h:7
#define AM335X_PADCTL_RXTX
入力モードもしくは出力モード
unsigned int uint32
符号なし32ビット整数(unsigned int)
Definition: kernel.h:15
volatile uint32 chconf
Definition: spi.h:14
#define SPI_1_ADDR
Definition: spi.h:26