]> sigrok.org Git - sigrok-firmware-fx2lafw.git/blobdiff - sainsmart_dds120.c
scopes: Factor out SET_COUPLING() and SET_CALIBRATION_PULSE().
[sigrok-firmware-fx2lafw.git] / sainsmart_dds120.c
index 1ea478087ed6307841057356e7feb6626b7c25c4..06e47905dbbb6733a01d0906b40d19acd17425a8 100644 (file)
 
 #define SET_ANALOG_MODE() PA7 = 1
 
+#define SET_COUPLING(x) set_coupling(x)
+
+#define SET_CALIBRATION_PULSE(x) set_calibration_pulse(x)
+
 /* Toggle the 1kHz calibration pin, only accurate up to ca. 8MHz. */
 /* Note: There's no PE2 as IOE is not bit-addressable (see TRM 15.2). */
 #define TOGGLE_CALIBRATION_PIN() IOE = IOE ^ 0x04
 #define LED_GREEN() NOP
 #define LED_RED()   NOP
 
+/* CTLx pin index (IFCLK, ADC clock input). */
+#define CTL_BIT 2
+
+#define OUT0 ((1 << CTL_BIT) << 4) /* OEx = 1, CTLx = 0 */
+#define OE_CTL (((1 << CTL_BIT) << 4) | (1 << CTL_BIT)) /* OEx = CTLx = 1 */
+
 /* Change to support as many interfaces as you need. */
 static BYTE altiface = 0;
 
@@ -280,21 +290,21 @@ static const struct samplerate_info {
 } samplerates[] = {
        { 48, 0x80,   0, 3, 0, 0x00, 0xea },
        { 30, 0x80,   0, 3, 0, 0x00, 0xaa },
-       { 24,    1,   0, 2, 1, 0x40, 0xea },
-       { 16,    1,   1, 2, 0, 0x40, 0xea },
-       { 15,    1,   0, 2, 1, 0x40, 0xaa },
-       { 12,    2,   1, 2, 0, 0x40, 0xea },
-       { 11,    1,   1, 2, 0, 0x40, 0xaa },
-       {  8,    3,   2, 2, 0, 0x40, 0xea },
-       {  6,    2,   2, 2, 0, 0x40, 0xaa },
-       {  5,    3,   2, 2, 0, 0x40, 0xaa },
-       {  4,    6,   5, 2, 0, 0x40, 0xea },
-       {  3,    5,   4, 2, 0, 0x40, 0xaa },
-       {  2,   12,  11, 2, 0, 0x40, 0xea },
-       {  1,   24,  23, 2, 0, 0x40, 0xea },
-       { 50,   48,  47, 2, 0, 0x40, 0xea },
-       { 20,  120, 119, 2, 0, 0x40, 0xea },
-       { 10,  240, 239, 2, 0, 0x40, 0xea },
+       { 24,    1,   0, 2, 1, OUT0, 0xea },
+       { 16,    1,   1, 2, 0, OUT0, 0xea },
+       { 15,    1,   0, 2, 1, OUT0, 0xaa },
+       { 12,    2,   1, 2, 0, OUT0, 0xea },
+       { 11,    1,   1, 2, 0, OUT0, 0xaa },
+       {  8,    3,   2, 2, 0, OUT0, 0xea },
+       {  6,    2,   2, 2, 0, OUT0, 0xaa },
+       {  5,    3,   2, 2, 0, OUT0, 0xaa },
+       {  4,    6,   5, 2, 0, OUT0, 0xea },
+       {  3,    5,   4, 2, 0, OUT0, 0xaa },
+       {  2,   12,  11, 2, 0, OUT0, 0xea },
+       {  1,   24,  23, 2, 0, OUT0, 0xea },
+       { 50,   48,  47, 2, 0, OUT0, 0xea },
+       { 20,  120, 119, 2, 0, OUT0, 0xea },
+       { 10,  240, 239, 2, 0, OUT0, 0xea },
 };
 
 static BOOL set_samplerate(BYTE rate)
@@ -351,8 +361,8 @@ static BOOL set_samplerate(BYTE rate)
 
        /* OUTPUT 0-7 */
        EXTAUTODAT2 = samplerates[i].out0;
-       EXTAUTODAT2 = 0x44; /* OE2=1, CTL2=1 */
-       EXTAUTODAT2 = 0x44; /* OE2=1, CTL2=1 */
+       EXTAUTODAT2 = OE_CTL;
+       EXTAUTODAT2 = OE_CTL;
        EXTAUTODAT2 = 0;
        EXTAUTODAT2 = 0;
        EXTAUTODAT2 = 0;
@@ -468,10 +478,10 @@ BOOL handle_vendorcommand(BYTE cmd)
                set_numchannels(EP0BUF[0]);
                return TRUE;
        case 0xe5:
-               set_coupling(EP0BUF[0]);
+               SET_COUPLING(EP0BUF[0]);
                return TRUE;
        case 0xe6:
-               set_calibration_pulse(EP0BUF[0]);
+               SET_CALIBRATION_PULSE(EP0BUF[0]);
                return TRUE;
        }
 
@@ -528,12 +538,12 @@ static void main(void)
 
        RENUMERATE_UNCOND();
 
+       PORTECFG = 0;
        PORTCCFG = 0;
        PORTACFG = 0;
-       PORTECFG = 0;
-       OEE = 0xFF;
+       OEE = 0xff;
        OEC = 0xff;
-       OEA = 0x80;
+       OEA = 0xff;
 
        SET_ANALOG_MODE();