Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void SPIInit(void) {
- // initialisation du module SPI
- SPI_SCK_DIR = OUTP; // SCK is output
- ANSELBbits.ANSB1 = DISABLE; // disable analog input for SCK
- SPI_MISO_DIR = INP; // SDI is input
- ANSELBbits.ANSB2 = DISABLE; // disable analog input for MISO
- SPI_MOSI_DIR = OUTP; // SDO is output
- ANSELBbits.ANSB3 = DISABLE; // disable analog input for MOSI
- SPI_SS_SX1272_DIR = OUTP; // SS is output
- SPI_SS_SX1272_LAT = SPI_STOP; // disable SS (SS = High)
- // ANSELAbits.ANSA3 = DISABLE;
- SPI_SS_LPS331AP_DIR = OUTP; // ss is output
- SPI_SS_LPS331AP_LAT = SPI_STOP; // SS = 1
- SSP2STATbits.SMP = 0; // SMP = 0 (input sampled at middle of output)
- SSP2STATbits.CKE = 1; // CKE = 1 (transmit occurs from active (1) to idle (0) SCK state, and sampling occurs from idle to active state)
- SSP2CON1 = 0b00100000; // WCOL not used in SPI mode, SSPOV not used in SPI master mode
- // SSPEN set (enable serial port), CKP cleared (idle state is low level)
- // SSP2CON1<3:0> = 0000 (clock = FOSC / 4) = 250kHz
- }
- void SPISetSX(void){
- SSP2STATbits.SMP = 0; // SMP = 0 (input sampled at middle of output)
- SSP2STATbits.CKE = 1; // CKE = 1 (transmit occurs from active (1) to idle (0) SCK state, and sampling occurs from idle to active state)
- SSP2CON1 = 0b00100000; // WCOL not used in SPI mode, SSPOV not used in SPI master mode
- // SSPEN set (enable serial port), CKP cleared (idle state is low level)
- // SSP2CON1<3:0> = 0000 (clock = FOSC / 4) = 250kHz
- }
- void SPISetLP(void){
- }
- void SPIWriteSX(UINT8_T regAddr, UINT8_T data_out) {
- //write data_out to regAddr register on SX1272
- UINT8_T dummy;
- UARTWriteStr("Writing ");
- UARTWriteByteHex(data_out);
- UARTWriteStr(" in ");
- UARTWriteByteHex(regAddr);
- UARTWriteStrLn("on SX1272");
- SSP2CON1bits.WCOL = 0;
- dummy = SSP2BUF; // clear buffer
- PIR3bits.SSP2IF = CLEAR; // clear interrupt flag
- SPI_SS_SX1272_LAT = SPI_START; // ss = 0
- SSP2BUF = regAddr | 0b10000000; // send address with writing access bit
- __delay_ms(10);
- while (PIR3bits.SSP2IF == 0 ){ // wait for transmission done
- __delay_ms(1);
- }
- dummy = SSP2BUF; // clear buffer
- PIR3bits.SSP2IF = CLEAR; // clear interrupt flag
- SSP2BUF = data_out; // send data to write
- __delay_ms(10);
- while (PIR3bits.SSP2IF == 0 ){ // wait for transmission done
- __delay_ms(1);
- }
- SPI_SS_SX1272_LAT = SPI_STOP; // ss = 1
- }
- UINT8_T SPIReadSX(UINT8_T regAddr) {
- //read regAddr register on SX1272 and return its value
- UINT8_T dummy, data_in;
- UARTWriteStr("Reading ");
- UARTWriteByteHex(regAddr);
- UARTWriteStrLn("on SX1272");
- SSP2CON1bits.WCOL = 0;
- dummy = SSP2BUF; // clear buffer
- PIR3bits.SSP2IF = CLEAR; // clear interrupt flag
- SPI_SS_SX1272_LAT = SPI_START; // ss 1 to 0
- SSP2BUF = regAddr & 0b01111111; // send register address with read access
- __delay_ms(10);
- while (PIR3bits.SSP2IF == 0 ){ // wait for transmission done
- __delay_ms(1);
- }
- dummy = SSP2BUF; // clear buffer
- PIR3bits.SSP2IF = CLEAR; // clear interrupt flag
- SSP2BUF = 0b00000000; // send dummy data
- __delay_ms(10);
- while (PIR3bits.SSP2IF == 0){ // wait for transmission done
- __delay_ms(1);
- }
- SPI_SS_SX1272_LAT = SPI_STOP; // ss 0 to 1
- data_in = SSP2BUF; // read data and return it
- return(data_in);
- }
- void SPIWriteLP(UINT8_T regAddr, UINT8_T data_out){
- //write data_out to regAddr register on LPS331AP
- UINT8_T dummy;
- UARTWriteStr("Writing ");
- UARTWriteByteHex(data_out);
- UARTWriteStr(" in ");
- UARTWriteByteHex(regAddr);
- UARTWriteStrLn("on LPS331AP");
- SPI_SS_SX1272_LAT = SPI_START; // ss = 0
- dummy = SSP2BUF; // clear buffer
- PIR3bits.SSP2IF = CLEAR; // clear interrupt flag
- SSP2BUF = regAddr | 0b10000000; // send address with writing access bit
- while (PIR3bits.SSP2IF == 0 ){ // wait for transmission done
- __delay_ms(1);
- }
- dummy = SSP2BUF; // clear buffer
- PIR3bits.SSP2IF = CLEAR; // clear interrupt flag
- SSP2BUF = data_out; // send data to write
- while (PIR3bits.SSP2IF == 0 ){ // wait for transmission done
- __delay_ms(1);
- }
- SPI_SS_SX1272_LAT = SPI_STOP; // ss = 1
- }
- UINT8_T SPIReadLP(UINT8_T regAddr){
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement