国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品
電子工程網
標題:
如何實現 i.MX8MPM核SPI間的通訊
[打印本頁]
作者:
繁花之語
時間:
2023-4-11 13:36
標題:
如何實現 i.MX8MPM核SPI間的通訊
本文小編將從應用角度為大家講解飛凌嵌入式OKMX8MP-C開發板的M核SPI間通訊的實現方式。
01SPI主模式
1. SPI初始化
SPI初始化主要包括總線時鐘、管腳和相應寄存器的初始化。具體如下:
(1)SPI總線時鐘:現將SPI總線倍頻到800MHz,再10分頻到80MHz。
[url=]復制[/url]
CLOCK_SetRootMux(kCLOCK_RootEcspi2, kCLOCK_EcspiRootmuxSysPll1);
//
SPI2總線時鐘使用PLL1-
800
MHz CLOCK_SetRootDivider(kCLOCK_RootEcspi2,
2
U,
5
U);
//
分頻因子為
2
*
5
=
10
,設置SPI2總線時鐘為
80
MHz
(2)管腳配置:選擇SPI2的四個管腳。
[url=]復制[/url]
IOMUXC_SetPinMux(IOMUXC_ECSPI2_MISO_ECSPI2_MISO, 0U);
//
SPI2-MISO IOMUXC_SetPinMux(IOMUXC_ECSPI2_MOSI_ECSPI2_MOSI, 0U);
//
SPI2-MOSI IOMUXC_SetPinMux(IOMUXC_ECSPI2_SCLK_ECSPI2_SCLK, 0U);
//
SPI2-SCLK IOMUXC_SetPinMux(IOMUXC_ECSPI2_SS0_ECSPI2_SS
0
, 0U);
//
SPI2-SSO
(3)SPI速率:設置速率為500K。
[url=]復制[/url]
#define TRANSFER_BAUDRATE 500000U // 速率 500K
(4)數據長度選擇:8bit。
[url=]復制[/url]
config->burstLength =
8
;
// 數據長度 8bit
(5)四種模式選擇:CPOL和CPHA的四種組合即為SPI的四種模式。
[url=]復制[/url]
config->clockInactiveState = kECSPI_ClockInactiveStateLow;
//
時鐘
SCL:
活動時低電平,空閑時高電平 config->dataLineInactiveState = kECSPI_DataLineInactiveStateLow;
//
數據MOSI&
MISO:
活動時低電平,空閑時高電平 config->chipSlectActiveState = kECSPI_ChipSelectActiveStateLow;
//
片選
SS:
低電平選中,高電平無效 config->polarity = kECSPI_PolarityActiveHigh;
//
時鐘信號極性,即CPOL為
0
的話 SCLK高電平有效(空閑的時候為低電平),為
1
的話SCLK低電平有效(空閑的時候為高電平)。 config->phase = kECSPI_ClockPhaseFirstEdge;
//
時鐘相位,即CPHA為
0
的話串行時鐘的第一個跳變沿(上升沿或下降沿)采集數據,為
1
的話串行時鐘的第二個跳變沿(上升沿或下降沿)采集數據。
(6)主模式選擇:設置SPI為主模式。
[url=]復制[/url]
config->channelConfig.channelMode = kECSPI_Master;
// 主模式
(7)通道選擇:一個 SPI 有四個硬件片選信號,每個片選信號是一個硬件通道,本程序選擇通道0。
[url=]復制[/url]
config->channel = kECSPI_Channel0;
// 通道0
(8)關閉自回環:如果開啟了自回環,那么SPI數據會在芯片內回環,不會到外部管腳,在程序調試時可以排除外部端子的干擾,但真實應用時,需要關閉自回環,從外部管腳收發數據。
[url=]復制[/url]
Config->enableLoopBack =
false
;
// 不回環,使用外部管腳
2. SPI收發流程
我們分別將兩塊OKMX8MP-C開發板命名為開發板1和開發板2,并且將開發板1的SPI接口采用主模式,使能收發中斷;將開發板2的SPI接口采用從模式,使能收發中斷。
SPI主發送64字節數據,SPI從接收后,將數據回傳。SPI主接收回傳信息后,比對接收和發送的數據是否一致,輸出比對結果。如一致,本次傳輸結束,等待輸入任何按鍵啟動下一次傳輸。
(1)SPI發送數據:EXAMPLE_ECSPI_MASTER_BASEADDR 表示為SPI2,g_m_handle為SPI實例,包含了發送接收中斷及其回調函數,masterXfer為要發送的64字節數據。
[url=]復制[/url]
ECSPI_MasterTransferNonBlocking(EXAMPLE_ECSPI_MASTER_BASEADDR, &g_m_handle, &masterXfer);
//主模式中斷方式發送數據
(2)SPI接收數據:SPI總線的發送和接收都是主模式控制的,因此接收函數的過程和發送是一致的。
(3)接收和發送數據對比:
[url=]復制[/url]
"#000000"
>
for
(i =
0
U; i < TRANSFER_SIZE; i++) {
if
(masterTxData<
/font>
!= masterRxData
font>
) { errorCount++; } }
02SPI從模式
1. SPI初始化
SPI從模式初始化與主模式要保持一致,除了將工作模式設為從模式,其他設置均一樣。主從模式選擇:設置SPI為從模式。
[url=]復制[/url]
config->channelConfig.channelMode = kECSPI_Slave;
//從模式
2. SPI收發流程
開發板2的SPI接口采用從模式,使能收發中斷。
SPI從進入等待接收狀態,在片選有效后,通過接收中斷獲取數據,并回傳信息,再次進入接收狀態。
(1)SPI接收數據:
[url=]復制[/url]
EXAMPLE_ECSPI_SLAVE_BASEADDR表示為SPI2,g_m_handle為SPI實例,包含了發送接收中斷及其回調函數,slaveXfer存儲接收的數據。
ECSPI_SlaveTransferNonBlocking(EXAMPLE_ECSPI_SLAVE_BASEADDR, &g_s_handle, &slaveXfer); //從模式中斷方式接收數據
(2)SPI發送數據:SPI總線的發送和接收都是主模式控制的,因此接收函數的過程和發送是一致的。
03A核修改
A核設備樹中若保留SPI2,內核解析設備樹,在/dev下生成設備文件spidev1.0。這樣待M核運行后,A核將重新對SPI2初始化,造成M核SPI功能異常,因此需要去除A核對SPI的控制。
1. 修改設備樹
(1)在設備樹OK8MP-C.dts中,刪除SPI2設備節點相關信息。
[url=]復制[/url]
&ecspi2 {
#address-cells = <1>; #size-cells = <0>; fsl,spi-num-chipselects = <1>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_ecspi2 &pinctrl_ecspi2_cs>; cs-gpios = <&gpio5 13 GPIO_ACTIVE_LOW>; status = "okay"; spidev1: spi
@0
{ reg = <0>; compatible = "rohm,dh2228fv"; spi-max-frequency = <500000>; }; }; pinctrl_ecspi2: ecspi2grp { fsl,pins = < MX8MP_IOMUXC_ECSPI2_SCLK__ECSPI2_SCLK 0x82 MX8MP_IOMUXC_ECSPI2_MOSI__ECSPI2_MOSI 0x82 MX8MP_IOMUXC_ECSPI2_MISO__ECSPI2_MISO 0x82 >; }; pinctrl_ecspi2_cs: ecspi2cs { fsl,pins = < MX8MP_IOMUXC_ECSPI2_SS0__GPIO5_IO13 0x40000 >; };
(2)編譯生成新的內核鏡像Image及設備樹OK8MP-C.dtb。
(3)將生成的OK8MP-C.dtb和Image拷貝至開發板/run/media/mmcblk2p1/目錄下,輸入sync命令,重啟開發板。
(4)輸ls /dev查看發現沒有SPI2設備文件spidev1.0。
04程序驗證
1. 硬件連接
使用杜邦線將兩塊OKMX8MP-C開發板的SPI一一對應連接,線序如下:
開發板1--SPI主模式
開發板2--SPI從模式
管腳名稱
開發板位置
管腳名稱
開發板位置
MISO
P40-10
MISO
P40-10
MOSI
P40-8
MOSI
P40-8
SCK
P40-1
SCK
P40-1
SS0
P40-3
SS0
P40-3
GND
P40-4/P40-7
GND
P40-4/P40-7
2. M核程序
修改uboot環境變量設置M核自啟動,同時將M核程序forlinx_m7_tcm_firmware.bin
放到/run/media/mmcblk2p1/目錄下。注意,SPI主模式程序須放入開發板1,SPI從模式程序須放入開發板2
3. 實際測試
(1)開發板2先上電,M核程序啟動,完成SPI初始化后,進入接收等待狀態;
(2)開發板1后上電,M核程序啟動,完成SPI初始化后,主動發送64字節數據;
(3)開發板2的SPI接收數據,通過串口打印接收的數據,并將接收的數據再次發送;
[
(4)開發板1的SPI接收到回傳信息,通過串口打印接收的數據。和發送數據比對,輸出結果。
(5)此時在開發板1調試串口輸入任意鍵,即可開啟新一輪的SPI發送和接收流程。
END
歡迎光臨 電子工程網 (http://www.qingdxww.cn/)
Powered by Discuz! X3.4
主站蜘蛛池模板:
免费日本黄色
|
狠狠色丁香婷婷综合视频
|
一级片免费在线观看
|
亚洲区欧美区
|
成年看片免费高清观看
|
欧美日本在线视频
|
91亚瑟视频
|
日韩在线视频一区
|
午夜拍拍福利视频蜜桃视频
|
久久久精品免费视频
|
亚洲综合色婷婷在线观看
|
午夜免费看片
|
尹人香蕉网
|
中文字幕中国女同互慰视频
|
21天理论泰剧在线观看全集高清
|
亚洲国产天堂久久综合图区
|
激情视频导航
|
国产三级精品三级在专区
|
羞羞午夜
|
国内一级一级毛片a免费
|
一级毛片成人免费看a
|
午夜成本人动漫在线观看
|
日韩高清一区二区三区五区七区
|
日韩欧美在线一级一中文字暮
|
国产高清一区二区三区视频
|
国产午夜视频在线观看
|
20款禁用软件app下载
|
91麻豆精品国产高清在线
|
一区二区三区高清视频在线观看
|
久热亚洲
|
欧美有码视频
|
日本私人网站在线观看
|
欧美黄色影视
|
成人欧美精品一区二区不卡
|
香蕉草莓丝瓜茄子番茄绿巨人
|
女人与禽交视频免费看
|
免费视频一区二区性色
|
fc2ppv成年免费视频观看
|
日本中文字幕在线播放
|
青青青国产在线观看
|
国产在线视频一区二区三区
|