PikeAero::CSPI Class Reference

#include <cspi.h>

Inheritance diagram for PikeAero::CSPI:

Inheritance graph
[legend]
Collaboration diagram for PikeAero::CSPI:

Collaboration graph
[legend]

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_TypeDefbspi ()

Protected Attributes

CMachine::ubit8mRXBuffer
CMachine::ubit32 mRXCount
CMachine::ubit8mTXBuffer
CMachine::ubit32 mTXCount

Private Attributes

BSPI_TypeDefmBSPI

Detailed Description

Primitives to communicate with BSPI devices.

Author:
Michael Sharkey <mike@pikeaero.com>

Definition at line 32 of file cspi.h.


Constructor & Destructor Documentation

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 }

Here is the call graph for this function:

PikeAero::CSPI::~CSPI (  )  [virtual]

Definition at line 56 of file cspi.cpp.

References PikeAero::CMachine::removeVectorIRQ().

00057 {
00058     CMachine::removeVectorIRQ(this);
00059 }

Here is the call graph for this function:


Member Function Documentation

BSPI_TypeDef* PikeAero::CSPI::bspi (  )  [inline, protected]

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 }

Here is the call graph for this function:

Here is the caller graph for this function:

void PikeAero::CSPI::disableChipSelect ( CMachine::ubit16  cs  )  [inline]

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().

00041 { bspi()->CSR1 &= ~BSPI_RIE(0xFF); }

Here is the call graph for this function:

Here is the caller graph for this function:

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().

00042 { bspi()->CSR2 &= ~BSPI_TIE(0xFF); }

Here is the call graph for this function:

Here is the caller graph for this function:

void PikeAero::CSPI::enableChipSelect ( CMachine::ubit16  cs  )  [inline]

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().

00038 { bspi()->CSR1 |= BSPI_RIE(0x01); }

Here is the call graph for this function:

Here is the caller graph for this function:

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().

00039 { bspi()->CSR2 |= BSPI_TIE(0x01); }

Here is the call graph for this function:

Here is the caller graph for this function:

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 }

Here is the call graph for this function:

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 }

Here is the call graph for this function:

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 }

Here is the call graph for this function:

Here is the caller graph for this function:

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 }

Here is the call graph for this function:

Here is the caller graph for this function:


Field Documentation

Definition at line 75 of file cspi.h.

Referenced by bspi().


The documentation for this class was generated from the following files:

Generated on Sun Oct 25 14:00:15 2009 for stingray3 by  doxygen 1.5.8