|
Open Model Railroad Network (OpenMRN)
|
Specialization of Serial SPI driver for CC32xx devices. More...
#include <CC32xxSPI.hxx>
Public Member Functions | |
| CC32xxSPI (const char *name, unsigned long base, uint32_t interrupt, ChipSelectMethod cs_assert, ChipSelectMethod cs_deassert, OSMutex *bus_lock=nullptr, size_t dma_threshold=DEFAULT_DMA_THRESHOLD_BYTES, uint32_t dma_channel_index_tx=UDMA_CH7_GSPI_TX, uint32_t dma_channel_index_rx=UDMA_CH6_GSPI_RX) | |
| Constructor. | |
| ~CC32xxSPI () | |
| Destructor. | |
| void | interrupt_handler () |
| handle an interrupt. | |
| OSMutex * | get_lock () |
| This method provides a reference to the Mutex used by this device driver. | |
Public Member Functions inherited from SPI | |
| int | transfer_with_cs_assert (struct spi_ioc_transfer *msg) |
| Method to transmit/receive the data. | |
| int | transfer_with_cs_assert_polled (struct spi_ioc_transfer *msgs, int num=1) |
| Method to transmit/receive the data. | |
| int | transfer_messages (struct spi_ioc_transfer *msgs, int num) |
| Conduct multiple message transfers with one stop at the end. | |
Public Member Functions inherited from Device | |
| Device (const char *name) | |
| Constructor. | |
| virtual | ~Device () |
| Destructor. | |
Private Member Functions | |
| void | enable () override |
| Function to enable device. | |
| void | disable () override |
| Function to disable device. | |
| int | update_configuration () override |
| Update the configuration of the bus. | |
| int | transfer (struct spi_ioc_transfer *msg) override |
| Method to transmit/receive the data. | |
| template<typename T > | |
| int | transfer_polled (struct spi_ioc_transfer *msg) |
| Method to transmit/receive the data. | |
| int | transfer_polled (struct spi_ioc_transfer *msg) override |
| Method to transmit/receive the data. | |
| void | config_dma (struct spi_ioc_transfer *msg) |
| Configure a DMA transaction. | |
| long | data_get_non_blocking (unsigned long *data) |
| Receives a word from the specified port. | |
| long | data_put_non_blocking (unsigned long data) |
| Transmits a word on the specified port. | |
| void | data_put (unsigned long data) |
| Waits until the word is transmitted on the specified port. | |
| void | set_configuration () |
| Set the instance local configuration. | |
| CC32xxSPI () | |
| Default constructor. | |
| DISALLOW_COPY_AND_ASSIGN (CC32xxSPI) | |
Private Member Functions inherited from Atomic | |
| void | lock () |
| void | unlock () |
Private Attributes | |
| UDMACC32XX_Handle | dmaHandle_ |
| handle to DMA reference | |
| OSSem * | sem_ |
| reference to the semaphore belonging to this bus | |
| unsigned long | base_ |
| base address of this device | |
| unsigned long | clock_ |
| clock rate supplied to the module | |
| unsigned long | interrupt_ |
| interrupt of this device | |
| size_t | dmaThreshold_ |
| threshold in bytes to start using DMA | |
| uint32_t | dmaChannelIndexTx_ |
| TX DMA channel index. | |
| uint32_t | dmaChannelIndexRx_ |
| RX DMA channel index. | |
| uint32_t | spiChctrl_ |
| instance local copy of configuration | |
| uint32_t | spiChconf_ |
| instance local copy of configuration | |
| uint32_t | spiXferlevel_ |
| instance local copy of configuration | |
Static Private Attributes | |
| static constexpr size_t | DEFAULT_DMA_THRESHOLD_BYTES = 64 |
| static constexpr size_t | MAX_DMA_TRANSFER_AMOUNT = 1024 |
| Maximum number of bytes transferred in a single DMA transaction. | |
| static constexpr uint32_t | dmaRxConfig_ [] |
| This lookup table is used to configure the DMA channels for the appropriate (8bit, 16bit or 32bit) transfer sizes. | |
| static constexpr uint32_t | dmaTxConfig_ [] |
| This lookup table is used to configure the DMA channels for the appropriate (8bit, 16bit or 32bit) transfer sizes. | |
| static constexpr uint32_t | dmaNullConfig_ [] |
| This lookup table is used to configure the DMA channels for the appropriate (8bit, 16bit or 32bit) transfer sizes when either txBuf or rxBuf are NULL. | |
Additional Inherited Members | |
Public Types inherited from SPI | |
| typedef void(* | ChipSelectMethod) () |
| Function point for the chip select assert and deassert methods. | |
Static Public Member Functions inherited from Device | |
| static int | open (struct _reent *reent, const char *path, int flags, int mode) |
| Open a file or device. | |
| static int | close (struct _reent *reent, int fd) |
| Close a file or device. | |
| static int | stat (struct _reent *reent, const char *path, struct stat *stat) |
| Get the status information of a file or device. | |
| static int | select (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, long long timeout) |
| POSIX select(). | |
| static void | select_clear () |
| Clears the current thread's select bits. | |
Static Public Member Functions inherited from FileIO | |
| static ssize_t | read (struct _reent *reent, int fd, void *buf, size_t count) |
| Read from a file or device. | |
| static ssize_t | write (struct _reent *reent, int fd, const void *buf, size_t count) |
| Write to a file or device. | |
| static _off_t | lseek (struct _reent *reent, int fd, _off_t offset, int whence) |
| Change the offset index of a file or device. | |
| static int | fstat (struct _reent *reent, int fd, struct stat *stat) |
| Get the status information of a file or device. | |
| static int | ioctl (int fd, unsigned long int key, unsigned long data) |
| Request and ioctl transaction. | |
| static int | fcntl (int fd, int cmd, unsigned long data) |
| Manipulate a file descriptor. | |
| static bool | is_device (int fd) |
| Test if the file descriptor belongs to a device. | |
Protected Member Functions inherited from SPI | |
| SPI (const char *name, ChipSelectMethod cs_assert, ChipSelectMethod cs_deassert, OSMutex *bus_lock=nullptr) | |
| Constructor. | |
| ~SPI () | |
| Destructor. | |
| void | bus_lock () |
| Lock the bus shared by many chip selects. | |
| void | bus_unlock () |
| Unlock the bus shared by many chip selects. | |
| int | ioctl (File *file, unsigned long int key, unsigned long data) override |
| Request an ioctl transaction. | |
Protected Member Functions inherited from Node | |
| Node (const char *name) | |
| Constructor. | |
| virtual | ~Node () |
| Destructor. | |
| int | open (File *, const char *, int, int) OVERRIDE |
| Open method. | |
| int | close (File *) OVERRIDE |
| Close method. | |
| virtual int | fstat (File *file, struct stat *stat) override |
| Get the status information of a file or device. | |
Protected Member Functions inherited from FileIO | |
| FileIO (const char *name) | |
| Constructor. | |
| virtual | ~FileIO () |
| Destructor. | |
| virtual off_t | lseek (File *f, off_t offset, int whence) |
| Seek method. | |
| virtual int | fcntl (File *file, int cmd, unsigned long data) |
| Manipulate a file descriptor. | |
| virtual bool | select (File *file, int mode) |
| Device select method. | |
Static Protected Member Functions inherited from Device | |
| static void | select_insert (SelectInfo *info) |
| Add client to list of clients needing woken. | |
| static void | select_wakeup (SelectInfo *info) |
| Wakeup the list of clients needing woken. | |
| static void | select_wakeup_from_isr (SelectInfo *info, int *woken) |
| Wakeup the list of clients needing woken. | |
Static Protected Member Functions inherited from FileIO | |
| static int | fd_alloc (void) |
| Allocate a free file descriptor. | |
| static void | fd_free (int fd) |
| Free up a file descriptor. | |
| static File * | file_lookup (int fd) |
| Looks up a reference to a File corresponding to a given file descriptor. | |
| static int | fd_lookup (File *file) |
| Looks up a file descriptor corresponding to a given File reference. | |
Protected Attributes inherited from SPI | |
| ChipSelectMethod | csAssert |
| function pointer to a method that asserts chip select. | |
| ChipSelectMethod | csDeassert |
| function pointer to a method that deasserts chip select. | |
| uint32_t | speedHz |
| Max default speed in Hz. | |
| uint8_t | bitsPerWord |
| number of bits per word transaction | |
| uint8_t | mode |
| one of four SPI modes | |
| bool | lsbFirst |
| transmit LSB first if true | |
Protected Attributes inherited from Node | |
| OSMutex | lock_ |
| protects internal structures. | |
| mode_t | mode_ |
| File open mode, such as O_NONBLOCK. | |
| unsigned int | references_ |
| number of open references | |
Protected Attributes inherited from FileIO | |
| const char * | name |
| device name | |
Static Protected Attributes inherited from FileIO | |
| static const unsigned int | numOpenFiles = 20 |
| static File | files [] |
| File descriptor pool. | |
| static OSMutex | mutex |
| mutual exclusion for fileio | |
Specialization of Serial SPI driver for CC32xx devices.
Definition at line 53 of file CC32xxSPI.hxx.
| CC32xxSPI::CC32xxSPI | ( | const char * | name, |
| unsigned long | base, | ||
| uint32_t | interrupt, | ||
| ChipSelectMethod | cs_assert, | ||
| ChipSelectMethod | cs_deassert, | ||
| OSMutex * | bus_lock = nullptr, |
||
| size_t | dma_threshold = DEFAULT_DMA_THRESHOLD_BYTES, |
||
| uint32_t | dma_channel_index_tx = UDMA_CH7_GSPI_TX, |
||
| uint32_t | dma_channel_index_rx = UDMA_CH6_GSPI_RX |
||
| ) |
Constructor.
| name | name of this device instance in the file system |
| base | base address of this device |
| interrupt | interrupt number of this device |
| cs_assert | function pointer to a method that asserts chip select |
| cs_deassert | function pointer to a method that deasserts chip select |
| bus_lock | the user must provide a shared mutex if the device instance represents more than one chip select on the same bus interface. |
| dma_threshold | the threshold in bytes to use a DMA transaction, 0 = DMA always disabled |
| dma_channel_index_tx | UDMA_CH7_GSPI_TX or UDMA_CH31_GSPI_TX |
| dma_channel_index_rx | UDMA_CH6_GSPI_RX or UDMA_CH30_GSPI_RX |
| name | name of this device instance in the file system |
| base | base address of this device |
| interrupt | interrupt number of this device |
| cs_assert | function pointer to a method that asserts chip select |
| cs_deassert | function pointer to a method that deasserts chip select |
| bus_lock | the user must provide a shared mutex if the device instance represents more than one chip select on the same bus interface. |
Definition at line 72 of file CC32xxSPI.cxx.
|
inline |
Destructor.
Definition at line 80 of file CC32xxSPI.hxx.
|
private |
Configure a DMA transaction.
| msg | message to transact. |
Definition at line 183 of file CC32xxSPI.cxx.
|
inlineprivate |
Receives a word from the specified port.
This function gets a SPI word from the receive FIFO for the specified port.
| data | is pointer to receive data variable. |
Definition at line 271 of file CC32xxSPI.hxx.
|
inlineprivate |
Waits until the word is transmitted on the specified port.
This function transmits a SPI word on the transmit FIFO for the specified port. This function waits until the space is available on transmit FIFO.
| data | is data to be transmitted. |
Definition at line 304 of file CC32xxSPI.hxx.
|
inlineprivate |
Transmits a word on the specified port.
This function transmits a SPI word on the transmit FIFO for the specified port.
| data | is data to be transmitted. |
Definition at line 288 of file CC32xxSPI.hxx.
|
inlineoverrideprivatevirtual |
|
inlineoverrideprivatevirtual |
|
inline |
This method provides a reference to the Mutex used by this device driver.
It can be passed into another SPI driver instance as a bus wide lock such that a SPI bus can be shared between this driver and another use case with another chip select.
Definition at line 95 of file CC32xxSPI.hxx.
| void CC32xxSPI::interrupt_handler | ( | ) |
handle an interrupt.
Common interrupt handler for all SPI devices.
Definition at line 292 of file CC32xxSPI.cxx.
|
inlineprivate |
Set the instance local configuration.
Definition at line 313 of file CC32xxSPI.hxx.
|
inlineoverrideprivatevirtual |
Method to transmit/receive the data.
| msg | message to transact. |
Implements SPI.
Definition at line 165 of file CC32xxSPI.hxx.
|
inlineprivatevirtual |
Method to transmit/receive the data.
This is a template in order to preserve execution speed on type specific pointer math.
| msg | message to transact. |
Implements SPI.
Definition at line 186 of file CC32xxSPI.hxx.
|
inlineoverrideprivatevirtual |
Method to transmit/receive the data.
| msg | message to transact. |
Implements SPI.
Definition at line 243 of file CC32xxSPI.hxx.
|
overrideprivatevirtual |
Update the configuration of the bus.
Implements SPI.
Definition at line 105 of file CC32xxSPI.cxx.
|
private |
base address of this device
Definition at line 322 of file CC32xxSPI.hxx.
|
private |
clock rate supplied to the module
Definition at line 323 of file CC32xxSPI.hxx.
|
staticconstexprprivate |
Definition at line 101 of file CC32xxSPI.hxx.
|
private |
RX DMA channel index.
Definition at line 327 of file CC32xxSPI.hxx.
|
private |
TX DMA channel index.
Definition at line 326 of file CC32xxSPI.hxx.
|
private |
handle to DMA reference
Definition at line 320 of file CC32xxSPI.hxx.
|
staticconstexprprivate |
This lookup table is used to configure the DMA channels for the appropriate (8bit, 16bit or 32bit) transfer sizes when either txBuf or rxBuf are NULL.
Definition at line 135 of file CC32xxSPI.hxx.
|
staticconstexprprivate |
This lookup table is used to configure the DMA channels for the appropriate (8bit, 16bit or 32bit) transfer sizes.
Table for an SPI DMA RX channel.
Definition at line 111 of file CC32xxSPI.hxx.
|
private |
threshold in bytes to start using DMA
Definition at line 325 of file CC32xxSPI.hxx.
|
staticconstexprprivate |
This lookup table is used to configure the DMA channels for the appropriate (8bit, 16bit or 32bit) transfer sizes.
Table for an SPI DMA TX channel
Definition at line 123 of file CC32xxSPI.hxx.
|
private |
interrupt of this device
Definition at line 324 of file CC32xxSPI.hxx.
|
staticconstexprprivate |
Maximum number of bytes transferred in a single DMA transaction.
Definition at line 104 of file CC32xxSPI.hxx.
|
private |
reference to the semaphore belonging to this bus
Definition at line 321 of file CC32xxSPI.hxx.
|
private |
instance local copy of configuration
Definition at line 329 of file CC32xxSPI.hxx.
|
private |
instance local copy of configuration
Definition at line 328 of file CC32xxSPI.hxx.
|
private |
instance local copy of configuration
Definition at line 330 of file CC32xxSPI.hxx.