Advertisement
Guest User

Untitled

a guest
Jun 25th, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.33 KB | None | 0 0
  1.  
  2.  
  3. void SPIInit(void) {
  4.     // initialisation du module SPI
  5.  
  6.     SPI_SCK_DIR = OUTP;                     // SCK is output
  7.     ANSELBbits.ANSB1 = DISABLE;             // disable analog input for SCK
  8.    
  9.     SPI_MISO_DIR = INP;                     // SDI is input
  10.     ANSELBbits.ANSB2 = DISABLE;             // disable analog input for MISO
  11.    
  12.     SPI_MOSI_DIR = OUTP;                    // SDO is output
  13.     ANSELBbits.ANSB3 = DISABLE;             // disable analog input for MOSI
  14.  
  15.     SPI_SS_SX1272_DIR = OUTP;               // SS is output
  16.     SPI_SS_SX1272_LAT = SPI_STOP;           // disable SS (SS = High)
  17.     // ANSELAbits.ANSA3 = DISABLE;
  18.    
  19.    
  20.     SPI_SS_LPS331AP_DIR = OUTP;             // ss is output
  21.     SPI_SS_LPS331AP_LAT = SPI_STOP;         // SS = 1
  22.    
  23.  
  24.     SSP2STATbits.SMP = 0;                   // SMP = 0 (input sampled at middle of output)
  25.     SSP2STATbits.CKE = 1;                   // CKE = 1 (transmit occurs from active (1) to idle (0) SCK state, and sampling occurs from idle to active state)
  26.    
  27.     SSP2CON1 = 0b00100000;                  // WCOL not used in SPI mode, SSPOV not used in SPI master mode
  28.                                             // SSPEN set (enable serial port), CKP cleared (idle state is low level)
  29.                                             // SSP2CON1<3:0> = 0000 (clock = FOSC / 4) = 250kHz
  30. }
  31.  
  32. void SPISetSX(void){
  33.     SSP2STATbits.SMP = 0;                   // SMP = 0 (input sampled at middle of output)
  34.     SSP2STATbits.CKE = 1;                   // CKE = 1 (transmit occurs from active (1) to idle (0) SCK state, and sampling occurs from idle to active state)
  35.    
  36.     SSP2CON1 = 0b00100000;                  // WCOL not used in SPI mode, SSPOV not used in SPI master mode
  37.                                             // SSPEN set (enable serial port), CKP cleared (idle state is low level)
  38.                                             // SSP2CON1<3:0> = 0000 (clock = FOSC / 4) = 250kHz    
  39. }
  40.  
  41. void SPISetLP(void){
  42.    
  43. }
  44.  
  45. void SPIWriteSX(UINT8_T regAddr, UINT8_T data_out) {
  46.     //write data_out to regAddr register on SX1272
  47.     UINT8_T dummy;
  48.    
  49.     UARTWriteStr("Writing ");
  50.     UARTWriteByteHex(data_out);
  51.     UARTWriteStr(" in  ");
  52.     UARTWriteByteHex(regAddr);
  53.     UARTWriteStrLn("on SX1272");
  54.  
  55.    
  56.    
  57.     SSP2CON1bits.WCOL = 0;
  58.  
  59.     dummy = SSP2BUF;                        // clear buffer
  60.    
  61.     PIR3bits.SSP2IF = CLEAR;                // clear interrupt flag
  62.    
  63.     SPI_SS_SX1272_LAT = SPI_START;          // ss = 0
  64.  
  65.     SSP2BUF = regAddr | 0b10000000;         // send address with writing access bit
  66.     __delay_ms(10);
  67.     while (PIR3bits.SSP2IF == 0 ){          // wait for transmission done
  68.         __delay_ms(1);
  69.     }
  70.  
  71.     dummy = SSP2BUF;                        // clear buffer
  72.     PIR3bits.SSP2IF = CLEAR;                // clear interrupt flag
  73.     SSP2BUF = data_out;                     // send data to write
  74.     __delay_ms(10);
  75.  
  76.     while (PIR3bits.SSP2IF == 0 ){          // wait for transmission done
  77.         __delay_ms(1);
  78.     }
  79.    
  80.     SPI_SS_SX1272_LAT = SPI_STOP;           // ss = 1
  81. }
  82.  
  83. UINT8_T SPIReadSX(UINT8_T regAddr) {
  84.     //read regAddr register on SX1272 and return its value
  85.  
  86.     UINT8_T dummy, data_in;
  87.    
  88.     UARTWriteStr("Reading ");
  89.     UARTWriteByteHex(regAddr);
  90.     UARTWriteStrLn("on SX1272");
  91.    
  92.     SSP2CON1bits.WCOL = 0;
  93.    
  94.     dummy = SSP2BUF;                        // clear buffer
  95.    
  96.     PIR3bits.SSP2IF = CLEAR;                // clear interrupt flag
  97.  
  98.    
  99.     SPI_SS_SX1272_LAT = SPI_START;          // ss 1 to 0
  100.  
  101.     SSP2BUF = regAddr & 0b01111111;         // send register address with read access
  102.     __delay_ms(10);
  103.  
  104.     while (PIR3bits.SSP2IF == 0 ){          // wait for transmission done
  105.         __delay_ms(1);
  106.     }
  107.    
  108.     dummy = SSP2BUF;                        // clear buffer
  109.     PIR3bits.SSP2IF = CLEAR;                // clear interrupt flag
  110.     SSP2BUF = 0b00000000;                   // send dummy data
  111.     __delay_ms(10);
  112.  
  113.     while (PIR3bits.SSP2IF == 0){          // wait for transmission done
  114.         __delay_ms(1);
  115.     }
  116.  
  117.     SPI_SS_SX1272_LAT = SPI_STOP;           // ss 0 to 1
  118.    
  119.     data_in = SSP2BUF;                      // read data and return it
  120.     return(data_in);
  121.    
  122. }
  123.  
  124. void SPIWriteLP(UINT8_T regAddr, UINT8_T data_out){
  125.     //write data_out to regAddr register on LPS331AP
  126.     UINT8_T dummy;
  127.    
  128.     UARTWriteStr("Writing ");
  129.     UARTWriteByteHex(data_out);
  130.     UARTWriteStr(" in  ");
  131.     UARTWriteByteHex(regAddr);
  132.     UARTWriteStrLn("on LPS331AP");
  133.  
  134.     SPI_SS_SX1272_LAT = SPI_START;          // ss = 0
  135.    
  136.     dummy = SSP2BUF;                        // clear buffer
  137.     PIR3bits.SSP2IF = CLEAR;                // clear interrupt flag
  138.     SSP2BUF = regAddr | 0b10000000;         // send address with writing access bit
  139.     while (PIR3bits.SSP2IF == 0 ){          // wait for transmission done
  140.         __delay_ms(1);
  141.     }
  142.  
  143.     dummy = SSP2BUF;                        // clear buffer
  144.     PIR3bits.SSP2IF = CLEAR;                // clear interrupt flag
  145.     SSP2BUF = data_out;                     // send data to write
  146.     while (PIR3bits.SSP2IF == 0 ){          // wait for transmission done
  147.         __delay_ms(1);
  148.     }
  149.    
  150.     SPI_SS_SX1272_LAT = SPI_STOP;           // ss = 1
  151. }
  152.  
  153. UINT8_T SPIReadLP(UINT8_T regAddr){
  154.    
  155. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement