BOOTLOADER
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros
spi1.c
Go to the documentation of this file.
1 /******************************************************
2 * Function: s3c2440 spi1 driver
3 *
4 * File: spi1.c
5 * Author: Book Chen
6 * Date: 2008.07.18
7 *******************************************************
8 */
9 #include "includes.h"
10 
11 #define Spi1IdleState 0
12 
14 
15 void F_Spi1Init(void);
16 void F_Spi1Svc(void);
19 INT8U F_Spi1Release(INT16U UserId);
20 INT8U F_Spi1SpconSet(INT16U UserId,INT8U SpconValue);
21 INT8U F_Spi1SpstaGet(INT16U UserId,INT8U *pSpstaValue);
22 INT8U F_Spi1SppinSet(INT16U UserId,INT8U SppinValue);
23 INT8U F_Spi1SppreSet(INT16U UserId,INT8U SppreValue);
24 INT8U F_Spi1SptdatSet(INT16U UserId,INT8U SptdatValue);
25 INT8U F_Spi1SprdatGet(INT16U UserId,INT8U *pSprdatValue);
27 
28 void F_Spi1Init(void){
29  //hardware initial
30  rGPGUP&=~0x00e0; // enable GPG[7.6.5] pull up resistor
31  rGPGUP|= 0x0080; // disable GPG[7.6.5] pull up resistor
32  rGPGCON&=~0x0000fc00; //
33  rGPGCON|= 0x0000fc00; // set GPE[13.12.11] to SPICLK0,SPISI0,SPISO0
34  rGPGUP&=~0x0008; // disable GPG[3] pull up resistor
35  rGPGCON&=~0x000000c0; //
36  rGPGCON|= 0x000000c0; // set GPG[3] to nSS1...spi chip select for slave mode
37  //data struct initial
38  Spi1Ctrl.pSpi1Register=(SPI1_REGISTER *)0x59000020;
39  Spi1Ctrl.pSpi1Register->SPCON=0x00000000;
40  Spi1Ctrl.pSpi1Register->SPSTA=0x00000001;
41  Spi1Ctrl.pSpi1Register->SPPIN=0x00000002;
42  Spi1Ctrl.pSpi1Register->SPPRE=0x00000000;
43  Spi1Ctrl.Id=ID_SPI1;
44  Spi1Ctrl.InUse=FALSE;
45  Spi1Ctrl.State=Spi1IdleState;
46 }
47 void F_Spi1Svc(void){}
49  if(Spi1Ctrl.InUse==TRUE) return TRUE;
50  else return FALSE;
51 }
53  if(Spi1Ctrl.InUse==FALSE){
54  Spi1Ctrl.InUse=TRUE;
55  Spi1Ctrl.UserId=UserId;
56  return TRUE;
57  }
58  else return FALSE;
59 }
61  if((Spi1Ctrl.InUse==TRUE)&&(Spi1Ctrl.UserId==UserId)){
62  Spi1Ctrl.InUse=FALSE;
63  Spi1Ctrl.State=Spi1IdleState;
64  return TRUE;
65  }
66  else return FALSE;
67 }
68 INT8U F_Spi1SpconSet(INT16U UserId,INT8U SpconValue){
69  if((Spi1Ctrl.InUse==TRUE)&&(Spi1Ctrl.UserId==UserId)){
70  Spi1Ctrl.pSpi1Register->SPCON=(INT32U)SpconValue;
71  return TRUE;
72  }
73  else return FALSE;
74 }
75 INT8U F_Spi1SpstaGet(INT16U UserId,INT8U *pSpstaValue){
76  if((Spi1Ctrl.InUse==TRUE)&&(Spi1Ctrl.UserId==UserId)){
77  *pSpstaValue=(INT32U)Spi1Ctrl.pSpi1Register->SPSTA;
78  return TRUE;
79  }
80  else return FALSE;
81 }
82 INT8U F_Spi1SppinSet(INT16U UserId,INT8U SppinValue){
83  if((Spi1Ctrl.InUse==TRUE)&&(Spi1Ctrl.UserId==UserId)){
84  Spi1Ctrl.pSpi1Register->SPPIN=(INT32U)SppinValue;
85  return TRUE;
86  }
87  else return FALSE;
88 }
89 INT8U F_Spi1SppreSet(INT16U UserId,INT8U SppreValue){
90  if((Spi1Ctrl.InUse==TRUE)&&(Spi1Ctrl.UserId==UserId)){
91  Spi1Ctrl.pSpi1Register->SPPRE=(INT32U)SppreValue;
92  return TRUE;
93  }
94  else return FALSE;
95 }
96 INT8U F_Spi1SptdatSet(INT16U UserId,INT8U SptdatValue){
97  if((Spi1Ctrl.InUse==TRUE)&&(Spi1Ctrl.UserId==UserId)){
98  Spi1Ctrl.pSpi1Register->SPTDAT=(INT32U)SptdatValue;
99  return TRUE;
100  }
101  else return FALSE;
102 }
103 INT8U F_Spi1SprdatGet(INT16U UserId,INT8U *pSprdatValue){
104  if((Spi1Ctrl.InUse==TRUE)&&(Spi1Ctrl.UserId==UserId)){
105  *pSprdatValue=(INT32U)Spi1Ctrl.pSpi1Register->SPRDAT;
106  return TRUE;
107  }
108  else return FALSE;
109 }
111  if((Spi0Ctrl.InUse==TRUE)&&(Spi0Ctrl.UserId==UserId)){
112  pISR_SPI1=Function;
113  return TRUE;
114  }
115  else return FALSE;
116 }
117 
118 
119 
120 
121 
122