73 lines
2.1 KiB
C
Executable File

#ifndef COMMON_SERVER_FUNCTIONS_H
#define COMMON_SERVER_FUNCTIONS_H
#ifndef GOTTHARDD //gotthard already had bus_w etc defined in its firmware_funcs.c (not yet made with common files)
#include "blackfin.h"
#endif
/* global variables */
void serializeToSPI(u_int32_t addr, u_int32_t val, u_int32_t csmask, int numbitstosend, u_int32_t clkmask, u_int32_t digoutmask, int digofset) {
#ifdef VERBOSE
if (numbitstosend == 16)
printf("Writing to SPI Register: 0x%04x\n",val);
else
printf("Writing to SPI Register: 0x%08x\n", val);
#endif
u_int32_t valw;
SPIChipSelect (valw, addr, csmask);
sendDataToSPI(valw, addr, val, numbitstosend, clkmask, digoutmask, digofset);
SPIChipDeselect(valw, addr, csmask, clkmask);
}
void SPIChipSelect (u_int32_t& valw, u_int32_t addr, u_int32_t csmask) {
// start point
valw = 0xffffffff; // old board compatibility (not using specific bits)
bus_w (addr, valw);
// chip sel bar down
valw &= ~csmask; /* todo with test: done a bit different, not with previous value */
bus_w (addr, valw);
}
void SPIChipDeselect (u_int32_t& valw, u_int32_t addr, u_int32_t csmask, u_int32_t clkmask) {
// chip sel bar up
valw |= csmask; /* todo with test: not done for spi */
bus_w (addr, valw);
//clk down
valw &= ~clkmask;
bus_w (addr, valw);
// stop point = start point of course
valw = 0xffffffff; // old board compatibility (not using specific bits)
bus_w (addr, valw);
}
void sendDataToSPI (u_int32_t& valw, u_int32_t addr, u_int32_t val, int numbitstosend, u_int32_t clkmask, u_int32_t digoutmask, int digofset) {
int i = 0;
for (i = 0; i < numbitstosend; ++i) {
// clk down
valw &= ~clkmask;
bus_w (addr, valw);
// write data (i)
valw = ((valw & ~digoutmask) + // unset bit
(((val >> (numbitstosend - 1 - i)) & 0x1) << digofset)); // each bit from val starting from msb
bus_w (addr, valw);
// clk up
valw |= clkmask ;
bus_w (addr, valw);
}
}
#endif //COMMON_SERVER_FUNCTIONS_H