Add support for M62364 DAC on new analog board

pull/154/head
IanSB 2020-07-02 21:30:02 +01:00
rodzic 465c6be332
commit 44b82f084b
2 zmienionych plików z 97 dodań i 33 usunięć

Wyświetl plik

@ -201,17 +201,34 @@ static void sendDAC(int dac, int value)
{ {
int old_dac = -1; int old_dac = -1;
int old_value = value; int old_value = value;
int M62364_dac = 0;
switch (dac) { switch (dac) {
case 0:
M62364_dac = 0x08;
break;
case 1:
M62364_dac = 0x04;
break;
case 2: case 2:
M62364_dac = 0x0c;
old_dac = 0; old_dac = 0;
break; break;
case 3: case 3:
M62364_dac = 0x02;
old_dac = 1; old_dac = 1;
break; break;
case 4:
M62364_dac = 0x0a;
break;
case 5: case 5:
M62364_dac = 0x06;
old_dac = 2; old_dac = 2;
break; break;
case 6:
M62364_dac = 0x0e;
break;
case 7: case 7:
M62364_dac = 0x01;
old_dac = 3; old_dac = 3;
switch (config->terminate) { switch (config->terminate) {
default: default:
@ -245,16 +262,30 @@ static void sendDAC(int dac, int value)
case FRONTEND_ANALOG_ISSUE3_5259: // max5259 case FRONTEND_ANALOG_ISSUE3_5259: // max5259
case FRONTEND_ANALOG_ISSUE2_5259: case FRONTEND_ANALOG_ISSUE2_5259:
{ {
//log_info("Issue2/3 dac:%d = %d", dac, value); if (new_M62364_DAC_detected()) {
int packet = (dac << 11) | 0x600 | value; int packet = (M62364_dac << 8) | value;
RPI_SetGpioValue(STROBE_PIN, 0); //log_info("M62364 dac:%d = %02X, %03X", dac, value, packet);
for (int i = 0; i < 16; i++) { RPI_SetGpioValue(STROBE_PIN, 0);
RPI_SetGpioValue(SP_CLKEN_PIN, 0); for (int i = 0; i < 12; i++) {
RPI_SetGpioValue(SP_DATA_PIN, (packet >> 15) & 1); RPI_SetGpioValue(SP_CLKEN_PIN, 0);
delay_in_arm_cycles_cpu_adjust(500); RPI_SetGpioValue(SP_DATA_PIN, (packet >> 11) & 1);
RPI_SetGpioValue(SP_CLKEN_PIN, 1); delay_in_arm_cycles_cpu_adjust(500);
delay_in_arm_cycles_cpu_adjust(500); RPI_SetGpioValue(SP_CLKEN_PIN, 1);
packet <<= 1; delay_in_arm_cycles_cpu_adjust(500);
packet <<= 1;
}
} else {
//log_info("Issue2/3 dac:%d = %d", dac, value);
int packet = (dac << 11) | 0x600 | value;
RPI_SetGpioValue(STROBE_PIN, 0);
for (int i = 0; i < 16; i++) {
RPI_SetGpioValue(SP_CLKEN_PIN, 0);
RPI_SetGpioValue(SP_DATA_PIN, (packet >> 15) & 1);
delay_in_arm_cycles_cpu_adjust(500);
RPI_SetGpioValue(SP_CLKEN_PIN, 1);
delay_in_arm_cycles_cpu_adjust(500);
packet <<= 1;
}
} }
RPI_SetGpioValue(STROBE_PIN, 1); RPI_SetGpioValue(STROBE_PIN, 1);
RPI_SetGpioValue(SP_DATA_PIN, 0); RPI_SetGpioValue(SP_DATA_PIN, 0);

Wyświetl plik

@ -201,16 +201,36 @@ static int getRange() {
static void sendDAC(int dac, int value) static void sendDAC(int dac, int value)
{ {
//if new_M62364_DAC_detected() int M62364_dac = 0;
switch (dac) {
if (frontend == FRONTEND_YUV_ISSUE2_5259) { case 0:
switch (dac) { M62364_dac = 0x08;
case 6: break;
case 1:
M62364_dac = 0x04;
break;
case 2:
M62364_dac = 0x0c;
break;
case 3:
M62364_dac = 0x02;
break;
case 4:
M62364_dac = 0x0a;
break;
case 5:
M62364_dac = 0x06;
break;
case 6:
M62364_dac = 0x0e;
if (frontend == FRONTEND_YUV_ISSUE2_5259) {
dac = 7; dac = 7;
break; }
case 7: break;
{ case 7:
M62364_dac = 0x01;
if (frontend == FRONTEND_YUV_ISSUE2_5259) {
dac = 6; dac = 6;
switch (config->terminate) { switch (config->terminate) {
default: default:
@ -220,24 +240,37 @@ static void sendDAC(int dac, int value)
case YUV_INPUT_TERM: case YUV_INPUT_TERM:
value = 255; //termination value = 255; //termination
break; break;
} }
}
break;
default:
break;
} }
break;
default:
break;
} }
int packet = (dac << 11) | 0x600 | value; if (new_M62364_DAC_detected()) {
int packet = (M62364_dac << 8) | value;
RPI_SetGpioValue(STROBE_PIN, 0); //log_info("M62364 dac:%d = %02X, %03X", dac, value, packet);
for (int i = 0; i < 16; i++) { RPI_SetGpioValue(STROBE_PIN, 0);
RPI_SetGpioValue(SP_CLKEN_PIN, 0); for (int i = 0; i < 12; i++) {
RPI_SetGpioValue(SP_DATA_PIN, (packet >> 15) & 1); RPI_SetGpioValue(SP_CLKEN_PIN, 0);
delay_in_arm_cycles_cpu_adjust(500); RPI_SetGpioValue(SP_DATA_PIN, (packet >> 11) & 1);
RPI_SetGpioValue(SP_CLKEN_PIN, 1); delay_in_arm_cycles_cpu_adjust(500);
delay_in_arm_cycles_cpu_adjust(500); RPI_SetGpioValue(SP_CLKEN_PIN, 1);
packet <<= 1; delay_in_arm_cycles_cpu_adjust(500);
packet <<= 1;
}
} else {
//log_info("Issue2/3 dac:%d = %d", dac, value);
int packet = (dac << 11) | 0x600 | value;
RPI_SetGpioValue(STROBE_PIN, 0);
for (int i = 0; i < 16; i++) {
RPI_SetGpioValue(SP_CLKEN_PIN, 0);
RPI_SetGpioValue(SP_DATA_PIN, (packet >> 15) & 1);
delay_in_arm_cycles_cpu_adjust(500);
RPI_SetGpioValue(SP_CLKEN_PIN, 1);
delay_in_arm_cycles_cpu_adjust(500);
packet <<= 1;
}
} }
RPI_SetGpioValue(STROBE_PIN, 1); RPI_SetGpioValue(STROBE_PIN, 1);
RPI_SetGpioValue(SP_DATA_PIN, 0); RPI_SetGpioValue(SP_DATA_PIN, 0);