本帖最后由 xiaojuan 于 2014-9-22 16:00 編輯
出自枯葉之蝶的博客
SPI串行同步接口(有時鐘脈沖)
串行外設(shè)接口(Serial Peripheral Interface,SPI)模塊是用于同外部外設(shè)和其他單片機器件進行 通信的同步串行接口。這些外設(shè)可以是串行EEPROM、移位寄存器、顯示驅(qū)動器和模數(shù)轉(zhuǎn)換器 (ADC)或音頻編解碼器。 
SPIx 串行接口由以下四個引腳組成:(可由引腳的映射確定四個引腳)?? SDIx:串行數(shù)據(jù)輸入 ?? SDOx:串行數(shù)據(jù)輸出 ?? SCKx:移位時鐘輸入或輸出 ?? SSx:低動態(tài)功耗從選擇或幀同步I/O 脈沖 
主模式下SPI 模塊的工作原理如下所述: 一句話概括:數(shù)據(jù)由用戶寫入SPIxbuf然后裝入SPIXTXB發(fā)送緩沖區(qū)移入移位寄存器SPIxSR,僅當存在待發(fā)送數(shù)據(jù)時波特發(fā)生器才產(chǎn)生對應(yīng)數(shù)據(jù)位模式的時鐘脈沖,一個脈沖一個數(shù)據(jù)位同步從移位寄存器SPIxSR發(fā)送至數(shù)據(jù)輸出引腳SDOX。 1. 一旦模塊設(shè)置為主模式工作并使能,待發(fā)送數(shù)據(jù)就會寫入SPIxBUF 寄存器。 SPITBE 位(SPIxSTAT<3>)清零。 2. SPIxTXB 的內(nèi)容移入移位寄存器SPIxSR (見圖23-8),且模塊將SPITBE 位清零。 3. 一組8/16/32 個時鐘脈沖將8/16/32 位發(fā)送數(shù)據(jù)從SPIxSR 移出到SDOx 引腳,同時將 SDIx 引腳的數(shù)據(jù)移入SPIxSR。 4. 當傳輸結(jié)束時,將發(fā)生以下事件: a) 中斷標志位SPIxRXIF 置1。通過將中斷允許位SPIxRXIE 置1 來允許SPI 中斷。 SPIxRXIF 標志不會被硬件自動清零。 b) 此外,當正在進行的發(fā)送和接收操作結(jié)束時, SPIxSR 的內(nèi)容將移入SPIxRXB。 c) 模塊將SPIRBF 位(SPIxSTAT<0>)置1,指示接收緩沖區(qū)已滿。一旦用戶代碼讀取了 SPIxBUF,硬件就會將SPIRBF 位清零。在增強型緩沖模式下, SPIRBE 位(SPIxSTAT<5>) 會在SPIxRXB FIFO 緩沖區(qū)全空時置1,在不全空時清零。 5. 當SPI 模塊需要將數(shù)據(jù)從SPIxSR 傳輸?shù)絊PIxRXB 時,如果SPIRBF 位置1 (接收緩沖
區(qū)滿),模塊會將SPIROV 位(SPIxSTAT<6>)置1,指示產(chǎn)生了溢出條件。
6. 只要SPITBE 位(SPIxSTAT<3>)置1,用戶軟件就可以在任何時候?qū)⒋l(fā)送數(shù)據(jù)寫入
SPIxBUF。寫操作可以與SPIxSR移出先前寫入的數(shù)據(jù)同時發(fā)生,因此可以允許連續(xù)發(fā)送。
在增強型緩沖模式下,SPITBF 位(SPIxSTAT<1>)會在SPIxTXB FIFO 緩沖區(qū)全滿時置
1, 在不全滿時清零。
SPITBE:SPI 發(fā)送緩沖區(qū)空狀態(tài)位(1)(empty)
1 = 發(fā)送緩沖區(qū)SPIxTXB 為空
0 = 發(fā)送緩沖區(qū)SPIxTXB 非空
當SPI 將數(shù)據(jù)從SPIxTXB 傳輸?shù)絊PIxSR 時,該位由硬件自動置1。
當通過寫SPIxBUF 裝入SPIxTXB 時,該位由硬件自動清零。
SPITBF:SPI 發(fā)送緩沖區(qū)滿狀態(tài)位(1)(full)
1 = 發(fā)送尚未開始, SPIxTXB 為滿
0 = 發(fā)送緩沖區(qū)未滿
標準緩沖模式:
當內(nèi)核通過寫SPIxBUF 存儲單元裝入SPIxTXB 時,該位由硬件自動置1。
當SPI 模塊將數(shù)據(jù)從SPIxTXB 傳輸?shù)絊PIxSR 時,該位由硬件自動清零。
增強型緩沖模式:
當FIFO 中沒有可用空間時置1。 CKE:SPI 時鐘邊沿選擇位(edge)
1 = 串行輸出數(shù)據(jù)在時鐘從工作狀態(tài)轉(zhuǎn)變?yōu)榭臻e狀態(tài)時變化(見CKP 位)
0 = 串行輸出數(shù)據(jù)在時鐘從空閑狀態(tài)轉(zhuǎn)變?yōu)楣ぷ鳡顟B(tài)時變化(見CKP 位)
CKP:時鐘極性選擇位(polarity)
1 = 空閑狀態(tài)時時鐘信號為高電平;工作狀態(tài)時為低電平
0 = 空閑狀態(tài)時時鐘信號為低電平;工作狀態(tài)時為高電平 
當僅當移位寄存器SPIXSR有待發(fā)送數(shù)據(jù)時,產(chǎn)生時鐘脈沖,由CKP決定時鐘空閑極性,由
CKE決定數(shù)據(jù)發(fā)送的時鐘沿。
例如8位數(shù)據(jù)模式,產(chǎn)生8個時鐘脈沖,每個時鐘脈沖發(fā)送一位數(shù)據(jù),實現(xiàn)同步發(fā)送數(shù)據(jù)。傳輸完一條數(shù)據(jù)后產(chǎn)生中斷SPIxRXIF(在SPIxBUF 接收緩沖區(qū)中匯集新數(shù)據(jù)時,將會發(fā)生該事件。) 1 主模式工作
要將SPI 模塊設(shè)置為主模式工作,請執(zhí)行以下步驟:
1. 禁止相應(yīng)IECx 寄存器中的SPI 中斷。 mSPI1TXIntEnable(0);//發(fā)送完成中斷
2. 通過清零ON 位停止并復(fù)位SPI 模塊。 SPI1CON=0; //清零15位
3. 清除接收緩沖區(qū)。 rData=SPI1BUF; //讀取SPI緩沖區(qū)數(shù)據(jù)后清零
4. 如果使用標準緩沖模式,則將ENHBUF 位(SPIxCON<16>)清零,如果使用增強型緩沖
模式,則將它置1。 SPI1CONCLR=0X10000;
5. 如果不希望使用SPI 中斷,則跳過此步驟并繼續(xù)步驟5。否則,需要執(zhí)行以下附加步驟:
a) 清零相應(yīng)IFSx 寄存器中的SPIx 中斷標志/ 事件。
b) 在相應(yīng)的IPCx 寄存器中寫入SPIx 中斷優(yōu)先級位和子優(yōu)先級位。
c) 將相應(yīng)IECx 寄存器中的SPIx 中斷允許位置1。
6. 寫入波特率發(fā)生器寄存器SPIxBRG。
7. 清零SPIROV 位(SPIxSTAT<6>)。
8. 將所需的設(shè)置寫入SPIxCON 寄存器,且MSTEN (SPIxCON<5>) = 1。
9. 通過將ON 位(SPIxCON<15>)置1 使能SPI 工作。
10. 將待發(fā)送數(shù)據(jù)寫入SPIxBUF 寄存器。發(fā)送(和接收)在數(shù)據(jù)寫入SPIxBUF 寄存器時立即
開始。 一. 配置引腳映射(由實際所需引腳情況決定)
PPSOutput(2, RPB8, SDO2); 或RPB8Rbits.RPB8R=0B0100;
PPSInput(2,SDI2,RPB13); 或 SDI2bits.SDI2=0B0011;
二. 初始化SPI
用庫函數(shù)SpiChnOpen(SpiChannel chn, SpiOpenFlags oFlags, unsigned int srcClkDiv);
SPIChannel 通道1、2即SPI1/SPI2,
SpiOpenFlags開啟的配置(見庫函數(shù)SPI.h) 附一
例如SpiOpenFlags oFlags = SPI_OPEN_MSTEN | SPI_OPEN_CKP_HIGH | SPI_OPEN_MODE8 | SPI_OPEN_ON;
主模式,時鐘空閑時高電位,8位數(shù)據(jù)模式,開啟SPI。其他默認0
srcClkDi 波特對外設(shè)時鐘的分頻,從而決定發(fā)送數(shù)據(jù)時鐘脈沖速度
FSCK=FPB/(2*(SPIxBRG+1)) BRG為9位寄存器(0—511) FSCK(FPB/2—FPB/1024) 2 從模式工作
要將SPI 模塊設(shè)置為從工作模式,請執(zhí)行以下步驟:
1. 如果使用中斷,禁止相應(yīng)IECx 寄存器中的SPI 中斷。
2. 通過清零ON 位,停止并復(fù)位SPI 模塊。
3. 清除接收緩沖區(qū)。
4. 如果使用標準緩沖模式,則將ENHBUF 位(SPIxCON<16>)清零,如果使用增強型緩沖
模式,則將它置1。
5. 如果要使用中斷,則需要執(zhí)行以下附加步驟:
a) 清零相應(yīng)IFSx 寄存器中的SPIx 中斷標志/ 事件。
b) 在相應(yīng)的IPCx 寄存器中寫入SPIx 中斷優(yōu)先級位和子優(yōu)先級位。
c) 將相應(yīng)IECx 寄存器中的SPIx 中斷允許位置1。
6. 清零SPIROV 位(SPIxSTAT<6>)。
7. 將所需的設(shè)置寫入SPIxCON 寄存器,且MSTEN (SPIxCON<5>) = 0。
8. 通過將ON 位(SPIxCON<15>)置1 使能SPI 工作。
9. 發(fā)送(及接收)會在主器件提供串行時鐘時立即開始。
在從模式下,當SCKx引腳上出現(xiàn)外部時鐘脈沖時開始發(fā)送和接收數(shù)據(jù)。CKP位(SPIxCON<6>)
和CKE 位(SPIxCON<8>)決定數(shù)據(jù)在時鐘的哪個邊沿發(fā)送。
一. 配置引腳映射(由實際所需引腳情況決定)
PPSOutput(2, RPB8, SDO2); 或RPB8Rbits.RPB8R=0B0100;
PPSInput(2,SDI2,RPB13); 或 SDI2bits.SDI2=0B0011;
二. 初始化SPI
用庫函數(shù)SpiChnOpen(SpiChannel chn, SpiOpenFlags oFlags, unsigned int srcClkDiv);
SPIChannel 通道1、2即SPI1/SPI2,
SpiOpenFlags開啟的配置(見庫函數(shù)SPI.h)
例如
SpiOpenFlags oFlags =
SPI_OPEN_SLVEN | SPI_OPEN_SSEN | SPI_OPEN_CKP_HIGH | SPI_OPEN_MODE8 | SPI_OPEN_ON;
從模式,從選擇使能SSx 引腳用于從模式,時鐘空閑時高電位,8位數(shù)據(jù)模式,開啟SPI。其他默認0
srcClkDi 波特對外設(shè)時鐘的分頻,從而決定發(fā)送數(shù)據(jù)時鐘脈沖速度
FSCK=FPB/(2*(SPIxBRG+1)) BRG為9位寄存器(0—511) FSCK(FPB/2—FPB/1024) 從模式下提供了以下附加特性:
?? 從選擇同步
SSx 引腳允許同步從模式。如果SSEN 位(SPIxCON<7>)置1,則僅當SSx 引腳被驅(qū)動
為低電平時,才能使能從模式下的發(fā)送和接收。要使SSx 引腳用作輸入,就不能驅(qū)動端口輸
出或其他外設(shè)輸出。如果SSEN 位置1 且SSx 引腳被驅(qū)動為高電平, SDOx 引腳將不再被
驅(qū)動并且將變?yōu)槿龖B(tài),即使模塊在發(fā)送過程中也是如此。下次SSx 引腳被驅(qū)動為低電平時,
將使用SPIxTXB 寄存器中保存的數(shù)據(jù)重新嘗試進行被中止的發(fā)送。如果SSEN 位未置1,則
SSx 引腳不影響從模式下模塊的工作。

?? SPITBE 狀態(tài)標志的操作
SPITBE 位(SPIxSTAT<3>)的功能在從工作模式下有所不同。以下介紹了各種從工作模式
設(shè)置下的SPITBE 功能:
- 如果SSEN (SPIxCON<7>)清零,當用戶代碼將數(shù)據(jù)裝入SPIxBUF 時, SPITBE 清
零。它在模塊將SPIxTXB 中的數(shù)據(jù)傳輸?shù)絊PIxSR 時置1。這與主模式下SPITBE 位的
功能類似。
- 如果SSEN 置1,當用戶代碼將數(shù)據(jù)裝入SPIxBUF 時,SPITBE 清零。但是,它只有在
SPIx 模塊完成數(shù)據(jù)發(fā)送時才被置1。當SSx 引腳變?yōu)楦唠娖綍r,發(fā)送將被中止,但是可
能在稍后重新嘗試發(fā)送。因此,每個數(shù)據(jù)字都保存在SPIxTXB 中,直到所有位都被發(fā)
送到接收器中。
其他模式:音頻解碼模式,幀模式詳見數(shù)據(jù)手冊 中斷
SPI 模塊能夠產(chǎn)生一些中斷,以反映在數(shù)據(jù)通信期間發(fā)生的事件。它可以產(chǎn)生以下類型的中斷:
?? 接收數(shù)據(jù)可用中斷通過SPI1RXIF 和SPI2RXIF 指示。在SPIxBUF 接收緩沖區(qū)中匯集新數(shù)據(jù)
時,將會發(fā)生該事件。
?? 發(fā)送緩沖區(qū)為空,中斷通過SPI1TXIF 和SPI2TXIF 指示。在SPIxBUF 發(fā)送緩沖區(qū)中有可用空
間,可以寫入新數(shù)據(jù)時,將會發(fā)生該事件。
?? 錯誤中斷通過SPI1EIF 和SPI2EIF 指示。 當SPIxBUF 接收緩沖區(qū)存在溢出條件(即,匯集
了新的接收數(shù)據(jù),但前一個數(shù)據(jù)尚未被讀取)、當發(fā)送緩沖區(qū)數(shù)據(jù)不足或發(fā)生FRMERR 事
件時,將會發(fā)生該事件。
bit 3-2 STXISEL<1:0>:SPI 發(fā)送緩沖區(qū)為空的中斷模式位(1,3)
11 = SPIxTXIF 在緩沖區(qū)未滿(具有一個或多個空元素)時置1
10 = SPIxTXIF 在緩沖區(qū)有一半或更多元素為空時置1
01 = SPIxTXIF 在緩沖區(qū)全空時置1
00 = SPIxTXIF 在最后一個傳輸數(shù)據(jù)移出SPISR 并且發(fā)送操作完成時置1
bit 1-0 RTXISEL<1:0>:SPI 接收緩沖區(qū)為滿的中斷模式位(1,3)
11 = SPIxRXIF 在緩沖區(qū)全滿時置1
10 = SPIxRXIF 在緩沖區(qū)有一半或更多元素不為空時置1
01 = SPIxRXIF 在緩沖區(qū)不為空時置1
00 = SPIxRXIF 在接收緩沖區(qū)中的最后一個字被讀取(即,緩沖區(qū)為空)時置1
例1 點亮數(shù)碼管 #include
#pragma config FPLLIDIV = DIV_2 // PLL Input Divider (2x Divider)
#pragma config FPLLMUL = MUL_24 // PLL Multiplier (24x Multiplier)
#pragma config FPLLODIV = DIV_2 // System PLL Output Clock Divider (PLL Divide by 2)
#pragma config FNOSC = FRCPLL // Oscillator Selection Bits (Fast RC Osc with PLL)
#pragma config JTAGEN = OFF // JTAG Enable (JTAG Disabled)
#pragma config FWDTEN = OFF // Watchdog Timer Enable (WDT Disabled (SWDTEN Bit Controls))
char Led[]={0x42, 0xf3, 0x86, 0xa2, 0x33, 0x2a, 0x0a, 0xf2, 0x02, 0x22, 0x40, 0xf1, 0x84, 0xa0, 0x31, 0x28, 0x08, 0xf0, 0x00, 0x20, 0x1e, 0x0e, 0x0f, 0xbf, 0x23, 0x9b, 0x8b};
//led字庫
void spiout(char image[],int len)
{
int i;
PORTClearBits(IOPORT_B, BIT_9);
for (i = 0; i < len; i++)
{
SpiChnPutC(2, image[ i]);
}
for(i=0;i<60;i++); //等待數(shù)據(jù)存儲成功
PORTSetBits(IOPORT_B, BIT_9); //鎖存數(shù)據(jù)顯示
}
int main()
{
PPSOutput(2, RPB8, SDO2);
//輸出針腳組2中,查表將針腳RPB8,作為數(shù)據(jù)輸出2口SDO2.實際連線也是如此
SpiOpenFlags oFlags = SPI_OPEN_MSTEN | SPI_OPEN_CKP_HIGH | SPI_OPEN_MODE8 | SPI_OPEN_ON;//作為主機,時鐘脈沖空閑時高電位,8位數(shù)據(jù)模式,SPI使能
SpiChnOpen(2, oFlags, 6);//打開通道2即SDO2,配置SPI,分頻fpbDiv(2~1024).波特率BR=Fpb/fpbDiv
PORTSetPinsDigitalOut(IOPORT_B, BIT_9);//外部移位寄存器數(shù)據(jù)鎖存,1鎖存,0開放
// SPI2CONCLR=(1<<15); SPI2CONCLR=0X8000; 多種操作
spiout(Led,4);
}
數(shù)碼管說明
所用芯片74HC595內(nèi)部有8位移位寄存器和一個存儲器,移位寄存器和存儲寄存器具有獨立的時鐘信號,數(shù)據(jù)在移位寄存器時鐘信號SHCP的上升沿輸入,在存儲寄存器時鐘信號STCP的上升沿進入到存儲寄存器中去,移位寄存器有一個串行移位輸入DS、一個串行輸出Q7’和一個異步的低電平復(fù)位MR,由于PIC32MX的輸入/輸出端口的輸出高電平為電壓3.3V,不能直接驅(qū)動5V供電的芯片74HC595,采用了的二極管與上拉電阻構(gòu)成的電平轉(zhuǎn)換匹配電路,電路簡單可靠成本低。
當SDO腳接收到PIC32MX的SPI輸出的一個低電平信號時,二極管導(dǎo)通,此時OUT1為一個低電平信號;當SDO腳接收到一個高電平信號時,二極管的OUT1端經(jīng)過上拉電阻連接到5V,以輸出高于4V以上的高電平信號,從而實現(xiàn)電平轉(zhuǎn)換的匹配功能。

當需要使用多個七段數(shù)碼管顯示時,可進行如下處理:各個74HC595共用SHCP與STCP時鐘信號,前一級74HC595的Q7’依次接到下一級74HC595的DS。 
當數(shù)據(jù)全部移入所有74HC595的移位寄存器時,所有74HC595的移位寄存器都已經(jīng)更新后,利用SLCK信號將數(shù)據(jù)全部移入鎖存到存儲寄存器,從而實現(xiàn)LED顯示信號的鎖存與顯示。 附一 typedef enum
{
// master opening mode 主
SPI_OPEN_MSTEN = _SPIxCON_MASK_(MSTEN_MASK), // set the Master mode
SPI_OPEN_SMP_END = _SPIxCON_MASK_(SMP_MASK), // Master Sample Phase for the input bit at the end of the data out time. Otherwise data is sampled in the middle.
SPI_OPEN_MSSEN = _SPIxCON_MASK_(MSSEN_MASK), // enable the driving of the Slave Select (SS) output pin by the Master
SPI_OPEN_MSSEN_HIGH = _SPIxCON_MASK_(FRMPOL_MASK), // Master driven SS output active high. Otherwise low. // slave opening mode 從
SPI_OPEN_SLVEN = 0, // set the Slave mode
SPI_OPEN_SSEN = _SPIxCON_MASK_(SSEN_MASK), // enable the SS input pin. SPI_OPEN_MCLKSEL = _SPIxCON_MASK_(MCLKSEL_MASK),
// clocking opening mode 時鐘
SPI_OPEN_CKP_HIGH = _SPIxCON_MASK_(CKP_MASK), // set the clock polarity to (idle-high, active-low). Otherwise is (idle-low, active-high).
SPI_OPEN_CKE_REV = _SPIxCON_MASK_(CKE_MASK), // set the Clock Edge reversed: transmit from active to idle. Otherwise transmit when clock goes from idle to active // data characters opening mode 數(shù)據(jù)
SPI_OPEN_MODE8 = 0, // set 8 bits/char
SPI_OPEN_MODE16 = _SPIxCON_MASK_(MODE16_MASK), // set 16 bits/char
SPI_OPEN_MODE32 = _SPIxCON_MASK_(MODE32_MASK), // set 32 bits/char // framed mode opening mode 幀高級
SPI_OPEN_FRMEN = _SPIxCON_MASK_(FRMEN_MASK), // Enable the Framed SPI support. Otherwise the Framed SPI is disabled.
SPI_OPEN_FSP_IN = _SPIxCON_MASK_(FRMSYNC_MASK), // Frame Sync Pulse (FSP) direction set to input (Frame Slave).
// Otherwise the FSP is output and the SPI channel operates as a Frame Master.
SPI_OPEN_FSP_HIGH = _SPIxCON_MASK_(FRMPOL_MASK), // FSP polarity set active high. Otherwise the FSP is active low.
SPI_OPEN_FSP_CLK1 = _SPIxCON_MASK_(SPIFE_MASK), // Set the FSP to coincide with the 1st bit clock.
// Otherwise the FSP precedes the 1st bit clock
SPI_OPEN_FSP_WIDE = _SPIxCON_MASK_(FRMSYPW_MASK), // set the FSP one character wide. Otherwise the FSP is one clock wide. SPI_OPEN_FRM_CNT1 = (0 << _SPIxCON_MASK_(FRMCNT_POSITION)), // set the number of characters per frame (Frame Counter) to 1 (default)
SPI_OPEN_FRM_CNT2 = (1 << _SPIxCON_MASK_(FRMCNT_POSITION)), // set the Frame Counter to 2
SPI_OPEN_FRM_CNT4 = (2 << _SPIxCON_MASK_(FRMCNT_POSITION)), // set the Frame Counter to 4
SPI_OPEN_FRM_CNT8 = (3 << _SPIxCON_MASK_(FRMCNT_POSITION)), // set the Frame Counter to 8
SPI_OPEN_FRM_CNT16 = (4 << _SPIxCON_MASK_(FRMCNT_POSITION)), // set the Frame Counter to 16
SPI_OPEN_FRM_CNT32 = (5 << _SPIxCON_MASK_(FRMCNT_POSITION)), // set the Frame Counter to 32 // enhanced buffer (FIFO) opening mode 增強型緩存及中斷模式
SPI_OPEN_ENHBUF = _SPIxCON_MASK_(ENHBUF_MASK), // enable the enhanced buffer mode SPI_OPEN_TBE_NOT_FULL = (3 << _SPIxCON_MASK_(STXISEL_POSITION)), // Tx Buffer event issued when Tx buffer not full (at least one slot empty)
SPI_OPEN_TBE_HALF_EMPTY = (2 << _SPIxCON_MASK_(STXISEL_POSITION)), // Tx Buffer event issued when Tx buffer >= 1/2 empty
SPI_OPEN_TBE_EMPTY = (1 << _SPIxCON_MASK_(STXISEL_POSITION)), // Tx Buffer event issued when Tx buffer completely empty
SPI_OPEN_TBE_SR_EMPTY = (0 << _SPIxCON_MASK_(STXISEL_POSITION)), // Tx Buffer event issued when the last character is shifted out of the internal Shift Register
// and the transmit is complete SPI_OPEN_RBF_FULL = (3 << _SPIxCON_MASK_(SRXISEL_POSITION)), // Rx Buffer event issued when RX buffer is full
SPI_OPEN_RBF_HALF_FULL = (2 << _SPIxCON_MASK_(SRXISEL_POSITION)), // Rx Buffer event issued when RX buffer is >= 1/2 full
SPI_OPEN_RBF_NOT_EMPTY = (1 << _SPIxCON_MASK_(SRXISEL_POSITION)), // Rx Buffer event issued when RX buffer is not empty
SPI_OPEN_RBF_EMPTY = (0 << _SPIxCON_MASK_(SRXISEL_POSITION)), // Rx Buffer event issued when RX buffer is empty (the last character in the buffer is read). // general opening mode 常用
SPI_OPEN_DISSDO = _SPIxCON_MASK_(DISSDO_MASK), // disable the usage of the SDO pin by the SPI
SPI_OPEN_DISSDI = _SPIxCON_MASK_(DISSDI_MASK), // disable the usage of the SDI pin by the SPI
SPI_OPEN_SIDL = _SPIxCON_MASK_(SIDL_MASK ), // enable the Halt in the CPU Idle mode. Otherwise the SPI will be still active when the CPU is in Idle mode.
SPI_OPEN_ON = _SPIxCON_MASK_(ON_MASK ), // turn ON the SPI (not used in SpiChnOpen)
}SpiOpenFlags; // open flags that can be used with SpiChnOpen. Defined in the processor header file. 轉(zhuǎn)載請注明出處謝謝 |