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: How read infinitive length data by SPI_transfer?

Part Number: CC1310

Hi Team,

Customer want use SPI_transfer to read infinitive length data.  I want set lager transfer amount to read SPI RX data. SPI max data size is 16-bit sized.  If customer data size is 4 to 16bit,  can dmaControlTableEntry->ui32Control be set 16 bit size?

    /* Calculate the number of bytes for the transfer */
    numberOfBytes = ((uint16_t) object->currentXferAmt) << (object->frameSize);

    /* Setup RX side */
    /* Set pointer to Rx control table entry */
    dmaControlTableEntry = (hwAttrs->baseAddr == SSI0_BASE ? &dmaSpi0RxControlTableEntry : &dmaSpi1RxControlTableEntry);
    if (object->currentTransaction->rxBuf) {
        dmaControlTableEntry->ui32Control = dmaRxConfig[object->frameSize];

        /*
         * Add an offset for the amount of data transfered.  The offset is
         * calculated by: object->amtDataXferred * (object->frameSize + 1).
         * This accounts for 8 or 16-bit sized transfers.
         */
        dmaControlTableEntry->pvDstEndAddr =
            (void *)((uint32_t) object->currentTransaction->rxBuf +
            ((uint32_t) object->amtDataXferred * (object->frameSize + 1)) +
            numberOfBytes - 1);
    }
    else {
        dmaControlTableEntry->ui32Control = dmaNullConfig[object->frameSize];
        dmaControlTableEntry->pvDstEndAddr = (void *) &(object->scratchBuf);
    }
    dmaControlTableEntry->pvSrcEndAddr = (void *)(hwAttrs->baseAddr + SSI_O_DR);
    dmaControlTableEntry->ui32Control |= UDMACC26XX_SET_TRANSFER_SIZE((uint16_t) object->currentXferAmt);