久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5773|回復: 1
收起左側(cè)

【Kinetis經(jīng)驗分享】KL系列SPI主從通信之單線雙向通信

[復制鏈接]
ID:137190 發(fā)表于 2016-9-8 01:34 | 顯示全部樓層 |閱讀模式
本文主要講解kinetis L系列中SPI通信的單線雙向通信功能,并使用KL25為例講解如何配置,代碼實現(xiàn),硬件連接以及實驗結(jié)果。所謂單線雙向通信,并不是指整個SPI通信只使用一根線,而是不同于通常的SPI通信四根線,使用SCK(時鐘信號),PCS(片選信號),MOSI(數(shù)據(jù)信號主出從入),MISO(數(shù)據(jù)信號主入從出)。單線通信不使用兩根數(shù)據(jù)線,只使用一根數(shù)據(jù)線,對于主機MOMI;對于從機SISO。所以,這里的單線應該理解為單數(shù)據(jù)線。
0.png

                                                    圖 1 正常模式以及雙向模式
由上圖可以知道,單線模式是通過置位 SPI 控制寄存器 2 中的 SPC0 位 :SPIx_C2[SPC0] =1 實現(xiàn)。 此時,對于主機,不再同時使用 MOSI 以及 MISO 兩個引腳,這時 MOSI 充當了 MOMI 主機數(shù)據(jù)線;對于從機,同樣不再使用 MOSI 以及MISO 兩個引腳,這時 MISO 引腳充當了 SISO 從機數(shù)據(jù)線。要實現(xiàn) SPI 的單線雙向通信,只要把主機的 MOMI 以及 SISO 引腳相連,實現(xiàn)數(shù)據(jù)的通信,其余的 SCK 以及 PCS 信號和正常模式一樣。另外,如果要實現(xiàn)單線通信的輸出功能,需要通過置位 SPIx_C2[BIDIROE]位實現(xiàn),輸入則無需配置。同一時刻,對于主從機,只有一個輸入一個輸出,不可以同時配置為輸出,即把主從機的 SPIx_C2[BIDIROE]位都置上。

二,硬件連接
本文使用 FRDM-KL25 開發(fā)板的 SPI0 以及 SPI1 兩個 SPI 模塊實現(xiàn)相互的單線雙向通信。具體的硬件連接如下圖所示:
141212q2jgshgjgsdfdk2g.jpg.thumb.jpg
2 實驗硬件連接


三、代碼實現(xiàn)
1、端口配置
實現(xiàn) SPI0,SPI1 相關(guān)引腳的定義,以及模塊時鐘開啟,代碼如下:
  1.     void spi_port_init(void)
  2.     {
  3.     SIM_SCGC5 |= SIM_SCGC5_PORTA_MASK | SIM_SCGC5_PORTC_MASK | SIM_SCGC5_PORTE_MASK;
  4.     SIM_SCGC4 |= SIM_SCGC4_SPI0_MASK | SIM_SCGC4_SPI1_MASK;
  5.     PORTA_PCR16 &= ~PORT_PCR_MUX_MASK;
  6.     PORTA_PCR16 |= PORT_PCR_MUX(5)|PORT_PCR_DSE_MASK;                 //Use PTA16 as SPI0_MISO
  7.     PORTA_PCR17 &= ~PORT_PCR_MUX_MASK;
  8.     PORTA_PCR17 |= PORT_PCR_MUX(5)|PORT_PCR_DSE_MASK;                 //Use PTA17 as SPI0_MOSI
  9.     PORTC_PCR5 &= ~PORT_PCR_MUX_MASK;
  10.     PORTC_PCR5 |= PORT_PCR_MUX(2)|PORT_PCR_DSE_MASK;                  //Use PTC5 as SPI0_sck
  11.     PORTC_PCR4 &= ~PORT_PCR_MUX_MASK;
  12.     PORTC_PCR4 = PORT_PCR_MUX(2)|PORT_PCR_DSE_MASK;                   //Use PTC4 as SPI0_pcs
  13.     PORTE_PCR1 &= ~PORT_PCR_MUX_MASK;
  14.     PORTE_PCR1 |= PORT_PCR_MUX(2)|PORT_PCR_DSE_MASK;                  //Use PTE1 as SPI1_MOSI
  15.     PORTE_PCR3 &= ~PORT_PCR_MUX_MASK;
  16.     PORTE_PCR3 |= PORT_PCR_MUX(2)|PORT_PCR_DSE_MASK;                  //Use PTE3 as SPI1_MISO
  17.     PORTE_PCR2 &= ~PORT_PCR_MUX_MASK;
  18.     PORTE_PCR2 |= PORT_PCR_MUX(2)|PORT_PCR_DSE_MASK;                  //Use PTE2 as SPI1_SCK
  19.     PORTE_PCR4 &= ~PORT_PCR_MUX_MASK;
  20.     PORTE_PCR4 = PORT_PCR_MUX(2)|PORT_PCR_DSE_MASK;                   //Use PTE4 as SPI1_SS_b
  21.     }
復制代碼

2:模塊單線雙向配置
配置 SPI0 為主機,SPI1 為從機,兩個模塊均為單線雙向功能,初始配置為MOMI 引腳為主機輸出,SISO 引腳為從機輸入。模塊初始化代碼配置如下:
  1.     void spi_module_init(void)
  2.     {
  3.     // ================SPI0 init master ==============
  4.     SPI0_C1 &= ~SPI_C1_SPE_MASK ;
  5.     SPI0_C1 = SPI_C1_MSTR_MASK | SPI_C1_SSOE_MASK ;    //SPI0 主機
  6.     SPI0_C1 &= (~SPI_C1_CPHA_MASK) & (~SPI_C1_CPOL_MASK) & (~SPI_C1_SPIE_MASK) & (~SPI_C1_SPTIE_MASK);
  7.     SPI0_BR = (SPI_BR_SPPR(0x02) | SPI_BR_SPR(0x05)); // Set baud rate register 125Khz 波特率
  8.     SPI0_C2 |= SPI_C2_MODFEN_MASK | SPI_C2_BIDIROE_MASK | SPI_C2_SPC0_MASK ;    // 單線雙向模式,輸出
  9.     //==================SPI1 init slave==============
  10.     SPI1_C1 &= ~SPI_C1_SPE_MASK;
  11.     SPI1_C1 |= SPI_C1_SSOE_MASK;// 從機
  12.     SPI1_C1 &= (~SPI_C1_CPHA_MASK) & (~SPI_C1_CPOL_MASK) & (~SPI_C1_SPIE_MASK) & (~SPI_C1_SPTIE_MASK);
  13.     SPI1_C2 |= SPI_C2_MODFEN_MASK | SPI_C2_SPC0_MASK;
  14.     SPI1_C2 &= ~SPI_C2_BIDIROE_MASK; //從機單線輸入
  15.     //==================Enable SPI0 and SPI1============
  16.     SPI0_C1 |= SPI_C1_SPE_MASK ;    // Enable SPI module
  17.     SPI1_C1 |= SPI_C1_SPE_MASK;    /* Enable device */
  18.     }
復制代碼
3:主控程序
  1.     spi_port_init();   //相關(guān)引腳初始化
  2.     spi_module_init(); // SPI 模塊初始化
  3.     spi0_send8(0x0E);        //主機發(fā)送 0X0E
  4.     rd = spi0_get8();
  5.     rd1 = spi1_get8();        //從機接收
  6.     printf("SPI0_rd: %02x", rd&0xFF);  //打印結(jié)果
  7.     printf("SPI1_rd: %02x", rd1&0xFF);
  8.     spi0_send8(0x1E);       //主機發(fā)送 0X1E
  9.     rd = spi0_get8();
  10.     rd1 = spi1_get8();        //從機接收
  11.     printf("SPI0_rd: %02x", rd&0xFF);
  12.     printf("SPI1_rd: %02x", rd1&0xFF);
  13.     global_pass_count = 0;
  14.     //從機發(fā)送,主機接收
  15.     SPI1_C2 |= SPI_C2_BIDIROE_MASK;    //MISO is used in slave mode as I/O---output
  16.     //set MOSI input
  17.     SPI0_C2 &= ~SPI_C2_BIDIROE_MASK;  //MOSI is used in master mode as input
  18.     //從機發(fā)送從 1 開始遞加數(shù)據(jù)給主機,主機接收
  19.     while(1)
  20.     {
  21.     global_pass_count++;
  22.     while ((SPI1_S & SPI_S_SPTEF_MASK) == 0);
  23.     SPI1_D = global_pass_count;
  24.     rd=spi0_send_read(0xaa);
  25.     printf("SPI0_rd: %02x", rd&0xFF);
  26.     }
復制代碼

四,實驗結(jié)果
1,SPI 波形
波形見圖 3,其中 MOSI 即為 MOMI 以及 SISO 單數(shù)據(jù)線上面的波形。Clock 即為時鐘線,Enable 即為 PCS 片選信號線。從圖中可以看到,主從機之間的通信數(shù)據(jù)均在單數(shù)據(jù)線上。0X0E 及 0X1E 是 SPI0 作為主機發(fā)出的,后面的 0X01 開始的遞增數(shù)據(jù)均為 SPI1 作為從機發(fā)出的。
141906m287vo4j97jhv08j.jpg.thumb.jpg
圖 3 SPI 通信波形
2,通信數(shù)據(jù)打印信息
142414hxueyr2o0hqhehoq.jpg.thumb.jpg
圖 4 打印結(jié)果信息

從上圖中可以看到,SPI0 作為主機發(fā)出的 0X0E以及 0X1E 都能被 SPI1 從機接收到。 而 SPI1 作為從機發(fā)出的從 0X01 遞增的數(shù)據(jù)也均被 SPI0 作為主機接收到。

綜上,可以看到,SPI0 以及 SPI1 可以實現(xiàn)單線雙向功能的通信。


【經(jīng)驗分享】KL系列SPI主從通信之單線雙向通信.pdf

365.5 KB, 下載次數(shù): 6, 下載積分: 黑幣 -5

KL_SPI_bidirectional_doc.rar

816.25 KB, 下載次數(shù): 3, 下載積分: 黑幣 -5

回復

使用道具 舉報

ID:447246 發(fā)表于 2018-12-16 14:51 | 顯示全部樓層
支持一下
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品国产18久久久久久二百 | 中国黄色毛片视频 | 91精品国产91久久久久久最新 | 国产精品一区二区三区久久久 | 日本在线播放一区二区 | 羞羞视频在线观免费观看 | 欧洲一级毛片 | 99视频网 | 国产成在线观看免费视频 | 一区二区三区免费网站 | 黄色亚洲 | 色婷婷综合成人av | 亚洲1区| 国产成人高清成人av片在线看 | 亚洲不卡 | 久久机热 | 中文字幕 欧美 日韩 | 亚洲黄色视屏 | 亚洲一区二区三区视频 | 欧美日韩一区二区在线 | 91精品国产乱码麻豆白嫩 | 久草网址 | 波多野结衣在线观看一区二区三区 | 国产精品一区二区免费 | 午夜影院在线观看视频 | 日韩av在线一区二区 | 欧洲一区在线观看 | 韩国av网站在线观看 | 爱操av| 欧美一区二区三区在线观看 | 97精品超碰一区二区三区 | 一区二区日韩 | 欧美一级久久 | 国产精品日韩在线 | 97精品国产一区二区三区 | www亚洲免费国内精品 | 国产中文字幕网 | 天天干视频网 | 精品国产久 | 亚洲欧美一区二区三区情侣bbw | 欧美黑人激情 |