Esempio n. 1
0
void NuandFirmwareStart() {
    CyU3PReturnStatus_t status = CY_U3P_SUCCESS;

    NuandGPIOReconfigure(CyFalse, CyFalse);

    status = CyFxSpiInit();

    glAppMode = MODE_FW_CONFIG;
}
Esempio n. 2
0
CyU3PReturnStatus_t NuandFlashInit() {
    CyU3PReturnStatus_t status;

    NuandGPIOReconfigure(CyFalse, CyTrue);

    status = CyFxSpiInit();

    glAppMode = MODE_FW_CONFIG;

    return status;
}
Esempio n. 3
0
CyBool_t NuandLoadFromFlash(int fpga_len)
{
    uint8_t *ptr;
    int nleft;
    CyBool_t retval = CyFalse;
    CyU3PDmaBuffer_t dbuf;
    uint32_t sector_idx = 1025;
    uint32_t prodCnt, consCnt;
    int32_t i;
    CyU3PDmaState_t state;

    CyU3PReturnStatus_t apiRetStatus = CY_U3P_SUCCESS;
    NuandFpgaConfigStart();
    ptr = CyU3PDmaBufferAlloc(4096);
    apiRetStatus = CyFxSpiInit(0x100);

    CyFxSpiFastRead(CyTrue);
    apiRetStatus = CyU3PSpiSetClock(30000000);

    if (FpgaBeginProgram() != CY_U3P_SUCCESS) {
        goto out;
    }

    nleft = fpga_len;

    while(nleft) {
        apiRetStatus = CyU3PDmaChannelGetStatus(&glChHandlebladeRFUtoP, &state, &prodCnt, &consCnt);
        if (apiRetStatus)
            break;

        CyU3PDmaChannelAbort(&glChHandlebladeRFUtoP);

        apiRetStatus = CyU3PDmaChannelGetStatus(&glChHandlebladeRFUtoP, &state, &prodCnt, &consCnt);
        if (apiRetStatus)
            break;

        CyU3PDmaChannelReset(&glChHandlebladeRFUtoP);

        apiRetStatus = CyU3PDmaChannelGetStatus(&glChHandlebladeRFUtoP, &state, &prodCnt, &consCnt);
        if (apiRetStatus)
            break;

        if (CyFxSpiTransfer(sector_idx++, 0x100, ptr, CyTrue) != CY_U3P_SUCCESS)
            break;

        uint8_t *end_in_b = &( ((uint8_t *)ptr)[255]);
        uint16_t *end_in_w = &( ((uint16_t *)ptr)[255]);

        /* Flip the bits in such a way that the FPGA can be programmed
         * This mapping can be determined by looking at the schematic */
        for (i = 255; i >= 0; i--)
            *end_in_w-- = glFlipLut[*end_in_b--];

        dbuf.buffer = ptr;
        dbuf.count = ((nleft > 256) ? 256 : (nleft + 2)) * 2;
        dbuf.size = 4096;
        dbuf.status = 0;

        apiRetStatus = CyU3PDmaChannelSetupSendBuffer(&glChHandlebladeRFUtoP, &dbuf);
        if (apiRetStatus)
            break;

        apiRetStatus = CyU3PDmaChannelGetStatus(&glChHandlebladeRFUtoP, &state, &prodCnt, &consCnt);
        if (apiRetStatus)
            break;

        apiRetStatus = CyU3PDmaChannelWaitForCompletion(&glChHandlebladeRFUtoP, 100);
        if (apiRetStatus)
            break;

        apiRetStatus = CyU3PDmaChannelGetStatus(&glChHandlebladeRFUtoP, &state, &prodCnt, &consCnt);
        if (apiRetStatus)
            break;

        if (nleft > 256) {
            nleft -= 256;
        } else {
            retval = CyTrue;
            nleft = 0;
            break;
        }
    }

out:

    CyU3PDmaBufferFree(ptr);
    CyU3PSpiDeInit();

    CyFxSpiFastRead(CyFalse);
    NuandFpgaConfigStop();

    return retval;
}