#include <cspi.h>


Public Member Functions | |
| void | clearReceiver () |
| clear the receiver FIFO... | |
| CSPI (BSPI_TypeDef *bspi, CMachine::ubit32 frequency=0) | |
| void | disableChipSelect (CMachine::ubit16 cs) |
| void | disableRXInterrupts () |
| void | disableTXInterrupts () |
| void | enableChipSelect (CMachine::ubit16 cs) |
| void | enableRXInterrupts () |
| void | enableTXInterrupts () |
| virtual void | irq (CMachine::InterruptVector v) |
| receive a hardware interrupt. | |
| CMachine::ubit8 | rx () |
| receive a single byte. | |
| void | setFrequency (CMachine::ubit32 frequency) |
| set the clock frequency. | |
| CMachine::ubit8 | tx (CMachine::ubit8 ch) |
| transmit a single byte | |
| virtual | ~CSPI () |
Protected Member Functions | |
| BSPI_TypeDef * | bspi () |
Protected Attributes | |
| CMachine::ubit8 * | mRXBuffer |
| CMachine::ubit32 | mRXCount |
| CMachine::ubit8 * | mTXBuffer |
| CMachine::ubit32 | mTXCount |
Private Attributes | |
| BSPI_TypeDef * | mBSPI |
Definition at line 32 of file cspi.h.
| PikeAero::CSPI::CSPI | ( | BSPI_TypeDef * | bspi, | |
| CMachine::ubit32 | frequency = 0 | |||
| ) |
enable master mode
set the receiver FIFO depth
set the transmitter FIFO depth
select clock frequency
disable BSPI interrupts
Definition at line 25 of file cspi.cpp.
References bspi(), BSPI_BSPE, BSPI_MSTR, BSPI_RFEN, BSPI_TFEN, PikeAero::BSPI_TypeDef::CSR1, PikeAero::BSPI_TypeDef::CSR2, PikeAero::BSPI_TypeDef::CSR3, disableRXInterrupts(), disableTXInterrupts(), PikeAero::CMachine::installVectorIRQ(), setFrequency(), and PikeAero::CMachine::Vector_BSPI2.
00026 : CObject() 00027 , mRXBuffer(NULL) 00028 , mTXBuffer(NULL) 00029 , mRXCount(0) 00030 , mTXCount(0) 00031 , mBSPI(bspi) 00032 { 00033 this->bspi()->CSR1 = 0; 00034 this->bspi()->CSR2 = 0; 00035 this->bspi()->CSR3 = 0; 00036 00037 CMachine::installVectorIRQ(CMachine::Vector_BSPI2,this); 00038 00039 /** enable master mode */ 00040 this->bspi()->CSR1 |= ( BSPI_MSTR | BSPI_BSPE ); 00041 00042 /** set the receiver FIFO depth */ 00043 this->bspi()->CSR1 |= BSPI_RFEN(0xF); 00044 00045 /** set the transmitter FIFO depth */ 00046 this->bspi()->CSR2 |= BSPI_TFEN(0xF); 00047 00048 /** select clock frequency */ 00049 setFrequency(frequency); 00050 00051 /** disable BSPI interrupts */ 00052 disableTXInterrupts(); 00053 disableRXInterrupts(); 00054 }

| PikeAero::CSPI::~CSPI | ( | ) | [virtual] |
Definition at line 56 of file cspi.cpp.
References PikeAero::CMachine::removeVectorIRQ().
00057 { 00058 CMachine::removeVectorIRQ(this); 00059 }

| BSPI_TypeDef* PikeAero::CSPI::bspi | ( | ) | [inline, protected] |
Definition at line 72 of file cspi.h.
References mBSPI.
Referenced by clearReceiver(), CSPI(), PikeAero::CSPIADC::CSPIADC(), disableRXInterrupts(), PikeAero::CSPIADC::disableTXInterrupts(), disableTXInterrupts(), enableRXInterrupts(), PikeAero::CSPIADC::enableTXInterrupts(), enableTXInterrupts(), PikeAero::CSPIADC::irq(), irq(), rx(), setFrequency(), and tx().
00072 {return mBSPI;}

| void PikeAero::CSPI::clearReceiver | ( | ) |
clear the receiver FIFO...
wait until transmitter FIFO is empty...
clear out the receiver FIFO...
clear out the receiver FIFO...
Definition at line 106 of file cspi.cpp.
References bspi(), BSPI_RFNE, BSPI_TFE, PikeAero::BSPI_TypeDef::RXR, and PikeAero::CTaskScheduler::yield().
Referenced by PikeAero::CSPIEEPROM::_write(), PikeAero::CSPIEEPROM::read(), PikeAero::CSPIAmp::setChanelGain(), PikeAero::CSPIAmp::setChannel(), PikeAero::CSPIAmp::setGain(), PikeAero::CSPIADC::start(), and PikeAero::CSPIADC::startChannel().
00107 { 00108 /** wait until transmitter FIFO is empty... */ 00109 while ( ( bspi()->CSR2 & BSPI_TFE ) == 0 ) 00110 { 00111 /** clear out the receiver FIFO... */ 00112 while ( bspi()->CSR2 & BSPI_RFNE ) 00113 { 00114 CMachine::ubit8 ch = (bspi()->RXR >> 8); 00115 } 00116 CTaskScheduler::yield(); 00117 } 00118 /** clear out the receiver FIFO... */ 00119 while ( bspi()->CSR2 & BSPI_RFNE ) 00120 { 00121 CMachine::ubit8 ch = (bspi()->RXR >> 8); 00122 } 00123 }


| void PikeAero::CSPI::disableChipSelect | ( | CMachine::ubit16 | cs | ) | [inline] |
Definition at line 45 of file cspi.h.
References GPIO6.
Referenced by PikeAero::CSPIEEPROM::functionEnter(), PikeAero::CSPIAmp::functionEnter(), PikeAero::CSPIEEPROM::functionExit(), PikeAero::CSPIAmp::functionExit(), PikeAero::CSPIADC::functionExit(), PikeAero::CSPIADC::irq(), PikeAero::CSPIEEPROM::writeDisable(), and PikeAero::CSPIEEPROM::writeEnable().
00045 { GPIO6->PD |= cs; }

| void PikeAero::CSPI::disableRXInterrupts | ( | ) | [inline] |
Definition at line 41 of file cspi.h.
References bspi(), BSPI_RIE, and PikeAero::BSPI_TypeDef::CSR1.
Referenced by PikeAero::CSPIEEPROM::_write(), CSPI(), PikeAero::CSPIEEPROM::functionEnter(), PikeAero::CSPIAmp::functionEnter(), PikeAero::CSPIADC::functionEnter(), PikeAero::CSPIEEPROM::functionExit(), and PikeAero::CSPIADC::functionExit().


| void PikeAero::CSPI::disableTXInterrupts | ( | ) | [inline] |
Reimplemented in PikeAero::CSPIADC.
Definition at line 42 of file cspi.h.
References bspi(), BSPI_TIE, and PikeAero::BSPI_TypeDef::CSR2.
Referenced by CSPI(), PikeAero::CSPIEEPROM::functionEnter(), PikeAero::CSPIAmp::functionEnter(), PikeAero::CSPIEEPROM::functionExit(), and irq().


| void PikeAero::CSPI::enableChipSelect | ( | CMachine::ubit16 | cs | ) | [inline] |
Definition at line 44 of file cspi.h.
References GPIO6.
Referenced by PikeAero::CSPIEEPROM::_write(), PikeAero::CSPIEEPROM::functionEnter(), PikeAero::CSPIAmp::functionEnter(), PikeAero::CSPIADC::functionEnter(), PikeAero::CSPIADC::irq(), PikeAero::CSPIEEPROM::writeDisable(), and PikeAero::CSPIEEPROM::writeEnable().
00044 { GPIO6->PD &= ~cs; }

| void PikeAero::CSPI::enableRXInterrupts | ( | ) | [inline] |
Definition at line 38 of file cspi.h.
References bspi(), BSPI_RIE, and PikeAero::BSPI_TypeDef::CSR1.
Referenced by PikeAero::CSPIEEPROM::read(), PikeAero::CSPIADC::start(), and PikeAero::CSPIADC::startChannel().


| void PikeAero::CSPI::enableTXInterrupts | ( | ) | [inline] |
Reimplemented in PikeAero::CSPIADC.
Definition at line 39 of file cspi.h.
References bspi(), BSPI_TIE, and PikeAero::BSPI_TypeDef::CSR2.
Referenced by PikeAero::CSPIEEPROM::_write(), and PikeAero::CSPIEEPROM::read().


| void PikeAero::CSPI::irq | ( | CMachine::InterruptVector | v | ) | [virtual] |
receive a hardware interrupt.
TX FIFO not full...
if transmit buffer is NULL, transmit a zero, else next byte from buffer..
RX FIFO not empty...
read and store the byte if the RX buffer is not NULL...
Reimplemented from PikeAero::CObject.
Reimplemented in PikeAero::CSPIADC.
Definition at line 128 of file cspi.cpp.
References bspi(), BSPI_RFNE, BSPI_TFF, disableTXInterrupts(), mRXBuffer, mRXCount, mTXBuffer, mTXCount, PikeAero::BSPI_TypeDef::RXR, and PikeAero::BSPI_TypeDef::TXR.
00129 { 00130 /** TX FIFO not full... */ 00131 while ( ( bspi()->CSR2 & BSPI_TFF ) == 0 && mTXCount > 0 ) 00132 { 00133 /** if transmit buffer is NULL, transmit a zero, else next byte from buffer.. */ 00134 CMachine::ubit8 ch = (mTXBuffer != NULL) ? *mTXBuffer++ : (CMachine::ubit8)'\0'; 00135 bspi()->TXR = (ch << 8); 00136 if ( --mTXCount == 0 ) 00137 { 00138 disableTXInterrupts(); 00139 } 00140 } 00141 00142 /** RX FIFO not empty... */ 00143 while ( mRXBuffer != NULL && bspi()->CSR2 & BSPI_RFNE ) 00144 { 00145 /** read and store the byte if the RX buffer is not NULL... */ 00146 *mRXBuffer++ = (bspi()->RXR >> 8); 00147 ++mRXCount; 00148 } 00149 }

| CMachine::ubit8 PikeAero::CSPI::rx | ( | ) |
receive a single byte.
Definition at line 94 of file cspi.cpp.
References bspi(), BSPI_RFNE, and PikeAero::CTaskScheduler::yield().
00095 { 00096 while ( ( bspi()->CSR2 & BSPI_RFNE ) == 0 ) 00097 { 00098 CTaskScheduler::yield(); 00099 } 00100 return (bspi()->RXR >> 8); 00101 }

| void PikeAero::CSPI::setFrequency | ( | CMachine::ubit32 | frequency | ) |
set the clock frequency.
5.333 MHz @ 32 MHz MCLK
Definition at line 64 of file cspi.cpp.
References bspi(), PikeAero::BSPI_TypeDef::CLK, and PikeAero::CMachine::fMCLK().
Referenced by CSPI().
00065 { 00066 if ( frequency != 0 ) 00067 { 00068 CMachine::ubit32 divisor = CMachine::fMCLK() / frequency; 00069 bspi()->CLK = (divisor < 0x06) ? 0x06 : divisor; 00070 } 00071 else 00072 { 00073 /** 5.333 MHz @ 32 MHz MCLK */ 00074 bspi()->CLK = 0x06; 00075 } 00076 }


| CMachine::ubit8 PikeAero::CSPI::tx | ( | CMachine::ubit8 | ch | ) |
transmit a single byte
transmit a single byte.
Definition at line 81 of file cspi.cpp.
References bspi(), BSPI_TFF, BSPI_TX8, PikeAero::BSPI_TypeDef::CSR2, and PikeAero::CTaskScheduler::yield().
Referenced by PikeAero::CSPIEEPROM::_write(), PikeAero::CSPIEEPROM::read(), PikeAero::CSPIAmp::setChanelGain(), PikeAero::CSPIAmp::setChannel(), PikeAero::CSPIAmp::setGain(), PikeAero::CSPIEEPROM::writeDisable(), and PikeAero::CSPIEEPROM::writeEnable().
00082 { 00083 while ( bspi()->CSR2 & BSPI_TFF ) 00084 { 00085 CTaskScheduler::yield(); 00086 } 00087 bspi()->CSR2 = BSPI_TX8(ch); 00088 return ch; 00089 }


BSPI_TypeDef* PikeAero::CSPI::mBSPI [private] |
CMachine::ubit8* PikeAero::CSPI::mRXBuffer [protected] |
Definition at line 67 of file cspi.h.
Referenced by PikeAero::CSPIEEPROM::_write(), PikeAero::CSPIEEPROM::functionExit(), PikeAero::CSPIADC::irq(), irq(), PikeAero::CSPIEEPROM::read(), PikeAero::CSPIADC::start(), and PikeAero::CSPIADC::startChannel().
CMachine::ubit32 PikeAero::CSPI::mRXCount [protected] |
Definition at line 69 of file cspi.h.
Referenced by PikeAero::CSPIEEPROM::_write(), PikeAero::CSPIADC::completed(), PikeAero::CSPIADC::irq(), irq(), PikeAero::CSPIEEPROM::read(), PikeAero::CSPIADC::start(), and PikeAero::CSPIADC::startChannel().
CMachine::ubit8* PikeAero::CSPI::mTXBuffer [protected] |
Definition at line 68 of file cspi.h.
Referenced by PikeAero::CSPIEEPROM::_write(), PikeAero::CSPIEEPROM::functionExit(), PikeAero::CSPIADC::irq(), irq(), PikeAero::CSPIEEPROM::read(), PikeAero::CSPIADC::start(), and PikeAero::CSPIADC::startChannel().
CMachine::ubit32 PikeAero::CSPI::mTXCount [protected] |
Definition at line 70 of file cspi.h.
Referenced by PikeAero::CSPIEEPROM::_write(), PikeAero::CSPIEEPROM::functionExit(), PikeAero::CSPIADC::irq(), irq(), PikeAero::CSPIEEPROM::read(), PikeAero::CSPIADC::start(), and PikeAero::CSPIADC::startChannel().
1.5.8