signed int gyroRead(unsigned int addr) { unsigned int dataOut; signed int gyroVal=0; GYRO = SEL; dataOut = (spiXfer(addr) & 0x3FFF); GYRO = DESEL; delay_us(5); GYRO = SEL; dataOut = spiXfer(0x0000); GYRO = DESEL; gyroVal = SIGNED14(dataOut); delay_us(5); return gyroVal; }
signed int accelRead(unsigned int addr) { unsigned int dataOut; signed int accelVal=0; ACCEL = SEL; dataOut = (spiXfer(addr) & 0x3FFF); ACCEL = DESEL; delay_us(5); ACCEL = SEL; dataOut = (spiXfer(0x0000) & 0x3FFF); ACCEL = DESEL; if((addr == XINCL) || (addr == YINCL)) accelVal = SIGNED12(dataOut); else accelVal = SIGNED14(dataOut); delay_us(5); return (accelVal); }
int main(int argc, char *argv[]) { int loops=LOOPS; int speed=SPEED; int bytes=BYTES; int i; int h; double start, diff, sps; unsigned char buf[16384]; if (argc > 1) bytes = atoi(argv[1]); if ((bytes < 1) || (bytes > 16383)) bytes = BYTES; if (argc > 2) speed = atoi(argv[2]); if ((speed < 32000) || (speed > 32000000)) speed = SPEED; if (argc > 3) loops = atoi(argv[3]); if ((loops < 1) || (loops > 10000000)) loops = LOOPS; if (gpioInitialise() < 0) return 1; h = spiOpen(0, speed, 0); if (h < 0) return 2; start = time_time(); for (i=0; i<loops; i++) { spiXfer(h, buf, buf, bytes); } diff = time_time() - start; printf("sps=%.1f: %d bytes @ %d bps (loops=%d time=%.1f)\n", (double)loops / diff, bytes, speed, loops, diff); spiClose(h); gpioTerminate(); return 0; }
// read analog voltage from ADC int read_analog(int in_ch_adc) { char txBuf[3],rxBuf[3]; int ch_adc; // PCB was marked wrong way if (in_ch_adc == 0 ) { ch_adc = 7; } if (in_ch_adc == 1 ) { ch_adc = 6; } if (in_ch_adc == 2 ) { ch_adc = 5; } if (in_ch_adc == 3 ) { ch_adc = 4; } if (in_ch_adc == 4 ) { ch_adc = 3; } if (in_ch_adc == 5 ) { ch_adc = 2; } if (in_ch_adc == 6 ) { ch_adc = 1; } if (in_ch_adc == 7 ) { ch_adc = 0; } //printf(" ch_adc=%d\n",ch_adc); int ch_adc_b0 = ch_adc&1; int ch_adc_b1 = (ch_adc&2)>>1; int ch_adc_b2 = (ch_adc&4)>>2; if (disp_level>1) { printf(" b2 = %d b1 = %d b0 =%d\n",ch_adc_b0,ch_adc_b1,ch_adc_b2); } txBuf[0] = 1; txBuf[1] = 8 | (ch_adc_b2<<2) | (ch_adc_b1<<1) | ch_adc_b0 ; txBuf[1] = txBuf[1]<<4; txBuf[2] = 0; //sprintf(txBuf,"\x01\xF0\x00"); if (disp_level>1) { printf(" txBuf[0]=%x txBuf[1]=%x txBuf[2]=%x\n",txBuf[0],txBuf[1],txBuf[2]); } //spiWrite(spi_h,txBuf,3); spiXfer(spi_h,txBuf,rxBuf,3); //printf(" rxBuf[0]=%x rxBuf[1]=%x rxBuf[2]=%x\n",rxBuf[0],rxBuf[1],rxBuf[2]); int adc_value = ((rxBuf[1]&3) << 8) | (rxBuf[2]) ; //printf(" in_volt=%d\n",adc_value); return adc_value; }
bool spiRead(uint32_t length, uint8_t * data) { return spiXfer(length, NULL, data); }
bool spiWrite(uint32_t length, const uint8_t * data) { return spiXfer(length, data, NULL); }
void spiTransfer(void *buffer, int length) { spiXfer(length, buffer, buffer); }