#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers #include #define TMC_WRITE 0x00 #define TMC_READ 0x01 #define TMC_RAM 0x80 #define TMC_REG 0x00 #define SWITCH_BYTE_ORDER unsigned char tmc_spi_data_tx[4], tmc_spi_data_rx[4]; void to_4_byte_binary(long *arg) { long tmp; int i; tmp = *arg; for(i=0; i<32; i++) { if((i%8)==0) { printf(" "); } printf("%u",(int)((tmp&0x80000000)>>31)); tmp=tmp<<1; } printf("\n"); } void to_1_byte_binary(char *arg) { int i; for(i=0; i<8; i++) { printf("%u",(int)(((*arg)&0x80)>>7)); (*arg)=(*arg)<<1; } printf("\n"); } void tmc_tranceive(unsigned char preamble, unsigned long data) { #ifdef SWITCH_BYTE_ORDER tmc_spi_data_tx[0] = data & 0x0000FF; tmc_spi_data_tx[1] = (data & 0x00FF00) >> 8; tmc_spi_data_tx[2] = (data & 0xFF0000) >> 16; tmc_spi_data_tx[3] = preamble; to_4_byte_binary((long*)tmc_spi_data_tx); #else tmc_spi_data_tx[0] = preamble; tmc_spi_data_tx[1] = (data & 0xFF0000) >> 16; tmc_spi_data_tx[2] = (data & 0x00FF00) >> 8; tmc_spi_data_tx[3] = data & 0x0000FF; to_4_byte_binary((long*)tmc_spi_data_tx); #endif } inline void tmc_writeRAM(unsigned char address, unsigned long data) { tmc_tranceive(TMC_RAM | (address<<1) | TMC_WRITE, data); } inline void tmc_writeREG(unsigned char address, unsigned long data) { tmc_tranceive(TMC_REG | (address<<1) | TMC_WRITE, data); } inline void tmc_readRAM(unsigned char address) { tmc_tranceive(TMC_RAM | (address<<1) | TMC_READ, 0l); } inline void tmc_readREG(unsigned char address) { tmc_tranceive(TMC_REG | (address<<1) | TMC_READ, 0l); } int main(int argc, char* argv[]) { //0xB1998D ist 101100001 100110001 100011001 tmc_writeREG(0xD, 0x123); return 0; }