コード例 #1
0
ファイル: spi.c プロジェクト: KHIEM2812/auto_quad_fc
// TODO: not yet thread safe
void spiTransaction(spiClient_t *client, volatile void *rxBuf, void *txBuf, uint16_t size) {
    spiStruct_t *interface = &spiData[client->interface];
    uint8_t head = interface->head;
    spiSlot_t *slot = &interface->slots[head];

    slot->size = size;
    slot->rxBuf = (uint32_t)rxBuf;
    slot->txBuf = (uint32_t)txBuf;
    slot->client = client;

    interface->head = (head + 1) % SPI_SLOTS;

    spiTriggerSchedule(client->interface);
}
コード例 #2
0
ファイル: spi.c プロジェクト: jiezhi320/autoquadfc
static void spiEndTxn(spiStruct_t *interface) {
    uint8_t tail = interface->tail;
    spiClient_t *client = interface->slots[tail].client;
    uint32_t tmp;

    spiDisableSPI(interface);
    spiDisableDMA(interface);
    spiDeselect(client);

    // record longest txn
    tmp = timerMicros() - interface->txnStart;
    if (tmp > interface->txnMaxTime)
        interface->txnMaxTime = tmp;

    spiNotify(client);

    tail = (tail + 1) % SPI_SLOTS;
    interface->tail = tail;

    interface->txRunning = 0;

    spiTriggerSchedule(client->interface);
}