bharockz
Newbie level 2
- Joined
- Feb 19, 2015
- Messages
- 2
- Helped
- 0
- Reputation
- 0
- Reaction score
- 0
- Trophy points
- 1
- Activity points
- 26
hi
I have been trying to interface cc3200 and tdc gp-22,by referring to example code which is written for stm-32 microcontroller.
i cant understand whats happening in this function which i have given below.How the spi interface actually works below,the use of transmission buffer empty check and reciever buffer not empty check.Whats actualy the process goes ,when i compile these code.Pls help!!
i have attached the stm-32 module for reference
https://www.disca.upv.es/aperles/arm_cortex_m3/curset/STM32F4xx_DSP_StdPeriph_Lib_V1.0.1/html/group___s_p_i.html
The specified code is described as
Function Name: gp22_read_n_bytes
* Parameters: bus_type = (SPI1, SPI2)
* n_bytes = how many bytes should be read
* read_opcode = read opcode of the device
* read_addr = read address of the device
* fractional_bits = number of fractional bits of read data
*
* Return: n bytes from the specified read address
*
* Description: Reads n bytes from an address in GP22
I have been trying to interface cc3200 and tdc gp-22,by referring to example code which is written for stm-32 microcontroller.
i cant understand whats happening in this function which i have given below.How the spi interface actually works below,the use of transmission buffer empty check and reciever buffer not empty check.Whats actualy the process goes ,when i compile these code.Pls help!!
i have attached the stm-32 module for reference
https://www.disca.upv.es/aperles/arm_cortex_m3/curset/STM32F4xx_DSP_StdPeriph_Lib_V1.0.1/html/group___s_p_i.html
The specified code is described as
Function Name: gp22_read_n_bytes
* Parameters: bus_type = (SPI1, SPI2)
* n_bytes = how many bytes should be read
* read_opcode = read opcode of the device
* read_addr = read address of the device
* fractional_bits = number of fractional bits of read data
*
* Return: n bytes from the specified read address
*
* Description: Reads n bytes from an address in GP22
Code:
float gp22_read_n_bytes(void *bus_type, uint8_t n_bytes, uint8_t read_opcode,
uint8_t read_addr, uint8_t fractional_bits)
{
uint32_t Result_read = 0;
float Result = 0;
uint8_t read_opcode_addr = read_opcode | read_addr;
//.............. Result = n Byte = n x 8 bits......................
if (bus_type==SPI1 | bus_type==SPI2)
{
// Deactivating Reset SPIx
if (bus_type==SPI1) GPIO_WriteBit(GPIOA, GPIO_Pin_4, Bit_RESET);
if (bus_type==SPI2) GPIO_WriteBit(GPIOB, GPIO_Pin_12, Bit_RESET);
SPI_I2S_SendData(bus_type, read_opcode_addr); // READ OPCODE + Address
while (SPI_I2S_GetFlagStatus(bus_type, SPI_I2S_FLAG_TXE)==RESET) {};
Simple_delay_750ns((void*)10); // important delay (16) at SPI freq.=750kHz
//Compulsory reads to DR and SR to clear OVR,
//so that next incoming data is saved
SPI_I2S_ReceiveData(bus_type); // To clear OVR
SPI_I2S_GetFlagStatus(bus_type, SPI_I2S_FLAG_TXE); // To clear OVR
//Reading byte1
SPI_I2S_SendData(bus_type, 0x00FF); // DUMMY WRITE
// Wait until RX buffer is not empty, then read the received data
while (SPI_I2S_GetFlagStatus(bus_type, SPI_I2S_FLAG_RXNE)==0) {}
Result_read = SPI_I2S_ReceiveData(bus_type); // Read
for (int n = 1; n < n_bytes; n++)
{
//Reading byte2 .. byte.n
SPI_I2S_SendData(bus_type, 0x00FF); // DUMMY WRITE
// Wait until RX buffer is not empty, then read the received data
while (SPI_I2S_GetFlagStatus(bus_type, SPI_I2S_FLAG_RXNE)==0) {}
Result_read = Result_read<<8;
Result_read |= SPI_I2S_ReceiveData(bus_type); // Read
}
// Reset to device SPIx
if (bus_type==SPI1) GPIO_WriteBit(GPIOA, GPIO_Pin_4, Bit_SET);
if (bus_type==SPI2) GPIO_WriteBit(GPIOB, GPIO_Pin_12, Bit_SET);
}
Result = Result_read / pow(2, fractional_bits);
return Result;
}