当前位置: 首页 > news >正文

营销型网站建设试题新产品开发8个步骤

营销型网站建设试题,新产品开发8个步骤,海拉尔网站建设平台,茶叶网站开发1#xff09;实验平台#xff1a;正点原子MPSoC开发板 2#xff09;平台购买地址#xff1a;https://detail.tmall.com/item.htm?id692450874670 3#xff09;全套实验源码手册视频下载地址#xff1a; http://www.openedv.com/thread-340252-1-1.html 第十七章双核AMP…1实验平台正点原子MPSoC开发板 2平台购买地址https://detail.tmall.com/item.htm?id692450874670 3全套实验源码手册视频下载地址 http://www.openedv.com/thread-340252-1-1.html 第十七章双核AMP实验 在前面的例程中实现的都是基于单核CPU的实验在很多应用场景中往往只需要使用其中的一个CPU即可实现相应的功能。然而对于复杂的设计如多任务处理、并行控制等单个CPU将难以胜任。MPSOC芯片内部集成了两个(或四个)独立的Cortex-A53内核处理器即两个(或四个)CPU可以很好的应对各种复杂的设计。本章我们来学习下基于双核AMP的实验。 本章包括以下几个部分 1717.1简介 17.2实验任务 17.3硬件设计 17.4软件设计 17.5下载验证 17.1简介 多核处理器从多核的结构上是否一致分为两种基本架构同构多核架构和异构多核架构。同构多核处理器是指系统中的处理器在结构上是相同的而异构处理器是指系统中的处理器在结构上是不同的这些处理器可以是通用处理器也可以是解决某些特定应用的专用硬核。同构多核架构相比于异构多核架构在硬件和软件设计上较为简单通用性较高。但在某些特定应用场合下如异构多核架构专用的硬件加速硬核异构多核架构的性能会更高。 Xilinx的MPSOC融合了这两种架构MPSOC芯片包含多个独立的Cortex-A53处理器这些处理器核在结构上是相同的同时又包括了可编程的逻辑单元PL使得MPSOC整体系统成为了一个异构多核系统同时具有较高的通用性和性能。 从软件的角度看多核处理器的运行模式有AMP非对称多处理、SMP对称多处理和BMP受约束多处理三种运行模式。 AMP运行模式指多个内核相对独立的运行不同的任务每个内核相互隔离可以运行不同的操作系统OS或裸机应用程序。 SMP运行模式指多个处理器运行一个操作系统这个操作系统同等的管理多个内核如PC电脑。 BMP运行模式与SMP类似但开发者可以指定将某个任务仅在某个指定内核上执行。 一般来说SMP为较高级的应用提供统一的OS平台开发者在OS之上构建应用时无需考虑两个内核之间的资源共享和进程间通信。除此之外对SMP而言存在性能开销这会对实时性要求较高的应用其性能造成较大影响。如PC机电脑的多核处理器一般运行在SMP模式实现的功能较为复杂但对实时性的要求不高。 而AMP的运行模式基本没有开销问题在运行裸机应用程序时甚至完全没有开销比较适合实时性要求较高的应用但需要精心定制的软件设计来实现处理器资源共享和处理器间通信。如电力控制保护设备通常需要与人机接口实现复杂的通信和高实时性的计算能力一般采用AMP运行模式一个处理器运行Linux操作系统另一个处理器运行裸机应用程序从而兼顾了电力系统控制设备需要的复杂功能和实时性。 AMP和SMP运行模式的框图如图 17.1.1所示。 图 17.1.1 AMP与SMP运行模式的框图 AMP运行模式给开发者提供了一个与传统单核CPU系统相类似的运行环境使得开发者已有的经验和知识可以继续加以利用同时也为程序的移植提供了很大的便利性。 ZYNQ MPSOC分为CG、EG、EV三个系列其中CG系列是双核Cortex-A53处理器EG和EV系列是四核Cortex-A53处理器这些处理器在AMP的机制下可以运行各自独立的操作系统或者裸机应用程序。本次试验采用的是双核AMP的运行模式两个CPU分别运行不同的裸机应用程序。 MPSOC中的Cortex-A53处理器都具有各自私有的资源同时也有一些共享的资源。私有资源有L1指令缓存、L1数据缓存、私有定时器等。共享的资源有L2 Cache、DDR存储器、OCMOn Chip Memory和其它共享外设等。在AMP运行模式下这两个处理器彼此隔离、分别运行。但在访问共享资源或者外设时要注意避免同时访问否则会出现冲突导致程序在运行时出现问题。 我们可以通过类似互斥的方式来实现裸机情况下简单的双核使用在MPSOC系统中可以利用软件产生中断SGISoftware Generated Interrupts来避免访问的冲突。MPSOC系统中的每个CPU都能用SGI来中断自己、另一个CPU或同时中断两个CPU。向软件产生的中断寄存器ICDSGIR写入中断编号并指向目标CPU就产生了一个SGI。每个CPU各自有一组SGI寄存器可以产生16个软件产生中断中的一个或多个。图 17.1.2列出了SGI的中断ID号范围是0~15。 图 17.1.2 软件中断 SGI可以触发CPU产生中断但是如果想要传递数据的话需要利用共享的内存实现数据的交互。共享内存指CPU0和CPU1在内存中约定一块地址及长度已知的内存区域两个CPU通过读写共享内存中的数据来实现互相通信而利用CPU产生的软件中断可以避免对共享内存的同时访问。 MPSOC中的OCM包含一个256KB的RAM可以被多个CPU进行读写。OCM分为64个Blocks每个block大小为4KB存储空间较小而外置的DDR4存储器一般存储空间较大。当两个CPU需要进行大量数据交互的时候可以使用DDR存储器作为共享内存而当交互的数据较少时既可以使用OCM作为共享内存也可以使用DDR4存储器作为共享内存。值得一提的是当交互的数据量较少时OCM作为共享内存有着独特的优势与DDR内存相比OCM提供了非常高的性能和来自多个处理器的低延迟访问。 需要注意的是两个CPU仍然都是在DDR4存储器中运行只不过使用OCM作为两个CPU通信的共享内存而不是用DDR4存储器。值得一提的是无论是OCM还是DDR4存储器作为共享内存在访问之前需要禁止存储空间的Cache缓存功能这样CPU能够及时读到该地址内存中变化的数据以避免两个CPU访问共享内存的一致性问题。通过Xil_SetTlbAttributes(INTPTR Addr, u32 attrib)函数禁用Cache属性第一个参数为共享内存的基地址第二个参数为设置内存的参数包括是否禁用Cache等。 Xilinx官方提供了两个双核AMP的应用笔记“XAPP1078” 是基于一个核心运行Linux操作系统另一个核心运行裸机程序的应用笔记“XAPP1079”是基于两个核心在各自独立的环境中运行裸机应用程序的应用笔记。本章实验所实现的功能是两个核心各自运行独立的裸机应用程序因此XAPP1079文档是非常值得一看的里面详细的介绍了ZYNQ芯片中两个CPU的启动顺序和方式、裸机VITIS环境中的配置等该文档位于资料盘A盘\8_MPSOCFPGA参考资料\Xilinx\Application Note\XAPP1079文件夹下我们可以用来参考。 17.2实验任务 本章的实验任务是通过MPSOC开发板完成双核AMP的实验。CPU0接收串口的数据并写入OCM中然后利用软件产生中断触发CPU1CPU1接收到中断后根据从OCM中读出的数据控制呼吸灯的频率并在控制结束后触发CPU0中断实现了双核CPU通信的功能。 17.3硬件设计 由实验任务可知我们只使用四个处理器中的两个可以画出本次实验的系统框图如下图所示 图 17.3.1 系统框图 本次试验的两个CPU都会使用到串口并且CPU0会对OCM进行写操作CPU1对OCM进行读操作这就要求共享外设和内存不能同时访问以免产生冲突。我们可以利用软件产生中断SGI的方式来规避冲突。在初始状态下CPU0先使用串口在接收到用户数据后将数据写入OCM中并产生中断来触发CPU1中断此时CPU0不在访问串口和OCMCPU1触发中断后开始访问串口和OCM先从OCM中读出数据通过串口来输出信息并产生中断触发CPU0中断之后不再访问串口和OCMCPU0接收到CPU1的中断后此时可以重新通过串口来接收用户输入的数据从而避免了共享外设和内存的同时访问。 首先创建一个Vivado工程。打开《Hello World实验》工程另存为 “dual_core_amp”工程。由于本次试验需要将程序固化在SD卡和Quad SPI Flash中注意Bank0和Bank2的IO电平需要改成LVCMOS 1.8V所以需要添加SD卡控制器和Quad SPI Flash控制器图 17.3.1中未画出如下图所示 图17.3.1 添加Flash和SD卡控制器 接下来将《Hello World实验》中关闭的PS和PL交互信号再重新打开注意勾选Fabric Reset Enable后还要将其数量设置为。 然后将《自定义IP核 呼吸灯实验》中IP核所在的ip_repo文件夹拷贝到本实验的工程目录下并将ip核添加到工程的IP库中添加方法参考自定义IP核实验。最后在Diagram窗口中将breath_led核添加到设计中如下图所示 图17.3.2 添加breath_led_ip核 将led引脚引出然后点击Run Connection Automation自动连线右键Regenerate Layout重新布局。最终MPSOC系统硬件搭建的框图如下图所示 图17.3.3 MPSOC系统硬件框图 选择“Validate Design”验证设计验证无误后点击“OK”确认。最后按快捷键“Ctrl S”保存设计。接下来在Source窗口中右键点击Design Source设计文件“design_1.bd”然后执行“Generate Output Products”。 为led_0分配引脚生成bitstream文件。具体步骤可参考《自定义IP核-呼吸灯实验》step5。 导出Hardware硬件平台文件到vitis文件夹注意勾选include bitstream。 启动Vitis软件。 17.4软件设计 在硬件设计的最后我们打开了Vitis开发环境。 首先创建CPU0的应用工程在菜单栏中选择File-New-Application Project新建一个Vitis应用工程。工程名命名为cpu0_uart然后点击“Next”如下图所示 图 17.4.1 创建CPU0应用工程 然后添加应用平台文件添加完成后接下来依次点击“Next”直到弹出选择模板界面选择 “Empty Application”模版然后点击“Finish”按钮完成应用工程的创建。 由于CPU0和CPU1共享DDR内存空间需要分别为CPU0和CPU1分配DDR内存。在分配内存空间时没有什么特殊的要求只需要将一部分分配给CPU0其余部分给CPU1即可。如将前半部分内存分配给CPU0后半部分内存分配给CPU1或者前1/4内存分配给CPU0剩余的3/4内存分配给CPU1。MPSOC开发板PS端板载4片DDR4芯片每片大小为512MB。本次实验只使用一片DDR所以为CPU0和CPU1分别分配256MB。 双击lscript.ld位于cpu0_uart→src下设置CPU0的访问空间如下图所示。 图 17.4.2 设置CPU0的DDR访问空间 注意上图中红框标注的地方左侧为基地址右侧为存储空间大小以字节为单位存储空间大小设置为0x10000000十进制268’435’456即256MByte268435456/1024/1024。修改完成后按下“Ctrl”“S”保存。另外上图中的psu_ocm_ram_0_MEM_0为OCM共享内存的基地址和存储空间大小。 然后设置CPU0的板级支持包在设置页面勾选xilffs即FATFS库详细步骤参考《SD卡读写TXT文本实验》中软件设计部分。 在创建CPU1应用工程之前需要新建基于CPU1的板级支持包(BSP)。 双击platform.spr打开design_1_wrapper设置界面如下图所示 图17.4.3 添加CPU1板级支持包 在弹出的页面中Name一栏输入新建的CPU1板级支持包名称“standalone_on_cortexa53_1”处理器选择(Processor)选择psu_cortexa53_1其它选项保持默认然后点击“OK”如下图所示 图17.4.4 设置CPU1的板级支持包 CPU1板级支持包创建完成后同样对其设置勾选xilffs使其支持FATFS文件系统。 接下来编写CPU0的用户代码。在cpu0_uart/src目录上右键选择New-File在弹出的对话框File name一栏中我们输入文件名“cpu0_uart.c”然后点击“Finish”。 我们在新建的cpu0_uart.c文件中输入本次实验的代码。代码的主体部分如下所示 1 #include xparameters.h 2 #include xscugic.h 3 #include xil_printf.h 4 #include xil_exception.h 5 #include xil_mmu.h 6 #include stdio.h 7 8 //宏定义 9 #define INTC_DEVICE_ID XPAR_SCUGIC_SINGLE_DEVICE_ID //中断ID 10 #define SHARE_BASE 0xfffc0000 //共享OCM首地址 11 #define CPU1_COPY_ADDR 0xfffffff0 //存放CPU1应用起始地址的地址 12 #define CPU1_START_ADDR 0x10000000 //CPU1应用起始地址 13 14 #define CPU1_ID XSCUGIC_SPI_CPU1_MASK //CPU1 ID 15 #define SOFT_INTR_ID_TO_CPU0 0 //软件中断号 0 ,范围0~15 16 #define SOFT_INTR_ID_TO_CPU1 1 //软件中断号 1 ,范围0~15 17 18 //SEV指令唤醒CPU1并跳转至相应的程序 19 #define sev() __asm__(sev) //C语言内嵌汇编写法 send event指令 20 21 //函数声明 22 void cpu0_intr_init(XScuGic *intc_ptr); 23 void soft_intr_handler(void *CallbackRef); 24 25 //全局变量 26 XScuGic Intc; //中断控制器驱动程序实例 27 int rec_freq_flag 0; //接收到呼吸灯频率设置的标志 28 int freq_gear; //频率档位 29 30 //CPU0 main函数 31 int main() 32 { 33 //CPU0中断初始化 34 cpu0_intr_init(Intc); 35 while(1){ 36 if(rec_freq_flag 0){ 37 xil_printf(This is CPU0,Please input the numbers 1~5 to change 38 breath led frequency\r\n); 39 scanf(%d,freq_gear); 40 if(freq_gear 1 freq_gear 5){ 41 xil_printf(You input number is %d\r\n,freq_gear); 42 //向共享的地址中写入输入的数据 43 Xil_Out8(SHARE_BASE,freq_gear); 44 //给CPU1触发中断 45 XScuGic_SoftwareIntr(Intc,SOFT_INTR_ID_TO_CPU1,CPU1_ID); 46 rec_freq_flag 1; 47 } 48 else{ 49 xil_printf(Error,The number range is 1~5\r\n); 50 xil_printf(\r\n); 51 } 52 } 53 } 54 return 0 ; 55 }程序的第10行定义的参数SHARE_BASE表示OCM共享内存的开始地址这个地址在lscript.ld可以查找到即psu_ocm_ram0_MEM0的地址(0xFFFC_0000~0xFFFF_FFFF)OCM存储空间大小为256KB。程序中第12行定义的参数CPU1_START_ADDR表示CPU1应用程序的起始地址。 在主函数中通过cpu0_intr_init()函数对CPU0的中断进行初始化以响应CPU1的中断。 然后是一个while(1)的无限循环。首先判断rec_freq_flag接收到呼吸灯频率设置的标志的值是否为0如果等于0此时打印字符来提示用户输入数据输入值的范围为1~5输入的值越大呼吸灯的呼吸频率就越高。当用户输入正确的值之后打印用户输入的值并通过Xil_Out8()函数将数值写入OCM存储器中。然后通过XScuGic_SoftwareIntr()函数向CPU1触发中断。其中函数第二参数为软件中断号第三个参数为需要中断的CPU1 ID。XSCUGIC_SPI_CPU0_MASK表示CPU0的中断IDXSCUGIC_SPI_CPU1_MASK表示CPU1的中断ID该参数在xscugic_hw.h中有定义。 触发CPU1中断后将rec_freq_flag接收到呼吸灯频率设置的标志设置为1while循环停止接收用户输入的数据。 如果用户输入的值不是1~5之间的数字则返回错误用户重新输入数字。 我们在程序中除了main()函数之外另外还编写了两个函数 cpu0_intr_init()和soft_intr_handler()。CPU0中断初始化和中断处理函数的代码如下 57 //CPU0中断初始化 58 void cpu0_intr_init(XScuGic *intc_ptr) 59 { 60 //初始化中断控制器 61 XScuGic_Config *intc_cfg_ptr; 62 intc_cfg_ptr XScuGic_LookupConfig(INTC_DEVICE_ID); 63 XScuGic_CfgInitialize(intc_ptr, intc_cfg_ptr, 64 intc_cfg_ptr-CpuBaseAddress); 65 //设置并打开中断异常处理功能 66 Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT, 67 (Xil_ExceptionHandler)XScuGic_InterruptHandler, intc_ptr); 68 Xil_ExceptionEnable(); 69 70 XScuGic_Connect(intc_ptr, SOFT_INTR_ID_TO_CPU0, 71 (Xil_ExceptionHandler)soft_intr_handler, (void *)intc_ptr); 72 73 XScuGic_Enable(intc_ptr, SOFT_INTR_ID_TO_CPU0); //CPU0软件中断 74 } 75 76 //软件中断函数 77 void soft_intr_handler(void *CallbackRef) 78 { 79 xil_printf(This is CPU0,Soft Interrupt from CPU1\r\n); 80 xil_printf(\r\n); 81 rec_freq_flag 0; 82 }cpu0_intr_init()函数用户对CPU0的中断进行初始化。程序将中断函数设置为soft_intr_handler()软件中断号的范围是0~15之间这里设置为0。 而soft_intr_handler()函数为CPU1触发CPU0中断的软件中断函数当CPU0进入中断后打印字符并将rec_freq_flag设置为0以重新接收用户输入的呼吸灯频率。 程序设计完成后按快捷键CtrlS保存main.c文件右键点击应用工程名cpu0_uart选择Build Project对工程进行编译。编译完成后控制台Console中会出现提示信息“Build Finished”同时在应用工程的Binaries目录下可以看到生成的elf文件。 接下来创建CPU1的应用工程。在菜单栏中选择File-New-Application Project新建一个Vitis应用工程。工程名命名为cpu1_led然后点击“Next”平台选择已经添加的“design_1_wrapper”点击Next如下图所示 图17.4.5 创建CPU1应用工程 在弹出的Domain页面中可以看到已经默认选择了CPU1这里我们使用默认设置然后点击“Next”如下图所示 图17.4.6 选择CPU1 最后选择“Empty Application”点击“Finish”按钮完成Vitis应用工程的创建。 接下来双击lscript.ld位于cpu1_led→src下设置CPU1的访问空间。由于CPU0使用了地址从0x0到0xff_fffff也就是256MB的DDR存储空间所以CPU1使用的DDR地址从0x100_00000开始大小也设置成256MB如下图所示。 图17.4.7 设置CPU1的DDR访问空间 修改完成后按下“Ctrl”“S”保存。需要注意的是两个CPU设置的DDR地址不能重合否则程序在运行时会出现异常。 接下来编写CPU1的用户代码。在cpu1_led/src目录上右键选择New- File在弹出的对话框File name一栏中我们输入文件名“cpu1_led.c”然后点击“Finish”。 我们在新建的cpu1_led.c文件中输入本次实验的代码。代码的主体部分如下所示 1 #include xparameters.h 2 #include xscugic.h 3 #include xil_printf.h 4 #include xil_exception.h 5 #include xil_mmu.h 6 #include stdio.h 7 #include breath_led_ip.h 8 9 //宏定义 10 #define INTC_DEVICE_ID XPAR_SCUGIC_SINGLE_DEVICE_ID //中断ID 11 #define SHARE_BASE 0xfffc0000 //共享OCM首地址 12 13 #define CPU0_ID XSCUGIC_SPI_CPU0_MASK //CPU0 ID 14 #define SOFT_INTR_ID_TO_CPU0 0 //软件中断号 0 ,范围0~15 15 #define SOFT_INTR_ID_TO_CPU1 1 //软件中断号 1 ,范围0~15 16 17 #define LED_IP_BASEADDR XPAR_BREATH_LED_IP_0_S0_AXI_BASEADDR //LED IP基地址 18 #define LED_IP_REG0 BREATH_LED_IP_S0_AXI_SLV_REG0_OFFSET //LED IP寄存器地址0 19 #define LED_IP_REG1 BREATH_LED_IP_S0_AXI_SLV_REG1_OFFSET //LED IP寄存器地址1 20 21 //函数声明 22 void cpu1_intr_init(XScuGic *intc_ptr); 23 void soft_intr_handler(void *CallbackRef); 24 25 //全局变量 26 XScuGic Intc; //中断控制器驱动程序实例 27 int soft_intr_flag 0; //软件中断的标志 28 int freq_gear; //频率档位 29 30 //CPU1 main函数 31 int main() 32 { 33 int freq_step 0; 34 35 //CPU1中断初始化 36 cpu1_intr_init(Intc); 37 //打开呼吸灯 38 BREATH_LED_IP_mWriteReg(LED_IP_BASEADDR, LED_IP_REG0, 1); 39 while(1){ 40 if(soft_intr_flag){ 41 freq_gear Xil_In8(SHARE_BASE); //从共享OCM中读出数据 42 xil_printf(CUP1 Received data is %d\r\n,freq_gear) ; 43 switch(freq_gear){ 44 case 1 : freq_step 20;break; 45 case 2 : freq_step 50;break; 46 case 3 : freq_step 100;break; 47 case 4 : freq_step 200;break; 48 case 5 : freq_step 500;break; 49 default : freq_step 50;break; 50 } 51 //设置呼吸灯频率,最高位为1设置有效 52 BREATH_LED_IP_mWriteReg(LED_IP_BASEADDR,LED_IP_REG1,(0x80000000|freq_step)); 53 //给给CPU0触发中断 54 XScuGic_SoftwareIntr(Intc,SOFT_INTR_ID_TO_CPU0,CPU0_ID); 55 soft_intr_flag 0; 56 } 57 } 58 return 0 ; 59 }在主函数中同样先通过cpu1_intr_init()函数用户对CPU1的中断进行初始化。中断初始化完成后通过LED_IP_mWriteReg()函数打开呼吸灯此时呼吸灯的频率是以默认的频率进行渐变的。 接下来同样是一个无限循环while(1)实现了根据从OCM读取到的值来控制呼吸灯的频率。当接收到CPU0的软件中断后soft_intr_flag的值为1从OCM读取数据的函数为Xil_In8()根据读取到的值通过LED_IP_mWriteReg()函数设置输出呼吸灯的频率。这里将呼吸灯的频率共分为5档用户输入的值越大呼吸灯的频率步长越大呼吸灯的呼吸频率就越大。 最后通过XScuGic_SoftwareIntr()函数给CPU0触发中断并设置soft_intr_flag软件中断的标志为0。 我们在程序中除了main()函数之外另外还编写了两个函数cpu1_intr_init()和soft_intr_handler()。代码如下所示 61 //CPU1中断初始化 62 void cpu1_intr_init(XScuGic *intc_ptr) 63 { 64 //初始化中断控制器 65 XScuGic_Config *intc_cfg_ptr; 66 intc_cfg_ptr XScuGic_LookupConfig(INTC_DEVICE_ID); 67 XScuGic_CfgInitialize(intc_ptr, intc_cfg_ptr, 68 intc_cfg_ptr-CpuBaseAddress); 69 //设置并打开中断异常处理功能 70 Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT, 71 (Xil_ExceptionHandler)XScuGic_InterruptHandler, intc_ptr); 72 Xil_ExceptionEnable(); 73 74 XScuGic_Connect(intc_ptr, SOFT_INTR_ID_TO_CPU1, 75 (Xil_ExceptionHandler)soft_intr_handler, (void *)intc_ptr); 76 77 XScuGic_Enable(intc_ptr, SOFT_INTR_ID_TO_CPU1); //CPU1软件中断 78 } 79 80 //软件中断函数 81 void soft_intr_handler(void *CallbackRef) 82 { 83 xil_printf(This is CUP1,Soft Interrupt from CPU0\r\n) ; 84 soft_intr_flag 1; 85 }cpu1_intr_init()函数对CPU1的中断进行初始化。程序将中断函数设置为soft_intr_handler()软件中断号的范围是0~15之间这里设置为0。 soft_intr_handler()函数为CPU0触发CPU1中断的软件中断函数当CPU1进入中断后打印字符并将soft_intr_flag的值设置为1从而在main()函数中设置呼吸灯的频率。 程序设计完成后按快捷键CtrlS保存main.c文件右键点击应用工程名cpu1_led选择Build Project对工程进行编译。编译完成后控制台Console中会出现提示信息“Build Finished”同时在应用工程的Binaries目录下可以看到生成的elf文件。 17.5下载验证 首先我们将下载器与MPSOC开发板上的JTAG接口连接下载器另外一端与电脑连接。然后使用USB连接线将USB UART接口与电脑连接用于串口通信。最后连接开发板的电源给开发板上电。 在Vitis软件的下方的Vitis Serial Terminal窗口中点击右上角的加号连接串口。如果没有该窗口可以在菜单栏中依次点击Windows-Show view然后在弹出的窗口中搜索“terminal”选择第三个Vitis Serial Terminal然后点击Open打开。 右击应用程序cpu0_uart选择Run As→Run Configurations在弹出的界面中双击Single Application Debug选项该选项下面便出现一个名为“Debugger_cpu0_uart-Default”的子选项同时界面中右侧可以对下载选项进行设置。 在Application标签页中勾选cpu1_led如下图所示 图 17.5.1 “Application”设置 将标签页切换至Target Setup可以看到“Reset entire system”和“Program FPGA”两个选项已经默认勾选如下图所示 图 17.5.2 “Target Setup”设置 设置完成后点击“Run”按钮开始运行。此时MPSOC开发板上的PL_LED1灯开始呈现呼吸灯的效果如图 17.5.3所示 图 17.5.3 呼吸灯实验现象 与此同时在Vitis Serial Terminal窗口中可以看到CPU0打印的字符。此时我们可以在Vitis Serial Terminal窗口中输入“5”然后点击“Send”发送来改变LED灯的呼吸频率如下图所示 图 17.5.4 设置呼吸灯的频率 从Vitis Serial Terminal窗口中可以看到CPU1接收到了CPU0的数据数值为5如下图所示 图 17.5.5 Vitis Serial Terminal窗口打印实验结果 与此同时观察MPSOC开发板上的PL_LED1灯其呼吸频率变快说明双核AMP实验在MPSOC开发板上验证成功。 注意如果Vitis Serial Terminal窗口打印信息错误或者未打印信息请检查cpu0_uart和cpu1_led应用程序的DDR基地址和存储空间大小的设置是否正确。 在实验的最后我们再来向大家介绍双核AMP实验的程序固化方法。右键点击应用工程名cpu0_uart选择“Create Boot Image”如下图所示 图17.5.6 创建启动镜像 在弹出的创建镜像设置界面中下面的“Boot image partitions”一栏中有三个文件分别是fsbl.elf、design_1_wrapper.bit、cpu0_uart.elf如下图所示 图17.5.7 启动镜像设置界面 这时创建启动镜像还缺少cpu1_led.elf文件需要我们手动添加。点击上图中的Add添加在弹出窗口中File path一栏指定cpu1_led.elf的路径并在Destination CPU一栏中选择“A53 1”然后点击“OK”如下图所示 图17.5.8 添加elf文件 回到图17.5.7所示界面中可以发现cpu0_uart.elf文件下面多了一个cpu1_led.elf文件。注意这四个文件的顺序。 然后点击“Create Image”创建镜像文件。在弹出的是否覆盖BIF文件提示窗口中点击“OK”确认。 最终生成的boot.bin文件如下图所示。其路径为/cpu0_uart/_idle/bootimage。 图17.5.9 BOOT.bin文件
http://www.tj-hxxt.cn/news/130097.html

相关文章:

  • 制作二维码网站免费可以做积分的网站
  • 温州网站域名注册服务公司wordpress 图片压缩插件
  • 吉林省交通建设质量监督站网站国内较好的网站开发商城
  • 灯具公司网站模板永嘉网站建设几
  • 什么是网站建设方案东莞阳光网入口
  • 如何制作自己的网站和app专做婚宴用酒是网站
  • 网站项目书范文竞价sem托管
  • 网站建设市场推广招聘设计类专业大学
  • 黑河做网站的公司宣传软文范例
  • 自己建设个小网站要什么手续微信公众号?
  • 开封市做网站的公司网站服务器租赁哪家好
  • 外贸网站免费模板外网网址可以做英语阅读的网站
  • 网络科技公司网站源码北京建站模板源码
  • 用户体验好的网站中企动力官网登陆
  • 铁路建设单位网站设计师入驻平台
  • 做网站与做游戏那个好wordpress主题框架Genesis
  • 太原制作网站的工作室公司简介如何写
  • 网站 实名认证wordpress用户名长度
  • 建设个电商平台网站需要多少钱合肥网红
  • 南乐网站建设公司淄博五厘网络技术有限公司
  • 搜搜网站收录济南公司注册网站
  • 公司网站变更域名找客户去哪个平台
  • 老网站用新域名南京企业自助建站系统
  • 服装配件网站建设 中企动力湘潭关键词优化服务
  • 网站改备案信息吗在工商局网站如果做注销公告
  • 山西做网站高米店网站建设
  • 东莞市主营网站建设服务机构开源网站 做镜像 如何做
  • 家装商城系统网站建设北京装修设计公司有哪些
  • 12306网站做的好还是百度做的好网络营销外包都选异变网络
  • 做易买网网站项目心得体会招生处网站建设方案