激情综合丁香-激情综合六月-激情综合婷婷亚洲图片-激情综合图区-激情综合网五月

EM9170 SPI接口用戶指南

 2011-8-26              

1、功能描述

 

        EM9170提供了一路硬件4線制SPI接口供用戶使用,它的4條信號線與系統的GPIO復用,系統上電后,對應管腳默認為GPIO狀態(詳見《EM9170工控主板數據手冊 》),當在應用程序中打開SPI接口后,對應的信號線將自動切換到SPI狀態。EM9170 SPI接口支持以下特性:

        · 4線制全雙工同步串行接口
        · 主控(Master)工作模式 
        · 可以配置SPI時鐘信號(SPI_SCLK)的相位和極性 
        · 支持1至32-bit可配置的數據通訊位寬 
        · 支持DMA操作方式 
        · 最高波特率16Mbps

 

        SPI通訊的時序簡單,主要是在SPI時鐘(SCLK)的同步下,在兩個設備的移位寄存器間進行數據通訊。EM9170的SPI接口可以配置SCLK的極性(POL)和相位(PHA),圖1為設置不同的相位和極性配置時,時鐘信號的輸出波形。

圖1:SPI總線SCLK和MOSI,MISO之間的關系

 

        圖1中的時鐘極性(POL)決定了SPI串行時鐘信號線(SCLK)空閑時的電平,如果POL=0,串行時鐘空閑時為低電平,POL=1串行時鐘空閑時為高電平。時鐘相位(PHA) 用來決定數據在什么時刻輸出和鎖存輸入。如果 PHA=0,SPI控制器在SCLK的下降沿輸出數據,在SCLK上升沿鎖存輸入的數據。當PHA=1時,將在SCLK上升沿輸出數據,而在SCLK下降沿鎖存輸入數據。SPI線上的主從設備必須根據具體情況設置匹配的傳輸時序模式,時序只有匹配,數據才能正常通訊。

 

2、操作說明

 

2.1  打開SPI端口
        通過調用CreateFile( )函數來打開系統的SPI設備,設備名稱為“SPI1:”如下所示:


// Open the SPI port.
hSPI = CreateFile (TEXT”SPI1:”, // name of device
        GENERIC_READ | GENERIC_WRITE, // access (read-write) mode
        FILE_SHARE_READ | FILE_SHARE_WRITE, // sharing mode
        NULL, // security attributes (ignored)
        OPEN_EXISTING, // creation disposition
        FILE_FLAG_RANDOM_ACCESS, // flags/attributes
        NULL); // template file (ignored)

 

2.2  數據通訊
        在進行SPI數據通訊前,需要調用SPIConfig()函數對SPI總線做相應的配置,函數申明如下:

 

BOOL SPIConfig( HANDLE hCSPI, PCSPI_BUSCONFIG_T pCspiConfig );

 

        其中參數pCspiConfig為SPI總線配置結構體,其定義如下:

 

typedef struct
{ // CSPI bus configuration
        UINT32 freq; // SPI波特率:<=16Mbps
        UINT8 bitcount; // 數據位寬:1~32bit
        BOOL pol; // 設置時鐘極性
        BOOL pha; // 設置時鐘相位
} CSPI_BUSCONFIG_T, *PCSPI_BUSCONFIG_T;

 

        用戶調用SPIExchange()函數來完成一次數據收發,函數申明如下:

 

BOOL SPIExchange(
        HANDLE hCSPI, // 由CreateFile創建的HANDLE
        PVOID pTxBuf, // 發送數據緩存
        PVOID pRxBuf, // 接收數據緩存
        UINT32 xchCnt ); // 傳輸的數據個數

 

        需要注意的是,參數pTxBuf和pRxBuf是LPVOID型指針變量,當設置SPI通訊位寬(CSPI_BUSCONFIG_T的bitcount成員)為1~8時,數據收發緩存(pTxBuf和pRxBuf)需要定義為UNIT8數據類型,當SPI通訊位寬為9~16時,數據收發緩存需要定義為UINT16類型,當SPI通訊位數為17~32時,數據收發緩存要定義成UINT32數據類型。

 

        下面是示例程序片斷:

 

HANDLE hSPI; // 定義SPI操作HANDLE
DWORD dwXchCnt; // 定義傳輸字節個數
CSPI_BUSCONFIG_T spiConfig; // 定義SPI總線配置數據結構體

spiConfig.bitcount = 8; // bit count=8
spiConfig.freq = 16000000; // XCH speed = 16M
spiConfig.pha = FALSE; // Phase 0 operation
spiConfig.pol = FALSE; // Active high operation

// if 1<=cspiConfig.bitcount<=8 收發緩存需要定義為UINT8類型
UINT8 TxData[1024] = { 0x01, 0x02, 0x03, 0x04, 0x05 };
UINT8 RxData[1024];

// if 9<=cspiConfig.bitcount<=16 收發緩存需要定義為UINT16類型
// UINT16 TxData[1024] = { 0x01, 0x02, 0x03, 0x04, 0x05 };
// UINT16 RxData[1024];

// if 17<=cspiConfig.bitcount<=32 收發緩存需要定義為UINT32類型
// UINT32 TxData[1024] = { 0x01, 0x02, 0x03, 0x04, 0x05 };
// UINT32 RxData[1024];

// 打開SPI總線 (SPIOpen( )內部調用了CreateFile()函數)
hSPI = SPIOpen( TEXT(“SPI1:”) );
SPIConfig( hSPI, &spiConfig ); // 設置SPI總線配置信息
dwXchCnt = 5; // 傳輸5個數據
SPIExchange( hSPI, TxData, RxData, dwXchCnt ); // 進行SPI數據傳輸,傳輸5個數據

 

2.3  關閉SPI
        調用CloseHandle函數關閉由CreateFile創建的HANDLE即可關閉SPI端口。

 

CloseHandle( hSPI);

主站蜘蛛池模板: 91久久网| 1024国产看片在线观看| 国内精品一级毛片免费看| 欧美高清在线精品一区| 久久精品久久精品| 色播亚洲精品网站 亚洲第一| 黄色免费网络| 精品日韩| 亚洲婷婷六月| 尤物国产在线| 成人国产精品一级毛片视频| 国产婷婷一区二区在线观看| 国产成人精品久久一区二区三区| 香蕉视频在线观看www| 九九精品视频免费| 亚洲综合色婷婷| 国产 网红 喷水 播放| 国产精品自拍在线| 999www成人免费视频| 麻豆传媒网站入口直接进入免费版| 91看视频| 日日摸日日碰日日狠狠| 午夜激情视频在线观看| 欧美一级毛片大片免费播放| 国产露脸对白刺激3p在线| 福利亚洲| 久久精品视频久久| 香蕉视频色板| 亚洲精品天堂一区二区三区| 一级毛片在线看在线播放| 中文字幕日本一级高清片| 免费一级毛片清高播放| 国产片一级aaa毛片视频| 热综合一本伊人久久精品| 国产成人精品视频播放| 国产日韩欧美亚洲精品95| 欧美日韩国产一区二区三区播放| 在线国产资源| 一级片一级片一级片一级片| 久久国产视屏| 日韩免费播放|