Hi!
I have a problem transmitting messages with the RFM95 module using a MSP430 MCU and the RadioHead library. Init() works successfully and the device sets OP_MODE into standby (idle 0x81) mode correctly.
However, I get stuck in an infinite while-loop in waitCAD() and isChannelActive(), as I am never receiving an interrupt callback from the DIO0 pin. The interrupt routine works fine itself as it fires when I connect/disconnect the cable. (it is set to RISING).
Please note that I am using the Dragino LoRa Shield without any Arduino, see attachment:
I have connected the ICSP pins for SPI, DIO0 to my interrupt pin and D10 to the slave select pin. I am NOT using any SPI interrupt pin as I don't think it is necessary for this?
Code:
uint8_t init_RH_RF95()
{
    __disable_interrupt();
    _mode=RHModeInitialising;
    _thisAddress=RH_BROADCAST_ADDRESS;
    _promiscuous=0;
    _txHeaderTo=RH_BROADCAST_ADDRESS;
    _txHeaderFrom=RH_BROADCAST_ADDRESS;
    _txHeaderId=0;
    _txHeaderFlags=0;
    _rxGood=0;
    _txGood=0;
    _cad_timeout=10000;
    // Tell the low level SPI interface we will use SPI within this interrupt
        //spiUsingInterrupt(interruptNumber);
    RFM95W_SPISetup(); // using GPIO 6 as channel select
    _rxBufValid=0;
    // Set sleep mode, so we can also set LORA mode:
    RFM95W_SPIByteWriteReg(RH_RF95_REG_01_OP_MODE, RH_RF95_MODE_SLEEP | RH_RF95_LONG_RANGE_MODE);
    __delay_cycles(240000); // Wait 10ms for sleep mode to take over from say, CAD
    // Check we are in sleep mode, with LORA set
    if (RFM95W_SPIByteReadReg(RH_RF95_REG_01_OP_MODE) != (RH_RF95_MODE_SLEEP | RH_RF95_LONG_RANGE_MODE  ))
    {
      __enable_interrupt();
	return 0; // No device present?
    }
    // Set up FIFO
    // We configure so that we can use the entire 256 byte FIFO for either receive
    // or transmit, but not both at the same time
    RFM95W_SPIByteWriteReg(RH_RF95_REG_0E_FIFO_TX_BASE_ADDR, 0);
    RFM95W_SPIByteWriteReg(RH_RF95_REG_0F_FIFO_RX_BASE_ADDR, 0);
    // Packet format is preamble + explicit-header + payload + crc
    // Explicit Header Mode
    // payload is TO + FROM + ID + FLAGS + message data
    // RX mode is implmented with RXCONTINUOUS
    // max message data length is 255 - 4 = 251 octets
    setModeIdle();
    // Set up default configuration
    // No Sync Words in LORA mode.
    setModemRegisters(0x78, 0xC4, 0x0C); // slow long range (see header file for more info)
    //setModemRegisters(0x92,   0x74,    0x00); //for fast/short transmission
    setPreambleLength(8); // Default is 8
    setFrequency(868.0);
    setTxPower(13, 0); // Lowish power (PA_boost=1 for higher power)
    __enable_interrupt();
    return 1;
}
void sendToLora(void){
    uint8_t data[] = "Hello World!";
    int status=send(data, sizeof(data)); // <--- STUCK HERE
    
    waitPacketSent();
    sprintf((char *)outString, "SENT! %d \n", status);
    putsUART((unsigned char *)outString,strlen((char *)outString));
    // Now wait for a reply
    uint8_t buf[RH_RF95_MAX_MESSAGE_LEN];
    uint8_t len = sizeof(buf);
    if (waitAvailableTimeout(3000))
    {
    // Should be a reply message for us now
    if (recv(buf, &len))
    {
        sprintf((char *)outString, "RSSI: %d, got reply: ", _lastRssi);
        putsUART((unsigned char *)outString,strlen((char *)outString));
        putsUART((unsigned char *)(char*)buf,strlen((char *)outString));
    }
    else
    {
        sprintf((char *)outString, "recieve failed. ");
        putsUART((unsigned char *)outString,strlen((char *)outString));
    }
    }
    else
    {
        sprintf((char *)outString, "No reply, LoRa server running?");
        putsUART((unsigned char *)outString,strlen((char *)outString));
      }
    sprintf((char *)outString, "\n");
    putsUART((unsigned char *)outString,strlen((char *)outString));
}
Thanks in advance!
