BOOTLOADER
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros
spi0.c
Go to the documentation of this file.
1 /******************************************************
2 * Function: s3c2440 spi0 driver
3 *
4 * File: spi0.c
5 * Author: Book Chen
6 * Date: 2008.07.18
7 *******************************************************
8 */
9 #include "includes.h"
10 
11 #define Spi0IdleState 0
12 
14 
15 void F_Spi0Init(void);
16 void F_Spi0Svc(void);
19 INT8U F_Spi0Release(INT16U UserId);
20 INT8U F_Spi0SpconSet(INT16U UserId,INT8U SpconValue);
21 INT8U F_Spi0SpstaGet(INT16U UserId,INT8U *pSpstaValue);
22 INT8U F_Spi0SppinSet(INT16U UserId,INT8U SppinValue);
23 INT8U F_Spi0SppreSet(INT16U UserId,INT8U SppreValue);
24 INT8U F_Spi0SptdatSet(INT16U UserId,INT8U SptdatValue);
25 INT8U F_Spi0SprdatGet(INT16U UserId,INT8U *pSprdatValue);
27 
28 void F_Spi0Init(void){
29  // hardware initial
30  rGPEUP&=~0x3800; // enable GPE[13.12.11] pull up resistor
31  rGPEUP|= 0x2000; // disable GPE[13.12.11] pull up resistor
32  rGPECON&=~0x0fc00000; //
33  rGPECON|= 0x0a800000; // set GPE[13.12.11] to SPICLK0,SPISI0,SPISO0
34  rGPGUP&=~0x0004; // disable GPG[3] pull up resistor
35  rGPGCON&=~0x00000030; //
36  rGPGCON|= 0x00000030; // set GPG[3] to nSS0...spi chip select for slave mode
37 
38  // data struct initial
39  Spi0Ctrl.pSpi0Register=(SPI0_REGISTER *)0x59000000;
40  Spi0Ctrl.pSpi0Register->SPCON=0x00000000;
41  Spi0Ctrl.pSpi0Register->SPSTA=0x00000001;
42  Spi0Ctrl.pSpi0Register->SPPIN=0x00000002;
43  Spi0Ctrl.pSpi0Register->SPPRE=0x00000000;
44  Spi0Ctrl.Id=ID_SPI0;
45  Spi0Ctrl.InUse=FALSE;
46  Spi0Ctrl.State=Spi0IdleState;
47 }
48 void F_Spi0Svc(void){}
50  if(Spi0Ctrl.InUse==TRUE) return TRUE;
51  else return FALSE;
52 }
54  if(Spi0Ctrl.InUse==FALSE){
55  Spi0Ctrl.InUse=TRUE;
56  Spi0Ctrl.UserId=UserId;
57  return TRUE;
58  }
59  else return FALSE;
60 }
62  if((Spi0Ctrl.InUse==TRUE)&&(Spi0Ctrl.UserId==UserId)){
63  Spi0Ctrl.InUse=FALSE;
64  Spi0Ctrl.State=Spi0IdleState;
65  return TRUE;
66  }
67  else return FALSE;
68 }
69 INT8U F_Spi0SpconSet(INT16U UserId,INT8U SpconValue){
70  if((Spi0Ctrl.InUse==TRUE)&&(Spi0Ctrl.UserId==UserId)){
71  Spi0Ctrl.pSpi0Register->SPCON=(INT32U)SpconValue;
72  return TRUE;
73  }
74  else return FALSE;
75 }
76 INT8U F_Spi0SpstaGet(INT16U UserId,INT8U *pSpstaValue){
77  if((Spi0Ctrl.InUse==TRUE)&&(Spi0Ctrl.UserId==UserId)){
78  *pSpstaValue=(INT32U)Spi0Ctrl.pSpi0Register->SPSTA;
79  return TRUE;
80  }
81  else return FALSE;
82 }
83 INT8U F_Spi0SppinSet(INT16U UserId,INT8U SppinValue){
84  if((Spi0Ctrl.InUse==TRUE)&&(Spi0Ctrl.UserId==UserId)){
85  Spi0Ctrl.pSpi0Register->SPPIN=(INT32U)SppinValue;
86  return TRUE;
87  }
88  else return FALSE;
89 }
90 INT8U F_Spi0SppreSet(INT16U UserId,INT8U SppreValue){
91  if((Spi0Ctrl.InUse==TRUE)&&(Spi0Ctrl.UserId==UserId)){
92  Spi0Ctrl.pSpi0Register->SPPRE=(INT32U)SppreValue;
93  return TRUE;
94  }
95  else return FALSE;
96 }
97 INT8U F_Spi0SptdatSet(INT16U UserId,INT8U SptdatValue){
98  if((Spi0Ctrl.InUse==TRUE)&&(Spi0Ctrl.UserId==UserId)){
99  Spi0Ctrl.pSpi0Register->SPTDAT=(INT32U)SptdatValue;
100  return TRUE;
101  }
102  else return FALSE;
103 }
104 INT8U F_Spi0SprdatGet(INT16U UserId,INT8U *pSprdatValue){
105  if((Spi0Ctrl.InUse==TRUE)&&(Spi0Ctrl.UserId==UserId)){
106  *pSprdatValue=(INT32U)Spi0Ctrl.pSpi0Register->SPRDAT;
107  return TRUE;
108  }
109  else return FALSE;
110 }
112  if((Spi0Ctrl.InUse==TRUE)&&(Spi0Ctrl.UserId==UserId)){
113  pISR_SPI0=Function;
114  return TRUE;
115  }
116  else return FALSE;
117 }
118 
119 
120 
121 
122 
123 
124 
125 
126 
127 
128 
129 
130 
131 
132 
133 
134 
135 
136 
137 
138 
139 
140 
141 
142 
143