Software SPI Library
The mikroC PRO for ARM provides routines for implementing Software SPI communication. These routines are hardware independent and can be used with any MCU. The Software SPI Library provides easy communication with other devices via SPI: A/D converters, D/A converters, MAX7219, LTC1290, etc.
- SPI to Master mode
- Clock value = 20 kHz.
- Data sampled at the middle of interval.
- Clock idle state low.
- Data sampled at the middle of interval.
- Data transmitted at low to high edge.
- LSB sent first.
The library configures SPI to the master mode, clock = 20kHz, data sampled at the middle of interval, clock idle state low and data transmitted at low to high edge.

External dependencies of Software SPI Library
Stellaris
The following variables must be defined in all projects using Software SPI Library: | Description : | Example : |
---|---|---|
extern sfr sbit SoftSpi_SDI; |
Data In line. | sbit SoftSpi_SDI at GPIO_PORTJ_DATA4_bit; |
extern sfr sbit SoftSpi_SDO; |
Data Out line. | sbit SoftSpi_SDO at GPIO_PORTJ_DATA5_bit; |
extern sfr sbit SoftSpi_CLK; |
Clock line. | sbit SoftSpi_CLK at GPIO_PORTJ_DATA3_bit; |
extern sfr sbit SoftSpi_SDI_Direction; |
Direction of the Data In pin. | sbit SoftSpi_SDI_Direction at GPIO_PORTJ_DIR4_bit; |
extern sfr sbit SoftSpi_SDO_Direction; |
Direction of the Data Out pin | sbit SoftSpi_SDO_Direction at GPIO_PORTJ_DIR5_bit; |
extern sfr sbit SoftSpi_CLK_Direction; |
Direction of the Clock pin. | sbit SoftSpi_CLK_Direction at GPIO_PORTJ_DIR3_bit; |
MSP432
The following variables must be defined in all projects using Software SPI Library: | Description : | Example : |
---|---|---|
extern sfr sbit SoftSpi_SDI; |
Data In line. | sbit SoftSpi_SDI at DIO_P6IN.B0; |
extern sfr sbit SoftSpi_SDO; |
Data Out line. | sbit SoftSpi_SDO at DIO_P6OUT.B1; |
extern sfr sbit SoftSpi_CLK; |
Clock line. | sbit SoftSpi_CLK at DIO_P6OUT.B2; |
extern sfr sbit SoftSpi_SDI_Direction; |
Direction of the Data In pin. | sbit SoftSpi_SDI_Direction at DIO_P6DIR.B0; |
extern sfr sbit SoftSpi_SDO_Direction; |
Direction of the Data Out pin | sbit SoftSpi_SDO_Direction at DIO_P6DIR.B1; |
extern sfr sbit SoftSpi_CLK_Direction; |
Direction of the Clock pin. | sbit SoftSpi_CLK_Direction at DIO_P6DIR.B2; |
STM32
The following variables must be defined in all projects using Software SPI Library: | Description : | Example : |
---|---|---|
extern sfr sbit SoftSpi_SDI; |
Data In line. | sbit SoftSpi_SDI at GPIOD_ODR.B3; |
extern sfr sbit SoftSpi_SDO; |
Data Out line. | sbit SoftSpi_SDO at GPIOD_ODR.B4; |
extern sfr sbit SoftSpi_CLK; |
Clock line. | sbit SoftSpi_CLK at GPIOD_ODR.B5; |
CEC1x02
The following variables must be defined in all projects using Software SPI Library: | Description : | Example : |
---|---|---|
extern sfr sbit SoftSpi_SDI; |
Data In line. | sbit SoftSpi_SDI at GPIO_OUTPUT_150_157.B3; |
extern sfr sbit SoftSpi_SDO; |
Data Out line. | sbit SoftSpi_SDO at GPIO_OUTPUT_050_057.B4; |
extern sfr sbit SoftSpi_CLK; |
Clock line. | sbit SoftSpi_CLK at GPIO_OUTPUT_160_167.B5; |
Library Routines
Soft_SPI_Init
Prototype |
void Soft_SPI_Init(); |
---|---|
Description |
Routine initializes the software SPI module. |
Parameters |
None. |
Returns |
Nothing. |
Requires |
External dependencies of the library from the top of the page must be defined before using this function. |
Example |
Stellaris// DAC module connections sbit SoftSpi_CLK at GPIO_PORTJ_DATA3_bit; sbit SoftSpi_SDI at GPIO_PORTJ_DATA4_bit; sbit SoftSpi_SDO at GPIO_PORTJ_DATA5_bit; sbit SoftSpi_CLK_Direction at GPIO_PORTJ_DIR3_bit; sbit SoftSpi_SDI_Direction at GPIO_PORTJ_DIR4_bit; sbit SoftSpi_SDO_Direction at GPIO_PORTJ_DIR5_bit; // End DAC module connections ... Soft_SPI_Init(); // Init Soft_SPI MSP432// DAC module connections sbit SoftSpi_CLK at DIO_P6OUT.B2; sbit SoftSpi_SDI at DIO_P6IN.B0; sbit SoftSpi_SDO at DIO_P6OUT.B1; sbit SoftSpi_CLK_Direction at DIO_P6DIR.B2; sbit SoftSpi_SDI_Direction at DIO_P6DIR.B0; sbit SoftSpi_SDO_Direction at DIO_P6DIR.B1; // End DAC module connections ... Soft_SPI_Init(); // Init Soft_SPI STM32// DAC module connections sbit SoftSpi_CLK at GPIOD_ODR.B3; sbit SoftSpi_SDI at GPIOD_ODR.B4; sbit SoftSpi_SDO at GPIOD_ODR.B5; // End DAC module connections ... Soft_SPI_Init(); // Init Soft_SPI CEC1x02// DAC module connections sbit SoftSpi_CLK at GPIO_OUTPUT_150_157.B3; sbit SoftSpi_SDI at GPIO_OUTPUT_050_057.B4; sbit SoftSpi_SDO at GPIO_OUTPUT_160_167.B5; // End DAC module connections ... Soft_SPI_Init(); // Init Soft_SPI |
Notes |
None. |
Soft_SPI_Read
Prototype |
unsigned short Soft_SPI_Read(char sdata); |
---|---|
Description |
This routine performs 3 operations simultaneously. It provides clock for the Software SPI bus, reads a byte and sends a byte. |
Parameters |
|
Returns |
Byte received via the SPI bus. |
Requires |
Soft SPI must be initialized before using this function. See Soft_SPI_Init routine. |
Example |
unsigned short data_read; char data_send; ... // Read a byte and assign it to data_read variable // (data_send byte will be sent via SPI during the Read operation) data_read = Soft_SPI_Read(data_send); |
Notes |
None. |
Soft_SPI_Write
Prototype |
void Soft_SPI_Write(char sdata); |
---|---|
Description |
This routine sends one byte via the Software SPI bus. |
Parameters |
|
Returns |
Nothing. |
Requires |
Soft SPI must be initialized before using this function. See Soft_SPI_Init. |
Example |
// Write a byte to the Soft SPI bus Soft_SPI_Write(0xAA); |
Notes |
None. |
What do you think about this topic ? Send us feedback!