FX3/CX3 SPI

硬件spi,without DMA.
1. main中: io_cfg.useI2C = CyTrue;
2.

 #include "cyu3spi.h"
CyU3PReturnStatus_t
my_spi_init(void)
{
    CyU3PGpioSimpleConfig_t gpioConfig;
    CyU3PSpiConfig_t spiConfig;
    CyU3PReturnStatus_t status = CY_U3P_SUCCESS;
    //gpio config.
    status = CyU3PDeviceGpioOverride (18, CyTrue);
    status = CyU3PDeviceGpioOverride (19, CyTrue);
    status = CyU3PDeviceGpioOverride (17, CyTrue);
    if (status != CY_U3P_SUCCESS)
    {
        CyU3PDebugPrint(4, "CyU3PDeviceGpioOverride Err = 0x%x\r\n",status);
        return status;
    }
    gpioConfig.outValue = CyTrue;
    gpioConfig.driveLowEn = CyTrue;
    gpioConfig.driveHighEn = CyTrue;
    gpioConfig.inputEn = CyFalse;
    gpioConfig.intrMode = CY_U3P_GPIO_NO_INTR;

    status = CyU3PGpioSetSimpleConfig(17, &gpioConfig);
    if (status != CY_U3P_SUCCESS)
     {
        CyU3PDebugPrint(4, "CyU3PGpioSetSimpleConfig Err = 0x%x\r\n",status);
    //  return status;
     }
    CyU3PGpioSetSimpleConfig(18, &gpioConfig);
    CyU3PGpioSetSimpleConfig(19, &gpioConfig);
    CyU3PGpioSetValue(17, CyTrue);
    CyU3PGpioSetValue(18, CyTrue);
    CyU3PGpioSetValue(19, CyFalse);
    //SPI_Config-------------------------------------------------------------
    status = CyU3PSpiInit ();
    if (status != CY_U3P_SUCCESS)
    {
        CyU3PDebugPrint(4, "CyU3PSpiInit Err = 0x%x\r\n",status);//??? 0x44:CY_U3P_ERROR_NOT_CONFIGURED
        return status;
    }
    CyU3PMemSet ((uint8_t *)&spiConfig, 0, sizeof(spiConfig));
    spiConfig.isLsbFirst = CyFalse;//MSB1
    spiConfig.cpol       = CyFalse;//CyFalse SPI_CPOL_Low   CyTrue1
    spiConfig.ssnPol     = CyFalse;//SSN is active low 1
    spiConfig.cpha       = CyFalse;//CyFalse SPI_CPHA_1Edge CyTrue1
    spiConfig.leadTime   = CY_U3P_SPI_SSN_LAG_LEAD_HALF_CLK;
    spiConfig.lagTime    = CY_U3P_SPI_SSN_LAG_LEAD_HALF_CLK;
    spiConfig.ssnCtrl    = CY_U3P_SPI_SSN_CTRL_FW;//SSN is controlled by API
    spiConfig.clock      = 10000000;
    spiConfig.wordLen    = 8;
    status = CyU3PSpiSetConfig (&spiConfig, NULL);
    if (status != CY_U3P_SUCCESS)
    {
        CyU3PDebugPrint(4, "CyU3PSpiSetConfig Err = 0x%x\r\n",status);
        return status;
    }
    CyU3PDebugPrint(4, "CyU3PSpiSetConfig ok.\r\n");
    //CyU3PSpiGetLock();
    /////////////////////////////////////////////////////
    const uint8_t  MPU_DEVICE_ID_REG = 0x75;
    const uint8_t  MPU_6500_ID = 0x70;
    uint8_t dat[2] ={ MPU_DEVICE_ID_REG };
    dat[0] |= 0x80;
    CyU3PSpiSetSsnLine (CyFalse);
    status = CyU3PSpiTransmitWords(dat,1);
    status = CyU3PSpiReceiveWords(dat,1);
    CyU3PSpiSetSsnLine (CyTrue);
    if(dat[0] != MPU_ID){
        CyU3PDebugPrint(4, "Read MPU_ID Err =  0x%x,read:%d\r\n",status,dat[0]);
        return 0;
    }
    CyU3PDebugPrint(4, "Read MPU_ID OK(0x70) =  0x%x\r\n",status);
    //reset MCU
    const uint8_t dat2[10] = {0x6B,0x80,0x68,0x03,0x6a,0x01,0x68,0x00,0x6a,0x00};
    // reset MPU
    MPU_WriteReg(dat2[0],dat2[1]); //reset
    delay(1000);
    MPU_WriteReg(dat2[2],dat2[3]); //reset GYTO ACCRL TEMP
    MPU_WriteReg(dat2[4],dat2[5]); //reset GYTO ACCRL TEMP

    MPU_WriteReg(dat2[6],dat2[7]); //reset GYTO ACCRL TEMP
    MPU_WriteReg(dat2[8],dat2[9]); //reset GYTO ACCRL TEMP
    delay(1000);
    //MCU_Config
    uint8_t Reg_Addr[8] ={
        0x19, //SMPLRT_DIV
        0x1A, //CONFIG
        0x1B, //GYRO_CONFIG
        0x1C, //ACCEL_CONFIG
        0x1D, //ACCEL_CONFIG 2
        0x6A, //USER_CTRL
        0x6B, //PWR_MGMT_1
        0x6C };//PWR_MGMT_2

    uint8_t  Reg_Val[8] ={
        0x07, //0x01, //SAMPLE_RATE
        0x00, //Gyro Fs = 32KHz
        0x18,// 0x1a,// 0x18,//csn change ;Gyro Full Scale = +-2000dps
        0x18,// 0x08,  //0x18,//+-16G // 0x08,//+-4G // 0x18, //Acc Full Scale = +-16G
        0x08, //Acc Rate = 4KHz
        0x10, //SPI mode only.
        0x00, //PLL if ready, else use the Internal oscillator
        0x00 };//All sensors on
        uint8_t i=0;
        for(i = 1;i < 8; i++){
            MPU_WriteReg(Reg_Addr[i],Reg_Val[i]);
            delay(100);
        }
    return status;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值