this is the code i have written for stm32f407VG in microC compiler for SPI communication with ads1259 . i have checked clocks for sck,mosi , chip select all are working fine except MISO. i am not getting ant data on miso pin. please some one help me.
void ads1259_init(void);
void ads1259_reset( void);
long read_adc_value( void);
void ads1259_reset( void);
long adc_voltage;
long adc_value[3];
long nativeInt;
long adcval;
long value;
char __buffer[20];
//void Soft_UART_String(char *string_ptr);
//long adc_value[2];
void UART2_Write_Int(long num);
int i =0;
void main()
{
SPI3_Init_Advanced(_SPI_FPCLK_DIV8 , _SPI_MASTER | _SPI_8_BIT | _SPI_CLK_IDLE_LOW | _SPI_FIRST_CLK_EDGE_TRANSITION | _SPI_MSB_FIRST | _SPI_SS_DISABLE | _SPI_SSM_ENABLE | _SPI_SSI_1, &_GPIO_MODULE_SPI3_PC10_11_12);
Delay_ms(300);
UART2_Init_Advanced(9600,_UART_8_BIT_DATA,_UART_NOPARITY, _UART_ONE_STOPBIT,&_GPIO_MODULE_USART2_PD56);
GPIO_Digital_Input(&GPIOA_BASE, _GPIO_PINMASK_2);
GPIO_Digital_Output(&GPIOE_BASE, _GPIO_PINMASK_15); //led1 for drdy
GPIO_Digital_Output(&GPIOE_BASE, _GPIO_PINMASK_8 ); /// chip select
GPIO_Digital_Output(&GPIOE_BASE, _GPIO_PINMASK_12); //led1 for chip select
Delay_ms(300);
UART2_Write_Text(" initializing SPI3 ");
Delay_ms(500) ;
ads1259_init();
ads1259_reset();
ads1259_init();
UART2_Write_Text(" initilization done ");
Delay_ms(500) ;
while (1)
{
GPIOE_ODR.B15=1;
adc_voltage=read_adc_value();
UART2_Write_Text(" adc_voltage = ");
UART2_Write_Int(adc_voltage);
UART2_Write_Text("\r\n");
GPIOE_ODR.B15=0;
}
}
void ads1259_init(void)
{
GPIOE_ODR.B8=0; //chip select low
SPI3_Write(0X11);
SPI3_Write(0X40);
SPI3_Write(0X08);
SPI3_Write(0b10000101);
SPI3_Write(0b00010000);
SPI3_Write(0b00010000);
SPI3_Write(0b00000000);
SPI3_Write(0b00000000);
SPI3_Write(0b01000000);
GPIOE_ODR.B8=1; //chip select high
}
void ads1259_reset( void)
{
GPIOE_ODR.B8=0;
SPI3_Write(0X06);
GPIOE_ODR.B8=1;
}
long read_adc_value( void)
{
GPIOE_ODR.B8=0; //chip select low
SPI3_Write(0x08); //start
Delay_us(100);
SPI3_Write(0x12); //Rdata
adc_value[0]=SPI3_Read(0x00);
adc_value[1]=SPI3_Read(0x00);
adc_value[2]=SPI3_Read(0x00);
Delay_ms(100);
GPIOE_ODR.B8=1; //chip select high
adc_value[0] = adc_value[0]*65536;
adc_value[1] = adc_value[1]*256;
adcval = (adc_value[0] | adc_value[1] | adc_value[2]);
if (adcval & 0x800000)
{
adcval = ~adcval;
nativeInt = adcval + 1;
nativeInt = nativeInt;
value = -((nativeInt*2.9802326E-7)+5);
}
else
{
nativeInt = adcval;
value = nativeInt*2.9802326E-7;
}
return value;
}
void UART2_Write_Int(long num) // Transmit integer value in ASCII format
{
LongToStr(num,__buffer);
UART2_Write_Text(__buffer);
}