Browse Source

Аттенюатор и ЦАП теперь отгружаются в режиме 4Mosi.

zaytsev.mikhail.olegovich@gmail.com 1 năm trước cách đây
mục cha
commit
bd0a65dd43
6 tập tin đã thay đổi với 88 bổ sung37 xóa
  1. 16 0
      Devices/dac8811.c
  2. 3 1
      Devices/dac8811.h
  3. 18 0
      Devices/potentiometer.c
  4. 3 1
      Devices/potentiometer.h
  5. 34 17
      command.c
  6. 14 18
      main.c

+ 16 - 0
Devices/dac8811.c

@@ -10,6 +10,22 @@ void dac8811_set(void *bar1, uint16_t dac_data) {
     *ptr = dac_data;
 }
 
+void dac8811_set_qspi(void *bar1, uint16_t dac_data) {
+    uint32_t *data = bar1 + DAC8811_BASE_ADDR;
+    //Create a header
+    *data = ((ENUM_SPIMODE_4MOSI) |(0x1 << BITP_DAC_4MOSI_HEADER)| TERM_BIT_1);
+    // Send the data 
+    *data = dac_data;
+}
+
+void dac8811_att_set_qspi(void *bar1, uint16_t dac_data) {
+    uint32_t *data = bar1 + DAC8811_BASE_ADDR;
+    //Create a header
+    *data = ((ENUM_SPIMODE_4MOSI) |(0x1 << BITP_ATT_4MOSI_HEADER)| TERM_BIT_1);
+    // Send the data 
+    *data = dac_data;
+}
+
 void dac8811_att_set(void *bar1, uint16_t dac_data) {
     //Header for DAC8811
     uint32_t *ptr_header = bar1 + DAC8811_BASE_ADDR;

+ 3 - 1
Devices/dac8811.h

@@ -8,4 +8,6 @@
 
 
 void dac8811_set(void *bar1, uint16_t dac_data);
-void dac8811_att_set(void *bar1, uint16_t dac_data);
+void dac8811_att_set(void *bar1, uint16_t dac_data);
+void dac8811_att_set_qspi(void *bar1, uint16_t dac_data);
+void dac8811_set_qspi(void *bar1, uint16_t dac_data);

+ 18 - 0
Devices/potentiometer.c

@@ -33,4 +33,22 @@ void potentiometer_set_qspi(uint8_t pot_offset, uint8_t pot_slope ) {
 
     pot_array[0] = pot_ch_a;
     pot_array[1] = pot_ch_b;
+}
+
+void potentiometer_set_offset (void *bar1, uint8_t pot_offset) {
+    uint32_t pot_ch_a      =    (TPL0202_CMD_WR_WIPER_REG_ENUM << TPL0202_CMD_BITP)|(TPL0202_ADR_A_ENUM << TPL0202_ADR_BITP)|(pot_offset << TPL0202_DATA_BITP);
+      uint32_t *data = bar1 + LMX_BASE_ADDR;
+    //Create a header
+    *data = ((ENUM_SPIMODE_4MOSI) |(0x1 << BITP_POT_4MOSI_HEADER)| TERM_BIT_1);
+    *data = pot_ch_a;
+
+}
+
+void potentiometer_set_slope ( void *bar1, uint8_t pot_slope) {
+    uint32_t pot_ch_b     =    (TPL0202_CMD_WR_WIPER_REG_ENUM << TPL0202_CMD_BITP)|(TPL0202_ADR_B_ENUM << TPL0202_ADR_BITP)|(pot_slope << TPL0202_DATA_BITP);
+    uint32_t *data = bar1 + LMX_BASE_ADDR;
+    //Create a header
+    *data = ((ENUM_SPIMODE_4MOSI) |(0x1 << BITP_POT_4MOSI_HEADER)| TERM_BIT_1);
+    *data = pot_ch_b;
+
 }

+ 3 - 1
Devices/potentiometer.h

@@ -20,4 +20,6 @@
 extern uint32_t pot_array [2];
 
 void potentiometer_set(void *bar1, uint8_t pot_val_ch_a, uint8_t pot_val_ch_b);
-void potentiometer_set_qspi(uint8_t pot_offset, uint8_t pot_slope );
+void potentiometer_set_qspi(uint8_t pot_offset, uint8_t pot_slope );
+void potentiometer_set_offset (void *bar1, uint8_t pot_offset);
+void potentiometer_set_slope ( void *bar1, uint8_t pot_slope);

+ 34 - 17
command.c

@@ -63,11 +63,11 @@ void handleFreqCmd(const char* recvBuff)
 	// Send the data 
 	send_data_qspi(bar1);
 	   // Return the 1 MOSI mode
-    usleep(1);
-	cfg_reg = get_cfg_reg();
-    SET_REGISTER_PARAM(cfg_reg,CFG_REG_SPI_MODE_BITM,CFG_REG_SPI_MODE_BITP, CFG_REG_SPI_MODE_1MOSI);
-    *spi_mode = cfg_reg;
-    set_cfg_reg(cfg_reg);
+    // usleep(1);
+	// cfg_reg = get_cfg_reg();
+    // SET_REGISTER_PARAM(cfg_reg,CFG_REG_SPI_MODE_BITM,CFG_REG_SPI_MODE_BITP, CFG_REG_SPI_MODE_1MOSI);
+    // *spi_mode = cfg_reg;
+    // set_cfg_reg(cfg_reg);
 	
 }
 void send_data_qspi(void *bar1) {
@@ -75,7 +75,7 @@ void send_data_qspi(void *bar1) {
 	uint32_t gpio_reg = get_tmsg_gpio_reg();
 	uint32_t shift_reg = get_tmsg_shift_reg();
 	// Create a header 4 Mosi mode
-	uint32_t qspi_header = ((ENUM_SPIMODE_4MOSI) |(0x1 << BITP_GPIO_4MOSI_HEADER) |(0x1 << BITP_SHIFT_REG_4MOSI_HEADER )| ((sizeof(ad9912_ftw_regs_qspi) / 4) << BITP_DDS_4MOSI_HEADER) | ((sizeof(lmx_change_freq_regs) / 4) << BITP_LMX2594_4MOSI_HEADER) | (0x1 << BITP_DAC_4MOSI_HEADER) | (0x1 << BITP_ATT_4MOSI_HEADER) |(0x2 << BITP_POT_4MOSI_HEADER)| TERM_BIT_1);
+	uint32_t qspi_header = ((ENUM_SPIMODE_4MOSI) |(0x1 << BITP_GPIO_4MOSI_HEADER) |(0x1 << BITP_SHIFT_REG_4MOSI_HEADER )| ((sizeof(ad9912_ftw_regs_qspi) / 4) << BITP_DDS_4MOSI_HEADER) | ((sizeof(lmx_change_freq_regs) / 4) << BITP_LMX2594_4MOSI_HEADER) | TERM_BIT_1);
 	uint32_t *data = bar1 + LMX_BASE_ADDR;
 	*data = qspi_header;
 	// Initialize the registers
@@ -91,14 +91,6 @@ void send_data_qspi(void *bar1) {
 	}
 	// Send the data for the shift register
 	*data = shift_reg;
-	// Send the data for the potentiometer
-	for (int i = 0; i < sizeof(pot_array) / 4; i++) {
-		*data = pot_array[i];
-	}
-	// Send the data for the DAC
-	*data = armCode[0];
-	// Send the data for the ATT
-	*data = attCode[0];
 
 }
 
@@ -150,7 +142,14 @@ void handleArmCmd(const char* recvBuff)
 
 	splitLexeme(recvBuff, armCode, sizeof(armCode[0]), convertToUInt16);
 	printf("\n%u\n", armCode[0]);
-	// dac8811_set(bar1,armCode[0]);
+
+	uint32_t cfg_reg = get_cfg_reg();
+    SET_REGISTER_PARAM(cfg_reg, CFG_REG_SPI_MODE_BITM, CFG_REG_SPI_MODE_BITP, CFG_REG_SPI_MODE_4MOSI); 
+    uint32_t *spi_mode = bar1 +CFG_REG_ADDR;
+    *spi_mode = cfg_reg;
+	set_cfg_reg(cfg_reg);
+
+	dac8811_set_qspi(bar1,armCode[0]);
 }
 
 void handleAttCmd(const char* recvBuff)
@@ -159,7 +158,14 @@ void handleAttCmd(const char* recvBuff)
 
 	splitLexeme(recvBuff, attCode, sizeof(attCode[0]), convertToUInt16);
 	printf("\n%u\n", attCode[0]);
-	// dac8811_att_set(bar1,attCode[0]);
+
+	uint32_t cfg_reg = get_cfg_reg();
+    SET_REGISTER_PARAM(cfg_reg, CFG_REG_SPI_MODE_BITM, CFG_REG_SPI_MODE_BITP, CFG_REG_SPI_MODE_4MOSI); 
+    uint32_t *spi_mode = bar1 +CFG_REG_ADDR;
+    *spi_mode = cfg_reg;
+	set_cfg_reg(cfg_reg);
+
+	dac8811_att_set_qspi(bar1, attCode[0]);
 }
 
 void handleIdnCmd(const char* recvBuff)
@@ -176,14 +182,25 @@ void handleOffsetCmd(const char* recvBuff)
 
 	splitLexeme(recvBuff, offsetCode, sizeof(offsetCode[0]), convertToUInt16);
 	printf("\n%u\n", offsetCode[0]);
+	uint32_t cfg_reg = get_cfg_reg();
+    SET_REGISTER_PARAM(cfg_reg, CFG_REG_SPI_MODE_BITM, CFG_REG_SPI_MODE_BITP, CFG_REG_SPI_MODE_4MOSI); 
+    uint32_t *spi_mode = bar1 +CFG_REG_ADDR;
+    *spi_mode = cfg_reg;
+	set_cfg_reg(cfg_reg);
+	potentiometer_set_offset(bar1, offsetCode[0]);
 }
 
 void handleSlopeCmd(const char* recvBuff)
 {
 	printf("\nHandle command \"TMSG44:SLOPE\"\n");
-
 	splitLexeme(recvBuff, slopeCode, sizeof(slopeCode[0]), convertToUInt16);
 	printf("\n%u\n", slopeCode[0]);
+	uint32_t cfg_reg = get_cfg_reg();
+    SET_REGISTER_PARAM(cfg_reg, CFG_REG_SPI_MODE_BITM, CFG_REG_SPI_MODE_BITP, CFG_REG_SPI_MODE_4MOSI); 
+    uint32_t *spi_mode = bar1 +CFG_REG_ADDR;
+    *spi_mode = cfg_reg;
+	set_cfg_reg(cfg_reg);
+	potentiometer_set_slope(bar1, slopeCode[0]);
 }
 
 //Проходим по массиву команд и ищем команду, которая совпадает с началом строки recvBuff. 

+ 14 - 18
main.c

@@ -75,6 +75,7 @@ int main(int argc, char *argv[])
 {
 	char *filename = "/dev/MyDmaModule";
 
+	struct timeval  tv;
 	// Длина структуры адреса
 	socklen_t client_len;
 	// Переменная для количества байт принятых из сокета и для хранения ошибок
@@ -162,11 +163,19 @@ int main(int argc, char *argv[])
 
 		//Очистка буфера
 		memset(recvBuff, 0, sizeof(recvBuff));
+		double time_begin =0;
 
-		n = recv(conn_fd, recvBuff, sizeof(recvBuff) - 1, 0);
-		struct timeval  tv;
-		while (n > 0)
+		while ((n = recv(conn_fd, recvBuff, sizeof(recvBuff) - 1, 0)) > 0)
 		{
+			gettimeofday(&tv, NULL);
+			double time_end = ((double)tv.tv_sec) * 1000 +
+                    ((double)tv.tv_usec) / 1000 ;
+
+			double total_time_ms = time_end - time_begin;
+
+			printf("TOTAL TIME (ms) = %f\n", total_time_ms);
+			recvBuff[n] = 0;
+		
 			if(fputs(recvBuff, stdout) == EOF)
 			{
 				printf("\n Error : Fputs error\n");
@@ -189,24 +198,11 @@ int main(int argc, char *argv[])
 				// Ищем команды разделенные разделителем
 				ptrLexeme = strtok_r(NULL, charSeparator, &savePtr);
 			}
-			
 			gettimeofday(&tv, NULL);
 
-			double time_begin = ((double)tv.tv_sec) * 1000 +
+			 time_begin = ((double)tv.tv_sec) * 1000 +
                       ((double)tv.tv_usec) / 1000;
-
-			recvBuff[n] = 0;
-
-			n = recv(conn_fd, recvBuff, sizeof(recvBuff) - 1, 0);
-
-			gettimeofday(&tv, NULL);
-			double time_end = ((double)tv.tv_sec) * 1000 +
-                    ((double)tv.tv_usec) / 1000 ;
-
-			double total_time_ms = time_end - time_begin;
-
-			printf("TOTAL TIME (ms) = %f\n", total_time_ms);
-		} 
+		}  
 
 		if (n == 0)
 		{