Tool/software: Code Composer Studio
en_transferStat_t Adc_Init(){
SPI_Params slaveSpiParams;
en_transferStat_t en_transferOk;
SPI_Params_init(&slaveSpiParams);
slaveSpiParams.mode = SPI_MASTER;
/* Initialize SPI handle as default master for ADC*/
masterAdc1 = SPI_open(Board_SPI3, NULL);
if (masterAdc1 == NULL)
{
System_abort("Error initializing SPI ADC1\n");
return TRANSFER_FAILURE;
}
else
{
System_printf("SPI initialized ADC1\n");
}
/* Initiate SPI transfer for configuration register */
bl_transferOk = adc_spi_write(masterAdc1,CONFIGREG_ADDRESS,u16_command1);
Adc_ReadReg(masterAdc1,CONFIGREG_ADDRESS, pu16_result);
bl_transferOk = adc_spi_write(masterAdc1,RANGE_REGISTER,u16_command2);
Adc_ReadReg(masterAdc1,RANGE_REGISTER, pu16_result);
SPI_close(masterAdc1);
}
/******************************************************************************
.Purpose : To write data into register over SPI
.Arguments : masterSpi : SPI Handler
u8_regAddress : Register address to write data
u16_regData : Data to write
.Returns : Success/ Failure
.Note : Returns 1 byte Transfer status
******************************************************************************/
uint8_t adc_spi_write(SPI_Handle masterSpi,
uint8_t u8_regAddress,
uint16_t u16_regData)
{
uint8_t au8_buf[2], u8_ret = 1;
/*Arrange register address and data to send over SPI*/
au8_buf[0] = REGISTER_WRITE | ((u8_regAddress & 0x3F) << LOGICAL_SHIFT_ONE) | ((u16_regData & MASK_0x100) >> LOGICAL_SHIFT_EIGHT);
au8_buf[1] = (u16_regData & MASK_0xFF);
spi_write_and_read(masterSpi, au8_buf, 2);
return u8_ret;
}
/******************************************************************************
.Purpose : To read and write data from/into register over SPI
.Arguments : masterSpi : SPI Handler
uint8_t bytes_number :No. of bytes to write
u16_regData :
.Returns : Success/ Failure
.Note : Returns 1 byte Transfer status
******************************************************************************/
uint8_t spi_write_and_read(SPI_Handle masterSpi,
uint8_t *data,
uint8_t bytes_number)
{
uint32_t i;
uint8_t tx[2];
uint8_t rx[2];
for(i = 0; i < bytes_number; i++){
tx[i] = data[i];
}
SPI_Transaction masterTransaction;
masterTransaction.count = bytes_number;
masterTransaction.txBuf = (Ptr)tx;
masterTransaction.rxBuf = (Ptr)rx;
GPIO_write(ADC_CS,Board_GPIO_OFF);
SPI_transfer(masterSpi, &masterTransaction);
GPIO_write(ADC_CS,Board_GPIO_ON);
for (i = 0; i < bytes_number; i++)
data[i] = rx[i];
return 1;
}