potentiometer.c 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #include "potentiometer.h"
  2. #include "tmsgheaders.h"
  3. uint32_t pot_array [2] = {0,0};
  4. double freq_file [FILE_ROWS] = {0};
  5. uint32_t pot_offset [FILE_ROWS]= {0};
  6. uint32_t pot_slope [FILE_ROWS]= {0};
  7. uint32_t pot_ch_a_file;
  8. uint32_t pot_ch_b_file;
  9. /* arrays of potentiometer values from file */
  10. void potentiometer_set(reg_addr_pci* pci_bar_1, uint8_t pot_val_ch_a, uint8_t pot_val_ch_b) {
  11. usleep(1);
  12. uint32_t cfg_reg = get_cfg_reg();
  13. SET_REGISTER_PARAM(cfg_reg, CFG_REG_SPI_MODE_BITM, CFG_REG_SPI_MODE_BITP, CFG_REG_SPI_MODE_4MOSI);
  14. pci_bar_1->cfg_reg_addr = cfg_reg;
  15. uint32_t pot_ch_a = (TPL0202_CMD_WR_WIPER_REG_ENUM << TPL0202_CMD_BITP)|(TPL0202_ADR_B_ENUM << TPL0202_ADR_BITP)|(pot_val_ch_a << TPL0202_DATA_BITP);
  16. uint32_t pot_ch_b = (TPL0202_CMD_WR_WIPER_REG_ENUM << TPL0202_CMD_BITP)|(TPL0202_ADR_A_ENUM << TPL0202_ADR_BITP)|(pot_val_ch_b << TPL0202_DATA_BITP);
  17. // Create a header for the Potentiometer 4MOSI
  18. uint32_t pot_header = (ENUM_SPIMODE_4MOSI | (0x2 << BITP_POT_4MOSI_HEADER) | SB_HEADER_TERM_BIT_1);
  19. pci_bar_1->sbtmsg_addr = pot_header;
  20. // Send the data
  21. pci_bar_1->sbtmsg_addr = pot_ch_a;
  22. pci_bar_1->sbtmsg_addr = pot_ch_b;
  23. usleep(1);
  24. SET_REGISTER_PARAM(cfg_reg, CFG_REG_SPI_MODE_BITM, CFG_REG_SPI_MODE_BITP, CFG_REG_SPI_MODE_1MOSI);
  25. pci_bar_1->cfg_reg_addr = cfg_reg;
  26. set_cfg_reg(cfg_reg);
  27. usleep(1);
  28. }
  29. /* Read the potentiometer values from the file */
  30. void read_pot_file (const char* filename) {
  31. FILE *file = fopen(filename, "r");
  32. if (file == NULL) {
  33. printf("Error: File not found\n");
  34. return;
  35. }
  36. int i = 0;
  37. while (fscanf(file, "%lf %u %u", &freq_file[i], &pot_slope[i], &pot_offset[i]) != EOF) {
  38. i++;
  39. }
  40. fclose(file);
  41. }
  42. void set_pot_values(double freq){
  43. for (int i = 0; i < FILE_ROWS; i++) {
  44. if (freq <= freq_file[i]) {
  45. if (i == 0) {
  46. pot_ch_a_file = (TPL0202_CMD_WR_WIPER_REG_ENUM << TPL0202_CMD_BITP)|(TPL0202_ADR_A_ENUM << TPL0202_ADR_BITP)|(pot_offset[i] << TPL0202_DATA_BITP);
  47. pot_ch_b_file = (TPL0202_CMD_WR_WIPER_REG_ENUM << TPL0202_CMD_BITP)|(TPL0202_ADR_B_ENUM << TPL0202_ADR_BITP)|(pot_slope[i]<< TPL0202_DATA_BITP);
  48. break;
  49. }
  50. pot_ch_a_file = (TPL0202_CMD_WR_WIPER_REG_ENUM << TPL0202_CMD_BITP)|(TPL0202_ADR_A_ENUM << TPL0202_ADR_BITP)|(pot_offset[i-1] << TPL0202_DATA_BITP);
  51. pot_ch_b_file = (TPL0202_CMD_WR_WIPER_REG_ENUM << TPL0202_CMD_BITP)|(TPL0202_ADR_B_ENUM << TPL0202_ADR_BITP)|(pot_slope[i-1]<< TPL0202_DATA_BITP);
  52. break;
  53. }
  54. }
  55. }
  56. void potentiometer_set_offset (reg_addr_pci* pci_bar_1, uint8_t pot_offset) {
  57. 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);
  58. //Create a header
  59. pci_bar_1->sbtmsg_addr = ((ENUM_SPIMODE_4MOSI) |(0x1 << BITP_POT_4MOSI_HEADER)| TERM_BIT_1);
  60. pci_bar_1->sbtmsg_addr = pot_ch_a;
  61. }
  62. void potentiometer_set_slope (reg_addr_pci* pci_bar_1, uint8_t pot_slope) {
  63. 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);
  64. //Create a header
  65. pci_bar_1->sbtmsg_addr = ((ENUM_SPIMODE_4MOSI) |(0x1 << BITP_POT_4MOSI_HEADER)| TERM_BIT_1);
  66. pci_bar_1->sbtmsg_addr = pot_ch_b;
  67. }