SPI object for communication with an altera FPGA.
Dependents: RTOS_project RTOS_project_fork_01 RTOS_project_fork_02
Diff: mmSPI_RTOS.h
- Revision:
- 0:7b8e6b90c874
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmSPI_RTOS.h Tue Sep 17 20:40:03 2013 +0000 @@ -0,0 +1,76 @@ +#ifndef mmSPI_RTOS_H // include guard. +#define mmSPI_RTOS_H // include guard. +/*----------------------------------------------//------------------------------ + student : m-moore + email : gated.clock@gmail.com + class : embedded RTOS + directory : RTOS_project/mmSPI_RTOS + file : mmSPI_RTOS.h + date : september 19, 2013. +----copyright-----------------------------------//------------------------------ + licensed for personal and academic use. + commercial use of original code must be approved by the account-holder of + gated.clock@gmail.com +----description---------------------------------//------------------------------ + this library provides the low-level SPI data and clock signaling + for communication with the altera development board, via four i/o + pins available on the mbed development board's zigbee header. +----notes---------------------------------------//------------------------------ +------------------------------------------------//----------------------------*/ + #include "mbed.h" // standard mbed.org class. +//---defines------------------------------------//------------------------------ + #define mmSPI_RTOS_MOSI p29 // SPI interface pin. + #define mmSPI_RTOS_MISO p30 // SPI interface pin. + #define mmSPI_RTOS_SCLK p9 // SPI interface pin. + #define mmCPU_CLK p10 // soft CPU system clock. +//==============================================//============================== + class mmSPI_RTOS + { + public: + mmSPI_RTOS(); // constructor. + ~mmSPI_RTOS(); // destructor. + void allocations(); // object allocations. + + void setSPIfrequency (float); // initializations. + void setSendBuffer (char * pcSendBuffer); + void setReceiveBuffer(char * pcReceiveBuffer); + void setNumberOfBytes(int dNumberOfBytes); + + // SPI transceive loop. + void transceive_vector(char cPreCPU, char cPreSPI, char cScan, char cPostCPU); + + // write/read CPU registers. + void write_register (char cRegister, char cValue); + void write_IR (char cValueH, char cValueL); + char read_register (char cRegister); + void read_all_registers(char * pcRegisters); + + // write/read CPU main-memory. + void write_memory(char cHData, char cLdata, char cAddress); + unsigned int read_memory (char cAddress); + + void step(); // step the CPU. + + void clear_transmit_vector(); // fill with 0. + + unsigned long SPIClockCount(); // return SPI clock count. + unsigned long CPUClockCount(); // return CPU clock count. + + private: + + DigitalOut * pMOSI; // SPI pin. + DigitalOut * pMISO; // SPI pin. + DigitalOut * pSCLK; // SPI pin. + DigitalOut * pCPUclk; // soft cpu clock. + char * pcSend; // SPI transmit vector. + char * pcReceive; // SPI receive vector. + float fSPIfreq; // SPI clock frequency. + float fSPIquarterP; // SPI quarter period. + int dNumBytes; // number of SPI bytes. + int dLoop01; // loop index. + int dLoop02; // loop index. + unsigned long ulSPIclkCount; // SPI clock count. + unsigned long ulCPUclkCount; // CPU clock count. + }; +//----------------------------------------------//------------------------------ +#endif // include guard. \ No newline at end of file