/*
  SHIFT

  Routines, die Madwizard aansturen als een schuifregister

  Pros 2007
*/




void shift2MW(unsigned char command, unsigned int data)
{
    unsigned char cnt;
    unsigned int DEL, INT;
    double tmp;

    tmp = DDS_frequency / 1000.0;                               // 6250000 -> 6250
    tmp = 2000000.0 / tmp;                                      // 2000000 / 6250 = 320
    if (tmp > 65535.0) {
        tmp = 65535.0;
    } else if (tmp < 400.0) {
        tmp = 400.0;
    }
    DEL = (unsigned int) tmp;
    INT = DEL / 400;


    for (cnt = 0; cnt < 4; cnt++) {                             // 4 command-bits
        if ((command & 0x08) == 0x08) {
            sbi(SHIFTPORT, MW_DATA);                            // Data-bit = 1
        } else {
            cbi(SHIFTPORT, MW_DATA);                            // Data-bit = 0
        }
        delay_us(INT);
        cbi(SHIFTPORT, MW_INT0);                                // INT0 van Madwizard laag maken
        delay_us(INT);
        sbi(SHIFTPORT, MW_INT0);                                // INT0 van Madwizard terug hoog maken
        delay_us(DEL);
        command = command << 1;
    }

    for (cnt = 0; cnt < 16; cnt++) {                            // 16 data-bits
        if ((data & 0x8000) == 0x8000) {
            sbi(SHIFTPORT, MW_DATA);                            // Data-bit = 1
        } else {
            cbi(SHIFTPORT, MW_DATA);                            // Data-bit = 0
        }
        delay_us(INT);
        cbi(SHIFTPORT, MW_INT0);                                // INT0 van Madwizard laag maken
        delay_us(INT);
        sbi(SHIFTPORT, MW_INT0);                                // INT0 van Madwizard terug hoog maken
        delay_us(DEL);
        data = data << 1;
    }

    cbi(SHIFTPORT, MW_INT1);                                    // INT1 van Madwizard laag maken
    delay_us(INT);;
    sbi(SHIFTPORT, MW_INT1);                                    // INT1 van Madwizard terug hoog maken
    delay_us(DEL * 2);
}