This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC1310: Route sync found to pin

Other Parts Discussed in Thread: CC1310

Hi,

I have an application with the CC1310 where low jitter is key. I understand from the forums and the technical manual that the "sync found" signal on the Rx side is a good place to measure jitter from.

My question is how do I route this to a pin so that I can scope it or set an interrupt on it? 

From my reading I understand the process as:

1. Route "sync found" to RATGPO1 using the SYSGPOCTL register

2. Route RATGPO1 to an output pin

I have read the external signalling section of the manual and any relevant forum posts. But I'm struggling to get it to work. I'd really appreciate some code example to do the above.

Thanks.

  • The TRM is lacking some details here:
    What you need to do to access this signal is to add the following override to the list of overrides used in CMD_RADIO_SETUP (or similar radio setup command):

    0x008F88B3

    This could for instance be added right in front of the terminating 0xFFFFFFFF in the override list.

    Then you need to modify the register SYSGPOCTL in RFC_DBELL (cf. Section 23.8.2.9 of the TRM). This register tells which internal line in the RF core is mapped to which RFC_GPOx line in the IOC. By default, the radio CPU sets this register to 0xC210 in order to map out the signals described in Section 23.3.2.8 of the TRM. Quote:

    By default, the radio CPU maps CPEGPO0 to the signal RFC_GPO0, CPEGPO1 to the signal RFC_GPO1, CPEGPO2 to the signal RFC_GPO2, and RATGPO0 to the signal RFC_GPO3 at boot time. This mapping can be modified by writing to the RFC_DBELL:SYSGPOCTL register.

    So you need to decide which of these signals you don't need. Say that you don't need CPEGPO2. If so, you can set SYSGPOCTL to 0xCD10. This will make the signal RATGPO1 available as RFC_GPO2 in the IOC. You can then use the function that you quote above to set it in the IOC.

    Then it should look like something like this:

    // Overrides for CMD_PROP_RADIO_DIV_SETUP

    uint32_t pOverrides[] =

    {

    ......


    (uint32_t)0x008F88B3,

    (uint32_t)0xFFFFFFFF,

    };

    Add the following line in your code:

    HWREG(RFC_DBELL_BASE + RFC_DBELL_O_SYSGPOCTL) = 0xCD10;

  • Hi Shane,

    TER is on the right track here. However, there is a limitation in the current driver.

    The limitation is that the value of the SYSGPOCTL register is not preserved when going to Standby. With the default configuration, this means that it will work fine as long as you don't use the RF_yield/close or schedule a command using absolute timing after you've opened the RF driver and set the frequency. Doing any of those things will shut down the radio, and the register is cleared.

    There will be a fix for this is a future TI-RTOS release.

    To route out the sync found to a pin you need to do three things:

    1. You need to enable the RATGPO1 interrupt. This is done by including an non-documented override.

    First add these defines, before the override list:
    #define _POSITION_frontEndPar_gpoControl 139
    #define _TYPE_frontEndPar_gpoControl uint8_t

    Then add this entry to the list of overrides:
    ...
    SW_REG_BYTE_OVERRIDE(frontEndPar, gpoControl, 0x8F),
    ...

    RF_setMux(rfPinHandle, RFC_GPO0, RATGPO1);

    2. You'll need to write to the SYSGPOCTL register to map RATGPO1 to, for example, RFC_GPO0, by adding the following override:
    ...
    HW_REG_OVERRIDE(0x1020,0x000D),
    ...

    3. To route the signal out to a pin, you'll also need to add the following lines to your TI-RTOS application:
    #include <ti/drivers/pin/PINCC26XX.h>
    ...
    /* Route out LNA active pin to LED1 */
    PINCC26XX_setMux(ledPinHandle, Board_LED1, PINCC26XX_MUX_RFC_GPO0);
    ...

    4. (Optional) Invert the output signal so that it is active high instead of active low:
    PIN_setConfig(ledPinHandle,
    PIN_BM_INV_INOUT,
    PIN_ID(Board_LED1) | PIN_INV_INOUT );

    I've tested to take this code and just integrate it into the rfPacketRX example that comes bundled with TI-RTOS, and it works great.

    Best regards,
    Niklas
  • Thanks so much to both of you for replying.

    Just one thing I don't understand from above, where does "RF_setMux(rfPinHandle, RFC_GPO0, RATGPO1);" go in the code? I can't seem to figure it out.

    Aside from that, all changes compile but I dont get anything on the pin so I'm assuming that is the cause!

    Thanks again.
  • Hello,

    I found that even if I put the radio back to sync search after receiving a packet (pktConf.bRepeatOk = 1), the "sync found" signal was only activated for the first received packet but not for all the subsequent packets received. Is it by design or there are other configurations I can add to get a signal for all the receive events?

    Thanks!