Advertisement
Guest User

spi euxo 1-1 adc (script2)

a guest
May 15th, 2016
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.52 KB | None | 0 0
  1. uint8_t *txbuf;
  2. uint8_t *rxbuf;
  3.  
  4. int pin = 0;
  5.  
  6. void setup(void){
  7.     static uint8_t _txbuf[8] __attribute__ ((section (".sram2")));
  8.     static uint8_t _rxbuf[8] __attribute__ ((section (".sram2")));
  9.     txbuf = _txbuf;
  10.     rxbuf = _rxbuf;
  11.  
  12.     palSetPadMode(GPIOC,4,PAL_MODE_OUTPUT_PUSHPULL);
  13.     palWritePad(GPIOC,4,1);
  14.     palSetPadMode(GPIOC,5,PAL_MODE_OUTPUT_PUSHPULL);
  15.     palWritePad(GPIOC,5,1);
  16. }
  17.  
  18. void loop(void){
  19.  
  20.     // POT (ADC2)
  21.     txbuf[2] = 0b00000000;
  22.    
  23.         for(int pin=0; pin<8; pin++){
  24.  
  25.             txbuf[0] = pin < 4 ? 0b01100000 : 0b11100000;
  26.      
  27.             if (pin % 4 == 0) { // pin == 0 || pin == 4
  28.                 txbuf[1] = 0b00000000;
  29.             } else if (pin % 4 == 1) { // pin == 1 || pin == 5
  30.                 txbuf[1] = 0b00000010;
  31.             } else if (pin % 4 == 2) { // pin == 2 || pin == 6
  32.                 txbuf[1] = 0b00000001;
  33.             } else {
  34.                 txbuf[1] = 0b00000011;
  35.             }
  36.            
  37.  
  38.  
  39.        
  40.         palWritePad(GPIOC,4,0);
  41.         spiSelect(&SPID1);      // START SPI
  42.         spiSend(&SPID1,3,txbuf);
  43.         spiReceive(&SPID1,3,rxbuf);
  44.         spiUnselect(&SPID1);
  45.         palWritePad(GPIOC,4,1);
  46.  
  47.    
  48.         int z = (rxbuf[1] << 8| rxbuf[0]) << 16;
  49.  
  50.  
  51.  
  52.         if (pin == 0){
  53.             PExParameterChange(&parent->PExch[PARAM_INDEX_p1_value],z,0xFFFD);
  54.         }
  55.         else if (pin == 1){
  56.             PExParameterChange(&parent->PExch[PARAM_INDEX_p0_value],z,0xFFFD);
  57.         }
  58.         else if (pin == 2){
  59.             PExParameterChange(&parent->PExch[PARAM_INDEX_p2_value],z,0xFFFD);
  60.         }
  61.         else if (pin == 3){
  62.             PExParameterChange(&parent->PExch[PARAM_INDEX_p3_value],z,0xFFFD);
  63.         }
  64.         else if (pin == 4){
  65.             PExParameterChange(&parent->PExch[PARAM_INDEX_p7_value],z,0xFFFD);
  66.         }
  67.         else if (pin == 5){
  68.             PExParameterChange(&parent->PExch[PARAM_INDEX_p4_value],z,0xFFFD);
  69.         }
  70.         else if (pin == 6){
  71.             PExParameterChange(&parent->PExch[PARAM_INDEX_p6_value],z,0xFFFD);
  72.         }
  73.         else if (pin == 7){
  74.             PExParameterChange(&parent->PExch[PARAM_INDEX_p5_value],z,0xFFFD);
  75.         }
  76.        
  77.         chThdSleepMilliseconds(1);
  78.  
  79.         }
  80.         // CV IN (ADC 1)
  81.         txbuf[2] = 0b00000000;
  82.    
  83.         for(int pin=0; pin<8; pin++){
  84.  
  85.             txbuf[0] = pin < 4 ? 0b01100000 : 0b11100000;
  86.      
  87.             if (pin % 4 == 0) { // pin == 0 || pin == 4
  88.                 txbuf[1] = 0b00000000;
  89.             } else if (pin % 4 == 1) { // pin == 1 || pin == 5
  90.                 txbuf[1] = 0b00000010;
  91.             } else if (pin % 4 == 2) { // pin == 2 || pin == 6
  92.                 txbuf[1] = 0b00000001;
  93.             } else {
  94.                 txbuf[1] = 0b00000011;
  95.             }
  96.            
  97.  
  98.  
  99.        
  100.         palWritePad(GPIOC,5,0);
  101.         spiSelect(&SPID1);      // START SPI
  102.         spiSend(&SPID1,3,txbuf);
  103.         spiReceive(&SPID1,3,rxbuf);
  104.         spiUnselect(&SPID1);
  105.         palWritePad(GPIOA,5,1);
  106.  
  107.    
  108.         int z = 0x07FFFFFF - ((rxbuf[1] << 8| rxbuf[0]) << 16);
  109.    
  110.    
  111.         if (pin == 0){
  112.             PExParameterChange(&parent->PExch[PARAM_INDEX_cv6_value],z,0xFFFD);
  113.         }
  114.         else if (pin == 1){
  115.             PExParameterChange(&parent->PExch[PARAM_INDEX_cv4_value],z,0xFFFD);
  116.         }
  117.         else if (pin == 2){
  118.             PExParameterChange(&parent->PExch[PARAM_INDEX_cv2_value],z,0xFFFD);
  119.         }
  120.         else if (pin == 3){
  121.             PExParameterChange(&parent->PExch[PARAM_INDEX_cv1_value],z,0xFFFD);
  122.         }
  123.         else if (pin == 4){
  124.             PExParameterChange(&parent->PExch[PARAM_INDEX_cv5_value],z,0xFFFD);
  125.         }
  126.         else if (pin == 5){
  127.             PExParameterChange(&parent->PExch[PARAM_INDEX_cv7_value],z,0xFFFD);
  128.         }
  129.         else if (pin == 6){
  130.             PExParameterChange(&parent->PExch[PARAM_INDEX_cv3_value],z,0xFFFD);
  131.         }
  132.         else if (pin == 7){
  133.             PExParameterChange(&parent->PExch[PARAM_INDEX_cv0_value],(z),0xFFFD);
  134.         }
  135.        
  136.         chThdSleepMilliseconds(1);
  137.         }
  138.    
  139. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement