00001
00002
00003
00004
00005
00006
00007
00008
00016
00017
00018 #include "xparameters.h"
00019 #include "xio.h"
00020 #include "asap.h"
00021 #include "asap_i.h"
00022
00023
00024 #define DATA_OFFSET 0x00000000
00025
00026
00027
00028
00039 void Asap_ColdReset(Asap *InstancePtr)
00040 {
00041 Asap_Bitfield *bits = (Asap_Bitfield*) InstancePtr->BaseAddress;
00042
00043 bits->reset_cold = 1;
00044 bits->reset_cold = 0;
00045 bits->reset_cold = 1;
00046 }
00047
00048
00063 XStatus Asap_Initialize(Asap *InstancePtr, u16 DeviceID)
00064 {
00065 Asap_Config *ConfigPtr;
00066
00067
00068 if(InstancePtr == NULL)
00069 {
00070 InstancePtr->IsReady = FALSE;
00071 return XST_DEVICE_NOT_FOUND;
00072 }
00073
00074
00075 ConfigPtr = Asap_LookupConfig(DeviceID);
00076 if(ConfigPtr == (Asap_Config *) NULL)
00077 {
00078 InstancePtr->IsReady = FALSE;
00079 return (XST_DEVICE_NOT_FOUND);
00080 }
00081
00082
00083 InstancePtr->BaseAddress = ConfigPtr->BaseAddress;
00084 InstancePtr->IsReady = TRUE;
00085
00086 return (XST_SUCCESS);
00087 }
00088
00089
00104 Asap_Config* Asap_LookupConfig(u16 DeviceID)
00105 {
00106 Asap_Config *ConfigPtr = NULL;
00107 int i;
00108
00109 for(i = 0; i < XPAR_ASAP_CONFIG_NUM_INSTANCES; i++)
00110 if(Asap_ConfigTable[i].DeviceID == DeviceID)
00111 {
00112 ConfigPtr = &Asap_ConfigTable[i];
00113 break;
00114 }
00115
00116 return ConfigPtr;
00117 }
00118
00119
00130 int Asap_miso_rdy(Asap *InstancePtr)
00131 {
00132 Asap_Bitfield *bits = (Asap_Bitfield*) InstancePtr->BaseAddress;
00133
00134 return bits->miso_rdy;
00135 }
00136
00137
00156 u32 Asap_Read(Asap *InstancePtr, u32 RegNumber)
00157 {
00158
00159 if(InstancePtr == NULL || InstancePtr->IsReady == FALSE
00160 || RegNumber < 0 || RegNumber >= 8)
00161 return 0xFFFFFFFF;
00162
00163 return ASAP_CONFIG_mReadReg(InstancePtr->BaseAddress, 4*RegNumber);
00164 }
00165
00166
00179 u32 Asap_ReadSpieMiso(Asap *InstancePtr)
00180 {
00181
00182 if(InstancePtr == NULL || InstancePtr->IsReady == FALSE)
00183 return 0xFFFFFFFF;
00184
00185 while( !Asap_miso_rdy(InstancePtr) );
00186
00187 return ASAP_CONFIG_mReadReg(InstancePtr->BaseAddress, 28);
00188 }
00189
00190
00201 void Asap_StartTransaction(Asap *InstancePtr)
00202 {
00203 Asap_Bitfield *bits = (Asap_Bitfield*) InstancePtr->BaseAddress;
00204
00205 bits->start_spi = 0;
00206 bits->start_spi = 1;
00207 bits->start_spi = 0;
00208 }
00209
00210
00226 void Asap_Write(Asap *InstancePtr, u32 RegNumber, u32 Data)
00227 {
00228
00229 if(InstancePtr == NULL || InstancePtr->IsReady == FALSE)
00230 return;
00231
00232 if(RegNumber < 0 || RegNumber >= 6)
00233 {
00234 xil_printf("WARNING: No data was written.\r\n");
00235 return;
00236 }
00237
00238 ASAP_CONFIG_mWriteReg(InstancePtr->BaseAddress, 4*RegNumber, Data);
00239
00240 return;
00241 }