一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

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

掃碼添加小助手

加入工程師交流群

AWorksLP 對(duì)外設(shè)進(jìn)行了高度抽象化,為同一類外設(shè)提供了相同的接口,應(yīng)用程序可以輕松跨平臺(tái)。本文以MR6750平臺(tái)為例,介紹AWorksLP 雙核通信的基本用法。

881d3c96-5ccc-11ee-9788-92fbcf53809c.jpg ?簡(jiǎn)介

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

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

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

雙核調(diào)試的用法請(qǐng)參考《AWorksLP樣例詳解(MR6750)——雙核調(diào)試》


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

1. MBX信箱

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

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

圖1 mbx設(shè)備

2.OpenAMP

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

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;}

/* 處理其它設(shè)備發(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);
/* * 默認(rèn)Master VRING0是接收, VRING1是發(fā)送, 從機(jī)反之 */#if CONFIG_AW_OPENAMP_MASTER if (tmp == EPT_SEND_MSG_FLAG) {
/* 接收到來自從機(jī)的消息 */ rproc_virtio_notified(p_dev->vdev, VRING0_ID); } else {
/* 接收到來自從機(jī)的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 /* 啟動(dòng)固件 */ 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); ? ?}}

由于篇幅原因本文僅截取部分關(guān)鍵代碼。

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

使用aw_openamp_wait_ept_ready函數(shù)等待從機(jī)準(zhǔn)備好。

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

圖2串口打印

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8997

    瀏覽量

    153707
  • 通信
    +關(guān)注

    關(guān)注

    18

    文章

    6206

    瀏覽量

    137793
  • 雙核
    +關(guān)注

    關(guān)注

    0

    文章

    37

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    單核CPU網(wǎng)關(guān)和CPU網(wǎng)關(guān)有什么區(qū)別

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

    請(qǐng)問的芯片如何調(diào)試?

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

    Analog Devices Inc. ADSP-SC592 SHARC+?DSP數(shù)據(jù)手冊(cè)

    Analog Devices ADSP-SC592 SHARC+^?^ DSP基于SHARC+和Arm^?^ Cortex ^?^ -A5內(nèi)核。這些數(shù)字信號(hào)處理器(DSP)采用
    的頭像 發(fā)表于 06-07 11:37 ?358次閱讀
    Analog Devices Inc. ADSP-SC592 SHARC+?<b class='flag-5'>雙</b><b class='flag-5'>核</b>DSP數(shù)據(jù)手冊(cè)

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

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

    RZT2H CR52BOOT流程和例程代碼分析

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

    鎖步技術(shù)在汽車芯片軟錯(cuò)誤防護(hù)中的應(yīng)用詳解

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

    STM32H7間如何通信?

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

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

    在STM32CubeMX 中配置的時(shí)候,F(xiàn)REERTOS分為_M4和_M7,應(yīng)該是分布對(duì)應(yīng)Cortex_M4和Cortex_M7的。 那實(shí)機(jī)運(yùn)行RTOS的時(shí)候,運(yùn)行的是單核還是? 這個(gè)是根據(jù)
    發(fā)表于 03-07 13:36

    RK3036:高效能處理器詳解

    RK3036是一款專為嵌入式設(shè)備及多媒體應(yīng)用設(shè)計(jì)的高效能處理器,以其卓越的性能和豐富的功能特性,贏得了市場(chǎng)的廣泛認(rèn)可。以下是對(duì)RK3036主要特性的介紹: 一、核心架構(gòu)與性能 RK3036搭載了
    的頭像 發(fā)表于 02-10 17:35 ?1152次閱讀

    關(guān)于cc2541程序代碼

    CC2541哪里有cc2541的模數(shù)轉(zhuǎn)換模塊和藍(lán)牙模塊的程序代碼呀?初學(xué)不懂
    發(fā)表于 01-20 07:14

    全志T113異構(gòu)處理器的使用基于Tina Linux5.0——異構(gòu)通信驗(yàn)證

    6、通信驗(yàn)證 6.1、C906小創(chuàng)建通訊節(jié)點(diǎn) 在C906小串口終端建立兩個(gè)通訊節(jié)點(diǎn)用于監(jiān)聽數(shù)據(jù),輸入eptdev_bind test
    發(fā)表于 11-20 09:47

    在FPGA里面化了8個(gè)jesd204B的ip同步接收8塊AFE芯片的信號(hào),怎么連接設(shè)備時(shí)鐘和sysref到AFE和FPGA?

    各位有人用過AFE58JD48嗎,我在FPGA里面化了8個(gè)jesd204B的ip同步接收8塊AFE芯片的信號(hào),怎么連接設(shè)備時(shí)鐘和sysref到AFE和FPGA?我看LMK04821這個(gè)時(shí)鐘芯片
    發(fā)表于 11-18 07:51

    HPM6750 Bootloader設(shè)計(jì)

    我正在做一個(gè)hpm6750evk2的bootloader。設(shè)計(jì)很簡(jiǎn)單,boot工程代碼只做跳轉(zhuǎn)到1M后的APP工程代碼處,APP工程就是做的一個(gè)點(diǎn)燈的程序而已,boot、APP工程都是跑
    發(fā)表于 10-23 18:59

    dsp和單核dsp的區(qū)別

    DSP(Digital Signal Processor,數(shù)字信號(hào)處理器)與單核DSP在多個(gè)方面存在顯著差異,這些差異主要體現(xiàn)在處理能力、任務(wù)分配、資源利用以及適用場(chǎng)景等方面。 一、處理能力
    的頭像 發(fā)表于 09-24 16:14 ?1897次閱讀

    TI基于ConcertoMCU的PRIME電力線通信數(shù)據(jù)集中器方案應(yīng)用說明

    電子發(fā)燒友網(wǎng)站提供《TI基于ConcertoMCU的PRIME電力線通信數(shù)據(jù)集中器方案應(yīng)用說明.pdf》資料免費(fèi)下載
    發(fā)表于 09-10 11:10 ?0次下載
    TI基于Concerto<b class='flag-5'>雙</b><b class='flag-5'>核</b>MCU的PRIME電力線<b class='flag-5'>通信</b>數(shù)據(jù)集中器方案應(yīng)用說明