AMP(非对称多进程处理模式)和Zynq SoC的OCM

1 篇文章 0 订阅
在上一篇博客中我们了解了Zynq SoC的OCM(片上存储器) ,利用它可以实现在AMP模式下内部处理器内核之间的通信。现在我们将写一些程序代码将这个设备(OCM)利用起来。

在这个演示示例中我们将使用UART接口实现CPU0 与上位机(笔记本)之间的通信连接,我们将从上位机发送8位ASCII码值到Zynq SoC的串口,一旦被接收,这个8位的ASCII码值将被传输到指定的OCM内存地址,并且这个内存地址是被两个处理器内核所共享的。每次CPU1的定时器时间到期后,CPU1将读取这个内存地址的值,并将相应的GPIO输出管脚的值设置为所读取到的数值。LED灯是设计在MicroZed I/O载板上的,载板通过Micro Header器件与Zynq SoC相连,通过相应的设置,LED灯就会根据读取到的ASCII码值进行亮灭显示。我们通过查看LED灯的状态就可以确认在两个CPU之间传递的值是否正确。

显然我们首先要做的事就是设置要使用的内存地址,我们将只传递8位无符号整数,所以我们只需要申请一个地址空间,这里我已经选择使用ZynqSoC的OCM的最高的64K字节的存储区完成这个工作,我禁止了这块存储空间的cache(缓存)功能,在应用程序中我们可以使用下面的函数命令来实现。
Xil_SetTlbAttributes(0xFFFF0000,0x14de2);

我将利用0XFFFF0000这个内存地址作为介质实现在CPU0与CPU1之间传递一个字节的数据,当然有很多方式可以实现这个功能,下面我们将介绍两种最常用的方式:

第一种方法是利用通用的Xilinx I/O接口函数实现对制定地址的读取与写入,这些函数包含在Xil_IO.h头文件中,允许在CPU的地址空间内实现存储与访问8位、16位或者32位的字符型、短整型或整型的数值数据。使用这些函数你就可以读取指定地址的数据,或者像指定地址写入指定的数据。
Xil_Out8(0xFFFF0000,0x55);
read_char = Xil_In8(0xFFFF0000);

为了确保这些地址指向的是同一个OCM位置,尤其是当不同的人编写不同的应用程序,他们将会调用共同的头文件,头文件中包含的对这个地址的宏定义,这是一个非常好的工程实践的例子,例如下面所示:
#define LED_PAT 0xFFFF0000

第二种方法是在两个程序中使用指针指向通一个存储位置。我们可以定义一个指针指向一个常量地址,使用C语言我们会定义一个宏,如下所示
#define LED_OP (*(volatileunsignedint *)(0xFFFF0000))

这种方法不需要再调用Xilinx I/O接口的库函数,通过指针就可以实现访问功能。

上面这两种方法都可以成功实现我的笔记本通过UART与CPU0通信,然后数据传输给CPU1,最后控制在MicroZed I/O载板上的LED灯的亮灭状态,如下面的图片所示(我们用黑白相机拍照为了阻止眩光,最右侧是LED灯的最低位):

下面的信息是从ZynqSoC接收到的:

当然当我们通过OCM来实现ZynqSoC上的处理器之间的通信时,我们必须记住寄存器的值的更新速度比我们目前看到的要快,因为我们使用了CPU1的定时器来触发存储器的读操作,在下一篇博客中,我们将介绍ZynqSoC的处理器之间更加复杂的通信方法,我们将集中介绍软件中断的方式。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Zynq SoC处理器上可以同时运行Linux和裸机系统。 1. Linux系统:Zynq SoC支持在ARM Cortex-A9处理器上运行Linux操作系统。通过在处理器上加载Linux内核,可以实现强大的操作系统功能,例如多任务处理、文件系统支持、网络连接、驱动程序管理等。Linux具有强大的应用开发生态系统,可以使用各种工具和语言进行开发,如C、C++、Python等。此外,通过使用Linux,可以方便地访问各种软件库和框架,为应用程序的开发提供更加便捷和高效的环境。 2. 裸机系统:裸机系统是在裸机环境中直接编写的嵌入式系统。在Zynq SoC处理器上,可以使用ARM Cortex-A9芯片上的处理器核心或FPGA逻辑开发裸机系统。在裸机系统中,没有操作系统提供高级功能的抽象层,所有的硬件访问和功能实现都需要自己编写。裸机系统可以实现高度定制化的功能,能够更好地控制硬件资源和系统性能,适用于对实时性要求较高的应用场景。裸机系统开发需要熟悉底层硬件架构和编程语言,如汇编语言和C语言。 在Zynq SoC处理器上同时运行Linux和裸机系统可以实现系统的功能分层。可以将高级功能和应用程序运行在Linux操作系统中,通过操作系统提供的API进行开发。而底层的硬件控制和实时任务可以运行在裸机系统中,通过对处理器和FPGA逻辑的直接访问实现更高效的功能实现。 综上所述,在Zynq SoC处理器上运行Linux和裸机系统能够充分发挥处理器和FPGA的优势,拓展系统的功能和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值