娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2024年10月28日(星期一)

正在發生

2019年10月28日 | SPI協議工作過程詳解文檔,內含實例代碼

發布者:GoldenDream 來源: 51hei關鍵字:SPI協議  工作過程  AVR 手機看文章 掃描二維碼
隨時隨地手機看文章

SPI:一種3線(有的沒有SS線(選擇主或從機模式))或4線的通信方式:
           MOSI:主機出從機進數據線
                 MISO:主機進從機從數據線
                 SCK: 時鐘線
                 SS:  主從模式選擇線
工作過程的理解:設置好相應的配置后就可以發送或接收數據,當放送或接收完成后就會是SPIF置位,此時如果開了中斷就會就入中斷服務程序。如果沒開中斷就可以通過查詢該標志位來做相應的事。進入中段服務程序后,或者讀(寫)SPDR寄存器都可以清零SPIF標志位。從而可以開始下一次的傳輸
相應的寄存器
1:SCPR:控制寄存器:SPI的大部分設置
2:SPSR:標志寄存器:(查看一些標志(主要是SPIF位)和設置SPI速度)
3:SPDR:數據寄存器
SS引腳的說明:(實質就是當配置為輸入時:是主機還是從機由輸入的電平來決定)
從機模式: 當 SPI 配置為從機時,從機選擇引腳 SS 總是為輸入。SS 為低將激活 SPI 接口,MISO
成為輸出 ( 用戶必須進行相應的端口配置 ) 引腳,其他引腳成為輸入引腳。當 SS 為高時
所有的引腳成為輸入, SPI 邏輯復位,不再接收數據。
SS引腳對于數據包/字節的同步非常有用,可以使從機的位計數器與主機的時鐘發生器
步。當SS 拉高時SPI從機立即復位接收和發送邏輯,并丟棄移位寄存器里不完整的數據。

主機模式:當 SPI 配置為主機時 (SPCR 的 MSTR置位 ),用戶可以決定 SS 引腳的方向。
若 SS 配置為輸出,則此引腳可以用作普通的 I/O 口而不影響 SPI 系統。典型應用是用來
驅動從機的 SS 引腳。


如果 SS 配置為輸入,必須保持為高以保證 SPI 的正常工作。若系統配置為主機,SS 為
輸入,但被外設拉低,則 SPI 系統會將此低電平解釋為有一個外部主機將自己選擇為從
機。為了防止總線沖突, SPI 系統將實現如下動作:
1. 清零 SPCR 的 MSTR 位,使 SPI 成為從機,從而 MOSI 和 SCK變為輸入。
2. SPSR 的 SPIF 置位。若 SPI 中斷和全局中斷開放,則中斷服務程序將得到執行。
因此,使用中斷方式處理 SPI 主機的數據傳輸,并且存在 SS 被拉低的可能性時,中斷服
務程序應該檢查 MSTR 是否為 "1”。若被清零,用戶必須將其置位,以重新使能 SPI 主機
模式。
管腳配置

一:SCPR:控制寄存器:(SPI的大部分設置都在該寄存器)

二SPSR:標志寄存器:(查看一些標志和設置SPI速度,主要是用到SPIF這個標志位,接收完成和發送完成都會置位這個標志,進入中斷服務程序或訪問SPDR寄存  器都可以清零這個標志)

三SPDR:數據寄存器:



應用步驟:

1先根據是主還是從設置端口的模式(輸入還是輸出)

主機:SS   MOSI   SCK 為出 MISO為入

從機:SS   MOSI   SCK 為入 MISO 為出

2配置相應的寄存器(就三個寄存器,注意用到中斷時要先開總中斷)

3用中斷或查詢法發送或接收數據

注意:主機或者從機都可以發送或接收。發送完之后就可以馬上發下一個數據了。接收也是只要接收完了也可以馬上接收下一個數據了

一:發送:(一般用查詢方式發送比較好:此時只要查詢發送完畢的標志位SPIF是否置位)

常用:while(!(SPSR & (1<查詢法:實質就是查詢SPSR的SPIF位是否置位,接收完和發送完都可以置位,(如果開了中斷的話就會進入相應的中斷)

例子:

  • 主機發送(查詢方式)(只要發送完畢了就可以繼續發送了)

//主機模式下發送1-255

#include  

#define uint unsigned int

#define uchar unsigned char

void spi_init(void)

{

    PORTB |= (1<    DDRB |= (1<    SPCR = 0x73; //SPI使能,低位首發,主機模式,時鐘模式00,上升沿采樣;時鐘速率Fosc/128

    SPSR = 0x00; //SPI2x=0

}

void SPI_send_data(char cData)

{

              PORTB &=~ (1<//              SPCR |= (1<              SPDR =cData;

              while(!(SPSR & (1<//              PORTB |= (1<

}


void Delay(uint z) //

{

   unsigned int i,j;

   for(i=z;i>0;i--)

    for(j=2000;j>0;j--);


}


int main(void)

{

              unsigned int i=0;

              spi_init();

              while(1)

              {

                            for(i=255;i>0;i--)

                            {

                                SPI_send_data(i);

                                          Delay(100);

                            }

              }

}



2從機接收(查詢方式)


#include

#include

#define uchar              unsigned char

#define uint              unsigned int

void port_init(void)

{

              PORTA = 0x00;

              DDRA  = 0xFF;

              PORTB = 0xFF;

}


void spi_init(void)

{

    DDRB = (1<<5) |(1<<7);

              DDRB&=~(1<<4)|(1<<6);

              SPCR = 0x63; //                            SPI允許。從機方式

              SPSR = 0x00; //                            SPI倍速.頻率為系統時鐘

}


void init_devices(void)

{

              port_init();

              spi_init();

}

//主函數

int main(void)

              init_devices();

     while(1)

              {             

                            while(!(SPSR & (1<                            PORTA=SPDR;//把接收到的數據賦給A口

                            _delay_loop_2(900);

             

              }

}



3從機中斷方式接收數據(注意:當進入中斷服務程序后SPIF會自動清零)

/*中斷方式接收數據*/

#include

#include

#define uchar              unsigned char

#define uint              unsigned int


//端口初始化

void port_init(void)

{

              PORTA = 0xFF;

              DDRA  = 0xFF;

}


void spi_init(void)

{

              PORTB |= (1<<4) | (1<<5) | (1<<6) | (1<<7); //

    DDRB |= (1<<5) | (1<<7) | (1<<4);     //Set MOSI, SCK AND SS as outputs 

    SPCR = 0xE3; //SPI中斷使能,SPI使能,低位首發,從機模式,時鐘模式00,上升沿采樣;時鐘速率Fosc/128

    SPSR = 0x00; //SPI2x=0

}


void init_devices(void)

{

              port_init();

              spi_init();

              sei();//開全局中斷

}


//主函;

int main(void)

{

    init_devices();

              while(1);

}

//SPI中斷函數

SIGNAL(SIG_SPI)

{


  PORTA=SPDR;


}

關鍵字:SPI協議  工作過程  AVR 引用地址:SPI協議工作過程詳解文檔,內含實例代碼

上一篇:AVR128單片機最小系統串口,外部中斷,跑馬燈,uCOS-II移植
下一篇:AVR128_uC/OS-II 移植代碼

推薦閱讀

據美國媒體報道,芬蘭電信設備制造商諾基亞周四公布了符合市場預期的季度業績,同時宣布將按照削減成本計劃在全球裁員。該公司稱,為在2020年底前每年削減7億歐元成本,將進行全球范圍的裁員。但該公司未透露裁員計劃的規模。? ? ? ? 在截止9月30日的季度里,諾基亞實現凈營收55億歐元(約合62.7億美元),分析師們原先的預期為54億歐元。非IFRS運...
日前,在由北京市人民政府、工業和信息化部、公安部、交通運輸部和中國科學技術協會聯合主辦的世界智能網聯汽車大會上,“芯創杯”2019高校未來汽車人機交互設計大賽華北賽區現場答辯順利舉行。在現場答辯會公開環節之后,經過初選脫穎而出的8支參賽團隊攜其作品分別參加了閉門的專家答辯。 來自權威第三方機構、整車廠、零部件廠商和解決方案提供商、賽普...
ISP1907模塊是時鐘頻率為2.4GHz的高頻收發器,基于Nordic Semiconductor的nRF52系統級芯片(SoC)。LL型款基于nRF52811,具有192 kB閃存和24 kB SRAM內存,并且具有13個可配置GPIO,包括三個ADC。HT型款基于nRF52833,具有充足的512 kB 閃存和128 kB SRAM內存,并且提供30個GPIO,其中8個計劃用作ADC。這款安全設備還包括用于OoB配對的NFC-A標簽和ARM...
  據網友反饋,小米官方在手機頁面內推出了小米 11 系列產品半年延保服務申請通道。其中顯示,鑒于小米 11 及其系列手機 (不包含小米 11 青春) 出現的 WIFI 問題,考慮用戶服務體驗,用戶可免費申請半年延長保修服務。本服務的保障期間內,若發生質量故障且無法正常使用 (不包含人為故意損壞、意外故障),你可以在本公司指定小米官方授權...

史海拾趣

問答坊 | AI 解惑

ZiLOG通用紅外遙控的設計考慮

ZiLOG通用紅外遙控的設計考慮…

查看全部問答∨

汽車常用知識問答(1-30)(zt)

1).SOHC于DOHC兩者有什么優劣點?  DOHC的設計是能使活瓣的角度更切合燃燒室的形狀,因此整體活瓣面積可增大,每個活瓣輕一點,慣性質量減少,進汽效率因而可提高.相反SOHC只有一枝凸輪軸,局限了活瓣的角度,基本惰性較高, ...…

查看全部問答∨

剛看了一篇電源完整性分析的文章,感觸很大,特來談談

其實說到底信號完整性主要還是取決于參考平面的穩定性,電源完整性的作用是為系統所有的信號線提供完整的回流路徑。但在技術高速發展以及生產成本的控制下,往往不能為所有的信號線提供理想而完整的回流路徑,這就是說,在高速電路中,不能夠簡單地 ...…

查看全部問答∨

半橋式變壓器開關電源的優缺點 開關電源原理與設計(連載42)

1-8-2-6.半橋式變壓器開關電源的優缺點 半橋式變壓器開關電源與推挽式變壓器開關電源一樣,由于兩個開關管輪流交替工作,相當于兩個開關電源同時輸出功率,其輸出功率約等于單一開關電源輸出功率的兩倍。因此,半橋式變壓器開關電源輸出功率很大 ...…

查看全部問答∨

usb線插入wince設備以后usb driver的啟動過程?

如題,哪位大俠能簡要介紹一下usb線插入wince設備以后,usb driver的運行過程?…

查看全部問答∨

我只更改了一些Catelog的組件,編譯通不過,請給幫忙看看這是咋了?

錯誤列表如下: Error        1        Catalog Id "Bsp:Samsung:SMDK6410" duplicated in files "D:\\WINCE600\\platform\\SMDK6410\\catalog\\smdk6410.pbcxml" and "D:\\WINCE600\\platform ...…

查看全部問答∨

flash保存注冊表問題求助

想用norflash做hive based,按照說的改好后運行 出現如下信息: Found pTOC signature. ROMHDR at Address 60000044h RomHdr.ulRAMStart=00FF0000h RomHdr.physfirst=29B00000h. Got EDBG_CMD_JUMPIMG Got EDBG_CMD_CONFIG, flags:0x00000000 ...…

查看全部問答∨

無師自通維修顯示器

一個網友自己維修顯示器的過程,發給大家分享一下 我有一臺雜牌 15 寸彩色顯示器,是同事淘汰給我的,原來的故障是點不亮(呵呵,好的別人就不會淘汰了),我在電腦市場花了 70 大元給修好了,配給我那臺老奔用,但是老覺得給**商宰了一刀 ...…

查看全部問答∨

計算LED顯示屏屏體面積及亮度的方案

replyreload += \',\' + 768251;Timson,如果您要查看本帖隱藏內容請回復…

查看全部問答∨

05.18【每日一問】:同步邏輯

還有3個小時就是18號了,我就提前發啦哈,大家不見怪,怕明早起來晚了,晚上還要調試。使用HDL設計一個同步時序的分頻器,三分頻(每3個clk),counter在分頻時鐘的驅動下加1,counter位寬為8位。模塊大家隨意寫,為了統一,我稍規定下信號,三個是 ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 广宗县| 城市| 定西市| 合作市| 南郑县| 昭觉县| 武鸣县| 高邮市| 银川市| 平阴县| 昌吉市| 吴江市| 北碚区| 延边| 简阳市| 九江县| 威信县| 土默特左旗| 故城县| 上虞市| 松潘县| 和平县| 镇安县| 泽州县| 桦川县| 肥城市| 永昌县| 达州市| 新巴尔虎右旗| 嘉峪关市| 合江县| 修文县| 泽库县| 江陵县| 衡东县| 云梦县| 云浮市| 长春市| 逊克县| 类乌齐县| 渭南市|