<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.compulab.com/w/index.php?action=history&amp;feed=atom&amp;title=SPI_Driver_API_for_CM-T3530</id>
	<title>SPI Driver API for CM-T3530 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.compulab.com/w/index.php?action=history&amp;feed=atom&amp;title=SPI_Driver_API_for_CM-T3530"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.compulab.com/w/index.php?title=SPI_Driver_API_for_CM-T3530&amp;action=history"/>
	<updated>2026-09-02T08:14:12Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>https://mediawiki.compulab.com/w/index.php?title=SPI_Driver_API_for_CM-T3530&amp;diff=806&amp;oldid=prev</id>
		<title>Mike at 14:18, 23 December 2009</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.compulab.com/w/index.php?title=SPI_Driver_API_for_CM-T3530&amp;diff=806&amp;oldid=prev"/>
		<updated>2009-12-23T14:18:31Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;The WinCE demo image includes the SPI driver that allows direct access to the SPI controllers.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The SPI driver is a stream driver that can be accessed using the &amp;quot;SPI&amp;quot; prefix.&lt;br /&gt;
== SPI driver API ==&lt;br /&gt;
{{API | Signature = HANDLE SPIOpen(LPCTSTR pSpiName) | &lt;br /&gt;
Description = Opens an instance of the SPI Driver. Returns a handle that should be used to access the driver |  &lt;br /&gt;
Return = NULL indicates failure, otherwise a driver handle is returned. |&lt;br /&gt;
Param1 = *pSpiName - A string that indicates which SPI controller is accessed by this driver instance. Allowed names are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define SPI1_DEVICE_NAME         L&amp;quot;SPI1:&amp;quot;    //SPI1&lt;br /&gt;
#define SPI2_DEVICE_NAME         L&amp;quot;SPI2:&amp;quot;    //SPI2&lt;br /&gt;
#define SPI3_DEVICE_NAME         L&amp;quot;SPI3:&amp;quot;    //SPI3&lt;br /&gt;
#define SPI4_DEVICE_NAME         L&amp;quot;SPI4:&amp;quot;    //SPI4&lt;br /&gt;
&amp;lt;/pre&amp;gt; |&lt;br /&gt;
Param2 = |&lt;br /&gt;
Param3 = |&lt;br /&gt;
Param4 = |&lt;br /&gt;
Remarks = }}&lt;br /&gt;
&lt;br /&gt;
{{API | Signature = void SPIClose(HANDLE hContext) | &lt;br /&gt;
Description = This function closes the handle to the driver |  &lt;br /&gt;
Return = None |&lt;br /&gt;
Param1 = *hContext - Handle to an open driver instance|&lt;br /&gt;
Param2 = |&lt;br /&gt;
Param3 = |&lt;br /&gt;
Param4 = |&lt;br /&gt;
Remarks = }}&lt;br /&gt;
&lt;br /&gt;
{{API | Signature = BOOL SPIConfigure(HANDLE hContext, DWORD address, DWORD config) | &lt;br /&gt;
Description = This function is used to configure the SPI channel|  &lt;br /&gt;
Return = None |&lt;br /&gt;
Param1 = *hContext - Handle to an open driver instance|&lt;br /&gt;
Param2 = *address - SPI slave address|&lt;br /&gt;
Param3 = *config - The needed value for MCSPI_CHxCONF, you can use the following macros:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* CHCONF Register Bit values */&lt;br /&gt;
//Data are latched on odd-numbered edges of spim_clk.&lt;br /&gt;
#define MCSPI_PHA_ODD_EDGES                     (0 &amp;lt;&amp;lt; 0)&lt;br /&gt;
//Data are latched on even-numbered edges of spim_clk.&lt;br /&gt;
#define MCSPI_PHA_EVEN_EDGES                    (1 &amp;lt;&amp;lt; 0)&lt;br /&gt;
&lt;br /&gt;
//spim_clk is held high during the active state&lt;br /&gt;
#define MCSPI_POL_ACTIVEHIGH                    (0 &amp;lt;&amp;lt; 1)&lt;br /&gt;
//spim_clk is held low during the active state&lt;br /&gt;
#define MCSPI_POL_ACTIVELOW                     (1 &amp;lt;&amp;lt; 1)&lt;br /&gt;
&lt;br /&gt;
//Frequency divider for spim_clk (for master device only) &lt;br /&gt;
#define MCSPI_CHCONF_CLKD(x)                    ((x &amp;amp; 0x0F) &amp;lt;&amp;lt; 2)&lt;br /&gt;
&lt;br /&gt;
//SPIM_CSX is held high during the active state&lt;br /&gt;
#define MCSPI_CSPOLARITY_ACTIVEHIGH             (0 &amp;lt;&amp;lt; 6)&lt;br /&gt;
//SPIM_CSX is held low during the active state&lt;br /&gt;
#define MCSPI_CSPOLARITY_ACTIVELOW              (1 &amp;lt;&amp;lt; 6)&lt;br /&gt;
&lt;br /&gt;
//SPI word length (4 &amp;lt;= x &amp;amp;&amp;amp; 32 &amp;gt;= x)&lt;br /&gt;
#define MCSPI_CHCONF_WL(x)                      (((x-1) &amp;amp; 0x1F) &amp;lt;&amp;lt; 7)&lt;br /&gt;
#define MCSPI_CHCONF_GET_WL(x)                  (((x &amp;gt;&amp;gt; 7) &amp;amp; 0x1F) +1)&lt;br /&gt;
&lt;br /&gt;
//Transmit/receive modes&lt;br /&gt;
#define MCSPI_CHCONF_TRM_TXRX                   (0 &amp;lt;&amp;lt; 12) //Transmit and receive mode&lt;br /&gt;
#define MCSPI_CHCONF_TRM_RXONLY                 (1 &amp;lt;&amp;lt; 12) //Receive-only mode&lt;br /&gt;
#define MCSPI_CHCONF_TRM_TXONLY                 (2 &amp;lt;&amp;lt; 12) //Transmit-only mode&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
When enabled, the DMA write request line is asserted when the channel is&lt;br /&gt;
enabled and the MCSPI_TXx register of the channel is empty.&lt;br /&gt;
*/&lt;br /&gt;
#define MCSPI_CHCONF_DMAW_ENABLE                (1 &amp;lt;&amp;lt; 14) //enabled&lt;br /&gt;
#define MCSPI_CHCONF_DMAW_DISABLE               (0 &amp;lt;&amp;lt; 14) //disabled&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
The DMA Read request line is asserted when the channel is&lt;br /&gt;
enabled and a new data is available in the receive register of the&lt;br /&gt;
channel.&lt;br /&gt;
*/&lt;br /&gt;
#define MCSPI_CHCONF_DMAR_ENABLE                (1 &amp;lt;&amp;lt; 15) //enabled&lt;br /&gt;
#define MCSPI_CHCONF_DMAR_DISABLE               (0 &amp;lt;&amp;lt; 15) //disabled&lt;br /&gt;
&lt;br /&gt;
//No transmission on data Line 0 (spim_somi)&lt;br /&gt;
#define MCSPI_CHCONF_DPE0                       (1 &amp;lt;&amp;lt; 16)&lt;br /&gt;
//No transmission on data Line 1 (spim_simo)&lt;br /&gt;
#define MCSPI_CHCONF_DPE1                       (1 &amp;lt;&amp;lt; 17)&lt;br /&gt;
//Input select - Data Line 1 (spim_simo) selected for reception&lt;br /&gt;
#define MCSPI_CHCONF_IS                         (1 &amp;lt;&amp;lt; 18)&lt;br /&gt;
//Turbo mode - Turbo is activated to maximize the throughput for multi-SPI word transfers.&lt;br /&gt;
#define MCSPI_CHCONF_TURBO                      (1 &amp;lt;&amp;lt; 19)&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
Manual SPIM_CSX assertion to keep SPIM_CSX for the channel &lt;br /&gt;
active between SPI words (single channel master mode only). &lt;br /&gt;
*/&lt;br /&gt;
#define MCSPI_CHCONF_FORCE                      (1 &amp;lt;&amp;lt; 20)&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
Channel 0 only and slave mode only: SPI slave select signal detection.&lt;br /&gt;
0x0: Detection enabled only on spim_cs0&lt;br /&gt;
0x1: Detection enabled only on spim_cs1&lt;br /&gt;
0x2: Detection enabled only on spim_cs2&lt;br /&gt;
0x3: Detection enabled only on spim_cs3&lt;br /&gt;
*/&lt;br /&gt;
#define MCSPI_CHCONF_SPIENSLV(CSn)              ((CSn &amp;amp; 0x03) &amp;lt;&amp;lt; 21)&lt;br /&gt;
&lt;br /&gt;
// Defines number of interface clock cycles between CS toggling and first/last edge of SPI clock&lt;br /&gt;
#define MCSPI_CHCONF_TCS_0P5_CLOCKS             (0 &amp;lt;&amp;lt; 25)&lt;br /&gt;
#define MCSPI_CHCONF_TCS_1P5_CLOCKS             (1 &amp;lt;&amp;lt; 25)&lt;br /&gt;
#define MCSPI_CHCONF_TCS_2P5_CLOCKS             (2 &amp;lt;&amp;lt; 25)&lt;br /&gt;
#define MCSPI_CHCONF_TCS_3P5_CLOCKS             (3 &amp;lt;&amp;lt; 25)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
Param4 = |&lt;br /&gt;
Remarks = You can read more about the MCSPI_CHCONF register in the OMAP35x Technical reference manual.}}&lt;br /&gt;
&lt;br /&gt;
{{API | Signature = DWORD SPIRead(HANDLE hContext, DWORD size, VOID *pBuffer) | &lt;br /&gt;
Description = This function reads data from the device identified by the open context. |  &lt;br /&gt;
Return = The number of bytes read.|&lt;br /&gt;
Param1 = *hContext - Handle to an open driver instance.|&lt;br /&gt;
Param2 = *size - Number of bytes to be read from the device.|&lt;br /&gt;
Param3 = *pBuffer - Pointer to the buffer that receives the data read from the device.|&lt;br /&gt;
Param4 = |&lt;br /&gt;
Remarks = This operation is only allowed for MCSPI_CHCONF_TRM_RXONLY channels as configured in [[#BOOL_SPIConfigure.28HANDLE_hContext.2C_DWORD_address.2C_DWORD_config.29 | SPIConfigure]].}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{API | Signature = DWORD SPIWrite(HANDLE hContext, DWORD size, VOID *pBuffer) | &lt;br /&gt;
Description = This function writes data to the device identified by the open context. |  &lt;br /&gt;
Return = The number of bytes written.|&lt;br /&gt;
Param1 = *hContext - Handle to an open driver instance.|&lt;br /&gt;
Param2 = *size - Number of bytes to write to the device.|&lt;br /&gt;
Param3 = *pBuffer - Pointer to the buffer containing the data to write to the  device.|&lt;br /&gt;
Param4 = |&lt;br /&gt;
Remarks = This operation is only allowed for MCSPI_CHCONF_TRM_TXONLY channels as configured in [[#BOOL_SPIConfigure.28HANDLE_hContext.2C_DWORD_address.2C_DWORD_config.29 | SPIConfigure]].}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{API | Signature = DWORD SPIWriteRead(HANDLE hContext, DWORD size, VOID *pOutBuffer, VOID *pInBuffer)| &lt;br /&gt;
Description = This function writes and reads data to/from the device identified by the open context. |  &lt;br /&gt;
Return = The number of bytes read.|&lt;br /&gt;
Param1 = *hContext - Handle to an open driver instance.|&lt;br /&gt;
Param2 = *size - Number of bytes to write and read from/to the device.|&lt;br /&gt;
Param3 = *pOutBuffer - Pointer to the buffer that receives the data read from the device.|&lt;br /&gt;
Param4 = *pInBuffer - Pointer to the buffer containing the data to write to the  device.|&lt;br /&gt;
Remarks = *Both buffers must be the same length.&lt;br /&gt;
:*This operation is only allowed for MCSPI_CHCONF_TRM_TXRX channels as configured in [[#BOOL_SPIConfigure.28HANDLE_hContext.2C_DWORD_address.2C_DWORD_config.29 | SPIConfigure]].}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SPI Sample Application ==&lt;/div&gt;</summary>
		<author><name>Mike</name></author>
		
	</entry>
</feed>