硬件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; }