91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

AWorksLP 樣例詳解(MR6750)——雙核通信

ZLG致遠電子 ? 2023-09-27 08:26 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

AWorksLP 對外設進行了高度抽象化,為同一類外設提供了相同的接口,應用程序可以輕松跨平臺。本文以MR6750平臺為例,介紹AWorksLP 雙核通信的基本用法。

881d3c96-5ccc-11ee-9788-92fbcf53809c.jpg ?簡介

通信信箱MBX 有2 套寄存器訪問接口,接口A 和接口B。A 和B 接口都具有一套TX FIFO 寄存器、RX FIFO

寄存器、控制寄存器和狀態(tài)寄存器。用戶從A 接口的發(fā)送端TX 發(fā)送的數據,可以在B 接口的接收端RX 接收到。同理,A 接口的接收端RX 可以接收到B 接口發(fā)送端TX 發(fā)送的數據。

雙核燒錄的用法請參考《AWorksLP樣例詳解(MR6750)——雙核燒錄》

雙核調試的用法請參考《AWorksLP樣例詳解(MR6750)——雙核調試》


881d3c96-5ccc-11ee-9788-92fbcf53809c.jpg ?雙核通信

1. MBX信箱

{SDK}\demos\multi-core\openamp路徑下為openamp的例程。雙核通信需要使用信箱在gui上勾選對應的信箱接口,hart0和hart1需勾選同一個信箱的兩個不同接口。例如hart0勾選了mbx0a、則hart1需勾選mbx0b。

883b8e76-5ccc-11ee-9788-92fbcf53809c.png

圖1 mbx設備

2.OpenAMP

OpenMP是由OpenMP Architecture Review Board牽頭提出的,并已被廣泛接受,用于共享內存并行系統(tǒng)的多處理器程序設計的一套指導性編譯處理方案。

3.例程

#if CONFIG_AW_OPENAMP_MASTERaw_local int rx_callback (struct rpmsg_endpoint *ept, void *data, size_t len, uint32_t src, void *priv){ aw_kprintf("[Master receive]: %s\n", data); return 0;}#elseaw_local int rx_callback (struct rpmsg_endpoint *ept, void *data, size_t len, uint32_t src, void *priv){ char sendbuf[512];
aw_kprintf("[Slave receive]: %s\n", data); aw_snprintf(sendbuf, sizeof(sendbuf), "%s ACK", data); if (rpmsg_send(&__resmgr_ept, sendbuf, strlen(sendbuf) + 1) < 0) { ? ? ? ?aw_kprintf("[Slave send]: error!\n"); ? ?} ? ?return 0;}#endif

aw_local int __mail_box_notify(void *priv, uint32_t id){ uint32_t tmp;
#if CONFIG_AW_OPENAMP_MASTER /* master to remote */ if (id == VRING1_ID) { /* send msg */ tmp = EPT_SEND_MSG_FLAG; } else { /* remote to master */ /* send ack */ tmp = EPT_SEND_ACK_FLAG; }#else if (id == VRING1_ID) { /* send ack */ tmp = EPT_SEND_ACK_FLAG; } else { /* send msg */ tmp = EPT_SEND_MSG_FLAG; }#endif
aw_write(__g_mbx_fd, &tmp, 4); return 0;}

/* 處理其它設備發(fā)送過來的MBX */aw_local void __openamp_task(void *p_arg){
struct rpmsg_virtio_device *p_dev = (struct rpmsg_virtio_device *)p_arg;
aw_kprintf("Entry OpenAMP task!\n");
while(1) { uint32_t tmp;
aw_read(__g_mbx_fd, &tmp, 4);
/* * 默認Master VRING0是接收, VRING1是發(fā)送, 從機反之 */#if CONFIG_AW_OPENAMP_MASTER if (tmp == EPT_SEND_MSG_FLAG) {
/* 接收到來自從機的消息 */ rproc_virtio_notified(p_dev->vdev, VRING0_ID); } else {
/* 接收到來自從機的ACK */ rproc_virtio_notified(p_dev->vdev, VRING1_ID); }#else
if (tmp == EPT_SEND_MSG_FLAG) { rproc_virtio_notified(p_dev->vdev, VRING1_ID); } else { rproc_virtio_notified(p_dev->vdev, VRING0_ID); }#endif }}
void rpmsg_demo(){ int ret = 0;#if CONFIG_AW_OPENAMP_MASTER int i = 0; int RPMsgRole = 0;#else int RPMsgRole = 1;#endif
__g_mbx_fd = aw_open(CONFIG_MBX_CHOOSE, AW_O_RDWR, 0);
ret = aw_openamp_init(&rpmsg_dev, RPMsgRole, NULL, __mail_box_notify);
#if CONFIG_AW_OPENAMP_MASTER /* 啟動固件 */ ret = aw_openamp_remoteproc_init(&__aworks_rproc_ops); if (ret) { aw_kprintf("Start processor fail!\n"); }#endif
if (ret) { aw_kprintf("OpenAMP init error!\n"); while(1); }
aw_openamp_create_ept(&rpmsg_dev, &__resmgr_ept, "rpmsg-client-sample", 0xFFFFFFFF, rx_callback, NULL);
aw_openamp_ep_poll_task_start(&rpmsg_dev); aw_openamp_wait_ept_ready(&__resmgr_ept);
while(1) {
#if CONFIG_AW_OPENAMP_MASTER char sendbuf[512]; aw_snprintf(sendbuf, sizeof(sendbuf), "AWorks %d", i); aw_kprintf("[Master send]: %s\n", sendbuf); if (aw_openamp_send(&__resmgr_ept, sendbuf, strlen(sendbuf) + 1) < 0) { ? ? ? ? ? ?aw_kprintf("[Master send]: error!\n"); ? ? ? ?} ? ? ? ?i++;#else ? ? ? ?aw_kprintf("Salve is alive!\n");#endif ? ? ? ?aw_mdelay(100); ? ?}}

由于篇幅原因本文僅截取部分關鍵代碼。

  • 在rpmsg_demo中使用aw_open打開信箱、使用aw_openamp_init并注冊__mail_box_notify函數;
  • 在__mail_box_notify函數中發(fā)送相應的標記、使用aw_openamp_remoteproc_init函數注冊__aworks_rproc_ops,參數中是各運行階段的函數接口;
  • 使用aw_openamp_create_ept函數注冊rx_callback接收回調函數,當作為主核時打印從核發(fā)送的數據,當作為從核時將收到的數據發(fā)送回去;
  • 使用aw_openamp_ep_poll_task_start函數創(chuàng)建一個任務,任務的函數入口為__openamp_task,在__openamp_task函數中根據讀到的標記做相應的處理。

使用aw_openamp_wait_ept_ready函數等待從機準備好。

在while循環(huán)中主核使用aw_openamp_send函數循環(huán)的發(fā)送數據、從核在rx_callback回調函數中將主核發(fā)送的數據發(fā)送回去、串口打印如下圖。885177ae-5ccc-11ee-9788-92fbcf53809c.png

圖2串口打印

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • 接口
    +關注

    關注

    33

    文章

    9519

    瀏覽量

    157020
  • 通信
    +關注

    關注

    18

    文章

    6391

    瀏覽量

    140038
  • 雙核
    +關注

    關注

    0

    文章

    40

    瀏覽量

    15586
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    固件燒錄速度實測:JTAG比UART快6.8倍

    在批量生產場景中,固件燒錄效率直接影響產線節(jié)拍與交付能力。如何選擇最優(yōu)燒錄方式?本文以ZLG致遠電子MR6450系列核心板為,通過實測數據為您解析。MR6450核心板MR6450是Z
    的頭像 發(fā)表于 01-27 11:34 ?274次閱讀
    固件燒錄速度實測:JTAG比UART快6.8倍

    MR-VMU-RT1176快速上手:開啟移動機器人車輛管理單元設計之旅

    MR-VMU-RT1176 簡介 MR-VMU-RT1176 采用了 i.MX RT1176 MCU,其中一個 Arm? Cortex? - M7 內核運行頻率高達 1 GHz
    的頭像 發(fā)表于 12-24 11:30 ?441次閱讀

    e203 軟如何和FPGA通信?

    求教e203 軟如何和FPGA通信
    發(fā)表于 11-07 06:15

    基于開源鴻蒙的圖片編輯開發(fā)(2)

    本期內容介紹基于開源鴻蒙在RK3568上開發(fā)圖片編輯的全流程,分為上篇和下篇,本篇為下篇,主要介紹標記、保存圖片功能。
    的頭像 發(fā)表于 10-31 09:19 ?3205次閱讀
    基于開源鴻蒙的圖片編輯開發(fā)<b class='flag-5'>樣</b><b class='flag-5'>例</b>(2)

    基于開源鴻蒙的圖片編輯開發(fā)(1)

    本期內容介紹基于開源鴻蒙在RK3568上開發(fā)圖片編輯的全流程,分為上篇和下篇,本篇為上篇,主要介紹添加相冊圖片、編譯圖片功能。
    的頭像 發(fā)表于 10-31 09:16 ?3065次閱讀
    基于開源鴻蒙的圖片編輯開發(fā)<b class='flag-5'>樣</b><b class='flag-5'>例</b>(1)

    蜂鳥E203移植到FPGA開發(fā)板前的IP化工作

    蜂鳥E203軟工作的主頻為16MHz高頻時鐘和3.2768KHz低頻時鐘,并且不同開發(fā)板提供的晶振頻率不同,因此需要化mmcm IP和reset IP將外部晶振時鐘轉換為
    發(fā)表于 10-27 07:35

    如何在rt-thread studio上開發(fā)STM32H747這類的單片機?

    如題,我希望在rt-thread studio上開發(fā)STM32H747IIT6這款單片機,在keil里兩個的代碼是完全隔離的,分別在兩個工程中編寫。 但是在rt-thread studio上生成的標準版工程只有一個工程,想
    發(fā)表于 09-19 08:08

    深入芯馳D9360通信案例,RPMSG關鍵技術深度剖析

    Core-D9360平臺為詳解如何利用RPMSG與VirtIO機制實現A與R間的可靠通信,并提供關鍵代碼實現與調試方法。圖1Core
    的頭像 發(fā)表于 09-10 08:31 ?1166次閱讀
    深入芯馳D9360<b class='flag-5'>核</b>間<b class='flag-5'>通信</b>案例,RPMSG關鍵技術深度剖析

    單核CPU網關和CPU網關有什么區(qū)別

    單核CPU網關與CPU網關的核心區(qū)別在于處理能力、多任務效率、性能表現及適用場景,CPU網關在多任務處理、復雜計算和響應速度上具有顯著優(yōu)勢,而單核CPU網關則更適合輕量級、低負
    的頭像 發(fā)表于 07-05 14:37 ?1060次閱讀

    請問的芯片如何調試?

    的芯片如何調試?比如有很多M4+M0的芯片,是分開調試合適可以一起調試?
    發(fā)表于 06-19 07:32

    全志科技機器人專用芯片MR527與MR813特性概述

    全志科技機器人專用芯片MR527是八高性能機器人專用芯片; MR527系列芯片集成了8Arm??Cortex?-A55 CPU、NPU、-GPU、MCU等多個高性能計算單元,具有強
    的頭像 發(fā)表于 04-24 14:58 ?3816次閱讀
    全志科技機器人專用芯片<b class='flag-5'>MR</b>527與<b class='flag-5'>MR</b>813特性概述

    RZT2H CR52BOOT流程和例程代碼分析

    RZT2H是多核處理器,啟動時,需要一個“主”先啟動,然后主根據規(guī)則,加載和啟動其他內核。本文以T2H內部的CR52,說明T2H
    的頭像 發(fā)表于 04-03 17:14 ?2936次閱讀
    RZT2H CR52<b class='flag-5'>雙</b><b class='flag-5'>核</b>BOOT流程和例程代碼分析

    鎖步技術在汽車芯片軟錯誤防護中的應用詳解

    摘要 本文深入探討了鎖步技術在保障汽車芯片安全性中的應用。文章首先分析了國產車規(guī)芯片在高安全可靠領域面臨的軟錯誤難點及攻克方向,然后詳細介紹了鎖步技術的基本原理及其在汽車芯片防
    的頭像 發(fā)表于 03-21 22:58 ?1135次閱讀

    STM32H7間如何通信

    STM32H7通信的方法,主要是CM7和CM4之間如何進行數據傳遞
    發(fā)表于 03-12 07:34

    STM32H745的FreeRTOS是單核工作還是工作?

    在STM32CubeMX 中配置的時候,FREERTOS分為_M4和_M7,應該是分布對應Cortex_M4和Cortex_M7的。 那實機運行RTOS的時候,運行的是單核還是? 這個是根據
    發(fā)表于 03-07 13:36