- 2025-03-19
-
回复了主题帖:
AGM FPGA/MCU烧写文件类型有哪些及用途
Jacktang 发表于 2025-3-16 09:30
这种GM有FPGA和MCU器件核心板二合一的,
硬件的封装的是个什么形式,BGA?怎么焊接到电路板上
目前我们有LQFP48, 64, 100和QFN32这4种封装,封装跟STM32的兼容,引脚可以灵活定义。如有疑问,可以联系海振远科技咨询。 153...23 89...5320
- 2025-03-17
-
发表了主题帖:
AG32 SDK 更新版本1.7.0:加入dsp例程和Slave SPI例程
最新版本Version 1.7.0
1、加入dsp例程
加入dsp例程以及DSP软件库。
2、加入Slave SPI例程
加入用逻辑实现的Slave SPI例程 spi/slave_spi,提供DMA和用逻辑作为AHB master的两种与MCU的通讯方式,并包括仿真测试。
AG32 最新 SDK 请联系海振远科技获取。
AG32 最新 SDK 下载链接:
https://pan.baidu.com/s/1-RLq4dMg3QEzqsd5hU6cMg?pwd=hizy
AG32VF303 NANO开发板
该开发板可以作为核心板,直接嵌入到已有产品当中,帮助用户快速开始新设计。
产品概述:
AGM32系列32位微控制器旨在为MCU用户提供新的自由度和丰富的兼容外设以及兼容的引脚和功能。AG32VF407产品系列提供卓越的品质、稳定性和非凡的价格价值。
产品特征:
最大 CPU 速度为 248 MHZ
从 Flash 执行零等待
SRAM 128KB.FLASH 1MB
支持浮点
·1个CAN2.0.5个UART2个I2C
'2 个基本定时器,5 个高级定时器
·支持 SD10 、以太网 MAC
支持 USB FS+OTG
·看门狗
3个 12 位、最高 3M SPS ADC(17 通道)、2个 DAC
·2x 比较器
RTC, SPI
AG32VF303 NANO开发板,通过SWD接口烧录,接线简单,烧录调试方便
AG32 内置2KLE FPGA,单个芯片上集成了MCU+FPGA,提供极高的性价比。欢迎大家一起来测试,和我们一起分享你的研究成果和喜悦。
联系海振远科技
- 2025-03-14
-
发表了主题帖:
AGM FPGA/MCU烧写文件类型有哪些及用途
本帖最后由 HIZYUAN 于 2025-3-14 16:54 编辑
AGM FPGA/MCU烧写文件类型有哪些及用途
AGM有FPGA和MCU器件,那FPGA/MCU烧写文件类型有哪些及用途,让我们一起梳理一下。
一、AG256 / 576系列:
.prg为烧写文件,通过JTAG烧写;
_download.prg 为AGM Downloader专用编程器的烧写文件,用于批量快速烧写用;如无相关软件,请联系联系HIZYUAN获取。
_SRAM.prg文件为片内SRAM写入,通过JTAG烧写,掉电即失效,可用于设计调试;
二、AG10K/16K系列:
_SRAM.prg文件为片内SRAM写入,通过JTAG烧写,掉电即失效,可用于设计调试;
_master.prg文件为 Master(AS)配置方式下,通过JTAG烧写外部配置FLASH的文件;
_master.bin 为Master(AS)配置方式下,配置Flash的标准烧写文件;_master_as.prg调用此bin文件,通过AS口直接烧写FLASH;
.bin为基本配置文件,可用来产生其它类型烧写文件,也可用于Slave(PS)配置方式;rbf文件为此bin文件的字节高低位反向的转换后文件。
三、AG32/AGRV2K系列:
1. .bin文件,用Supra软件,通过JTAG烧录。
具体使用方法:
Supra软件中选Tools –> Program,AGRV2K仅支持JLINK或CMSIS-DAP,选择正确的Cable。速度默认即可。
可以先点击Query device ID,查看是否检测到器件,正确ID为:40200001
比如选择编程文件hizyuan_led.bin,点击program开始烧写文件。如没有出现错误信息,显示“done with code 0”,即烧写成功,程序开始运行。
2. Downloader烧录AG32 MCU完整程序需要选择XXXX_batch.bin文件。
勾选下面的Full Chip erase before program,可以在烧录前擦除芯片程序,并写入默认设置启动项。
勾选Lock after program,则芯片烧录后打开加密锁功能,无法读取出内部程序数据。
另外,可以选择Erase功能,进行程序的擦除。
其它编程功能
烧写_master.prg前需擦除FLASH,可选择Full chip erase before program。
通过JTAG擦除配置FLASH,选择Erase configuration flash功能,可选全片擦除或擦除指定地址内容。
通过JTAG读取配置FLASH内容,选择Read configuration flash to file,设置输出bin文件及读取地址。
更多资讯,欢迎联系海振远科技获取。
- 2025-03-13
-
发表了主题帖:
AG32 MCU+CPLD联合使用入门(一)
目 录
1. 文档概述
2. AG32+CPLD开发基础了解
3. CPLD 开发流程
3.1 安装工具软件
3.2 建立CPLD 空工程
4. 打开Project文件(CPLD工程)
4.1.1 打开已经生成的project
4.1.2 自动生成的3个.v文件说明
5. 工程转换
6. Supra 编译
7. 烧录
8. 上述过程中的说明
8.1 自定义模块的命名:
8.2 VE 中定义的信号关联:
8.2.1 mcu 和外部引脚的关联:
8.2.2 cpld 和外部引脚的关联:
8.2.3 mcu 和cpld 之间的信号关联:
8.3 VE配置实操演示补充:
8.3.1 VE配置流程
8.3.2 意外情况处理办法
8.3.3 为何在anlog_ip.v中查看端口定义
1. 文档概述
AG32 + FPGA 使用入门手册。
在AG32 芯片(所有型号)中,都有内嵌2KLE 的FPGA/CPLD 逻辑。
也就是说,使用AG32 的芯片时,有三种选择:
1. 只使用MCU 部分;
2. 只使用CPLD 部分;
3. 同时使用MCU 和CPLD(即:MCU 和CPLD 联合编程);
如果:
用于1(仅用做MCU),不必关注此文档。
用于2(仅用做CPLD),硬件设计和操作流程,请参考《MANUAL_AGRV2K_3.0.pdf》,或者《AGRV2K Manual入门详细版v3.0》。不必关注此文档。
用于3(MCU 和CPLD 联合编程):请按照该文档的描述,先完整走一个流程。
2. AG32+CPLD开发基础了解
1. AG32 整颗芯片包含两部分:MCU 和CPLD。
这两部分是相互独立的(各自编译、各自下载),但又可以相互连通起来(信号连通)。
芯片要把这两部分的bin 都烧录进去,才能运行起来。
2. MCU 和CPLD 到外部PIN 脚的连通,是通过VE文件来配置的。
跟ST 芯片每个GPIO 固定对应某个PIN 脚不同,在AG32 中,所有的GPIO/大部分的外设,
对外引脚并不是定死的。而是需要在VE 文件中指定对应。
VE文件中,除了配置GPIO 到PIN 的关联,还可以配置MCU 到CPLD 之间的信号关联。
3. MCU+CPLD 联合编程时,CPLD 工程是由vscode 的“prepare LOGIC”命令自动生成的。
注意:联合编程时,CPLD 工程不能手工通过supra 建立。
CPLD 的操作也是依托vscode 工程来的,不再是孤立的。
CPLD 中的top module 的信号输入,是关联到MCU 工程的(由VE 配置出来)。
4. CPLD 在联合编程中的定位:
整颗芯片运行时,需要两个bin:MCU 的bin 和CPLD 的bin。
如果芯片中只使用MCU 不使用CPLD:
此时,VE 文件里只配置MCU 用到的PIN 脚即可。
这种情况下,vscode 工程中点“upload LOGIC”时,会自动生成默认logic(该logic 中“用户逻辑”为空而已),并编译出bin 并烧录。
整个过程中,logic 部分对开发者来说是无感的。
如果芯片中同时使用MCU 和CPLD:
那么工程配置是“自定义logic”。
此时VE 文件里需要配置用到的MCU 和pin 之间、MCU 和CPLD 之间、CPLD 和pin 之间,三种情况下的信号关联。
这种情况下,vsode 下点“prepare LOGIC”按钮,会为开发者生成CPLD 的框架工程。开发
者需要在这个框架下完成CPLD 逻辑的编写。这个编写调试中,开发者持有主动权。等全部开发完成,并编译出bin,烧录就又回到VSCODE 去烧录。
这个过程,除了logic 需要用户自己编写编译外,更外层的流程还是跟“默认Logic”是相同的。
5. CPLD 开发流程的简要描述:
A. 在vscode 里定义好VE 配置;
B. 在vscode 里使用prepare LOGIC 命令,生成CPLD 的工程框架;
C. 用quartus 打开该工程并添加自己的逻辑代码,最后转换工程,生成vo;
D. 用supra 打开转换后的工程,编译出bin。
以上都是精简描述,先有一个整体印象。下边是详细描述。
3. CPLD 开发流程
该部分会对AG32 下使用CPLD 的过程做详细介绍。
3.1 安装工具软件
fpga/CPLD 使用Supra 和 Altera Quartus II 两个软件来编程。
(使用最新版本的Supra软件,可以只使用Supra完成整个流程)
其中:
Supra.exe 软件在安装完SDK 后,已经在SDK 路径下了,可直接使用(无需额外安装Supra)。
(注:如果在SDK 路径下没有找到Supra.exe,可进入AgRV_pio\packages\tool-agrv_logic\bin
去打开。同时建议手工新建一个快捷方式到SDK 路径下以方便后续使用)
Altera Quartus II 软件需要用户自行安装,安装后再安装对应的器件库。
(注意:Quartus 不能使用Lite 版本,需要使用Full 版本。最好使用版本:Quartus II 64-Bit
Version 13.0.1 Build 232 06/12/2013 SJ Full Version)
在这两个软件中,
Quartus 工具用来编写Verilog HDL代码并导出 .vo文件的,
Supra 工具使用 .vo 文件来生成最终的bin文件,也就是最终的可烧录文件。
3.2 建立CPLD 空工程
这里默认是安装过VSCODE 以及MCU 的SDK 开发包的。如果没有安装,请参考《AG32 开发环境搭建.pdf》先搭建MCU 开发环境。
搭建好SDK 环境后,这里以example(路径:...\AgRV_pio\platforms\AgRV\examples\example)为例建立工程。
SDK安装好后,默认会生成以下路径的example.
在example 样例程序中,默认是没有打开自定义ip 的。
首先,要通过配置打开自定义ip:
打开Visual Studio Code软件:
软件界面如下:
打开工作文件夹:
找到example文件夹,选中打开:
备注:当中example_www.hizyuan.com的文件夹不是默认生成的,是后面新建的。是为了保存根据不同的型号配置好参数的exmple用。
打开后的界面如下,在左边栏,没有看到创建logic 框架工程的选项(prepare LOGIC)。
在platformio.ini 中打开以下两项:
ip_name = analog_ip
logic_dir = logic
注意:这两行去掉注释的时候,前边不要留空格。要顶格写。
具体步骤是将以下的:
更改为:
修改后,点击文件保存。
软件界面右下角提示是否覆盖,选择覆盖。
覆盖后,左边窗口会重新刷新,但是也还是没有找到prepare LOGIC。
点击Build按钮。
Build后有错误提示信息:……example_board.vx拒绝访问。
检查发现,是因为刚才修改去掉注释的2行代码,没有顶格,导致编译器识别出错。
(另外,将example文件夹放到下一级的文件夹,比如examplesàexample_hizyuan-àexample,Build也可能出现拒绝访问的错误。)
在本例中,重新将修改的2行代码顶格后,错误就没有了。
2行顶格后,点击保存,左边栏就出现Prepare LOGIC了。
打开以上两项后,才能在左边栏看到创建logic 框架工程的选项(prepare LOGIC):
点击该功能【Prepare LOGIC】后,
可以看到在example 工程目录下生成一个logic 文件夹,自动生成的文件如下图:
这里生成的logic 文件夹,就是后续编写CPLD的模板。
关于改写文件名:
这里的文件名字,是根据platformio.ini 里边的配置项来的:
board_logic.ve = example_board.ve
ip_name = analog_ip
logic_dir = logic
如果想改文件名字,可先在platformio.ini 中更改名字,更改后再点生成按钮来自动生成。可更改的名字,就是上边的三项:
board_logic.ve 对应logic 文件夹内example_board.v 的名字
Ip_name 对应logic 文件夹内analog_ip.v 的名字
Logic_dir 对应文件夹logic 的文件夹名字
在生成后的文件夹内,注意其中的两个.v 文件:analog_ip.v 和example_board.v。
这两个文件是vlog 的源码文件。
其中:
analog_ip.v 是一份空的模板,用户自己要实现的功能,就在这个空模板上展开;这个空的模板里边,主要就是module analog_ip 的接口定义。
example_board.v 是根据工程中example_board.ve 里的pin 配置,Logic prepare 时自动转换出来的v 源码,也是supra 工程的top module。这部分不要手工改动。
到这里,空工程建立完毕。
注意:
后期修改完VE 的配置后,Prepare LOGIC 时,会重新生成CPLD 工程模板,这个模板文件都仍然存到logic文件夹下,且仍然是这两个.v 文件。
只不过analog_ip.v 对应新增出analog_ip_tmpl.v 文件,而example_board.v 则是直接覆盖。
由于analog_ip.v 是用户程序的入口,用户程序会从这里开始写。这个文件一定是会修改的。所以,每次prepare LOGIC 时,这个文件会对应生成analog_ip_tmpl.v 文件,而不是覆盖。
生成出analog_ip_tmpl.v 后,用户要根据自己的情况,把新接口手动合并到analog_ip.v 去。
注:这里只是以example 来举例。实际应用中,在导出空工程前,需要先配置好platformio.ini的其他项和example_board.ve 所需要的引脚。
建议用户直接在example例程上修改自己的用户代码,避免配置上的错误。
包括:board_logic.device 配置32/48/64/100 脚。
4. 打开Project文件(CPLD工程)
使用前边安装的Quartus II,打开example\logic 下的工程。
如果是初次使用Quartus II,在安装完器件库后,AG32 要选用器件库中里Cyclone IV E 的EP4CE75F23C8 来模拟。(默认打开example\logic 工程后已经是该项了,确认下即可)。
4.0.1 打开已经生成的project
具体步骤:
工程如下,型号默认是EP4CE75F23C8,不用修改。
切换到Files列表:
这里除了example_board.v 和analog_ip.v 外,还有个系统的alta_sim.v,这个文件是提供芯片系统的功能,类似函数库,可不用关注。
此时,这个工程是个空的工程,用户要根据需求在analog_ip.v 中实现功能。
4.0.2 自动生成的3个.v文件说明
再次回顾下3 个.v 文件:
1. analog_ip.v:用户自定义logic 的入口。用户logic 实现在这里展开;
2. example_board.v:整个logic 的top module。会关联analog_ip 的module 和atla_sim 下的各module。不要修改该文件。
3. alta_sim.v:封装过的跟AG32 相关的各module。不要修改该文件。
接下来进行空工程的转换和编译。
注意:这里的空工程不能马上添加自己的代码,首先要进行工程转换(参考下个步骤)
5. 工程转换
工程转换的目的,是把CPLD 模板工程真正转换成quartus 实际运行的状态。
操作步骤:
打开Quartus 的tools->TCL Scripts,如下图所示:
【Run】运行成功后,弹出的2个对话框点OK。可以看到该logic 占用的资源数量。
这个转换的过程,顺便进行了CPLD 工程的编译。
上图中斜杠前边标识的大小就是所占的逻辑单元数(后续使用中逻辑单元不能超过2K)。
注意:第一次导入工程,必须执行上图的方式来转换。后续编写和修改CPLD 代码后,可以仍然执行上图方式,也可以直接点下图的“编译”按钮来编译。
双击top,也可以打开对应的module了。
执行到这里,会在logic 下生成vo 文件出来(在\logic\simulation\modelsim 下),Quartus工具的任务完成。
接下来打开Supra 来继续生成bin 文件。
6. Supra 编译
在Supra 工具里,打开该工程(example\logic)。
上述窗口点击打开,弹出的小对话框点OK。然后,点击【左上角Tool】-> 【Compile】。
在弹出的画面中点右下角的【run】。
编译成功后,画面会有提示。
Compile design example_board done with code 0
然后在logic 路径下可以看到新编译出来的bin。
这个bin 就是要烧录到芯片的CPLD.bin。
执行到这里,supra 工具的任务就完成了。
7. 烧录
烧录需要回到vscode 下烧录。
如果在vscode 下烧录,如下图:
到这里,新建一个空工程、转换、编译、烧录的整个流程描述完毕。
强调:
后续如果在VE 里修改过配置,则需要走一个全过程:vscode 下prepare LOGIC 再生成一遍CPLD 模板、合并analog_ip_tmpl.v 到analog_ip.v 中去、启动quartus 去转换、supra 下编译,回到vscode 下烧录logic。
后续如果只是在quartus 下编写CPLD 代码,需要走的几步:quartus 下编译、supra 下编译、回到vscode 下烧录logic。
8. 上述过程中的说明
上述流程中涉及两个比较关键的点:
8.1 自定义模块的命名:
自定义的逻辑,自定义文件名必须与自定义模块名相同,就是在platformio.ini 中设置的
ip_name 的名字。
这个对应关系,在上述流程点prepare LOGIC 自动生成代码时,会自动完成。
如果是手工编辑的逻辑代码,或者对这里的命名进行过改动,会出现后续Quartus 中使用的异常。
8.2 VE 中定义的信号关联:
在AG32 中,mcu 和cpld 和外部引脚,三者是相互独立的。
1. mcu 用的IO,在ve 里,可以关联到外部引脚Pin_xx;
2. cpld 用的IO,在ve 里,可以关联到外部引脚pin_xx;
3. mcu 的某一路信号又可以直接和cpld 的某一路信号,在ve 里,关联起来;
所以,ve 是很关键的一个桥梁。
在ve 中定义好以后,运行prepare LOGIC 会自动产生cpld 的顶层模块的输入输出接口,
这些接口就是cpld 和mcu 与外部引脚关联的信号通路。
这里着重描述下3 种情况在VE 文件里的定义。
8.2.1 mcu 和外部引脚的关联:
比如,定义gpio 到外部引脚:GPIO4_3 PIN_32
比如,定义串口0 到外部引脚:UART0_UARTRXD PIN_69
定义格式为:MCU的FunctionName + 空格 + PIN脚ID。
这部分在mcu 使用里描述的很多了,不再赘述。
8.2.2 cpld 和外部引脚的关联:
比如,定义led 到外部引脚:LED_D3 PIN_32:OUTPUT
定义格式为:cpld 信号名称 + 空格 + PIN脚ID: 方向
其中,
cpld 信号名称,是自定义名称,这个名称随后可以在 cpld 中引用;
方向,有3 种:OUTPUT、INPUT 和INOUT(这个方向是cpld 对外部引脚来说的)。
方向是可选的,可加可不加。如果不加,则是默认的 INOUT(双向)。
上述定义在 ve 里添加后,执行 prepare LOGIC 命令,在自动生成的 cpld 工程中,可以看到输出到 cpld 顶层模块接口中的 item 如下:
那么,
input BTN_L1: 是 pin 到 cpld 的信号;
output LED_D2: 是 cpld 到 pin 的信号;
output LED_D3: 是 cpld 到 pin 的信号;
然后在 cpld 代码中操作 LED_D3 这个信号的高低,最终操作的 PIN_32 管脚的高低。
(注:VE 里每行最后定义的方向是可选的)
这部分的使用,也可以参考样例《cpld 控制led》。
8.2.3 mcu 和cpld 之间的信号关联:
比如,定义gpio 信号到cpld:GPIO4_1 iocvt_chn
比如,定义串口1 的tx 信号到cpld:UART1_UARTTXD txd_chn
定义格式为:MCU的FunctionName + 空格 + cpld信号名称
其中,
这里的FunctionName,同1 中的FunctionName,就是mcu 里的通路定义。更多定义参考《AGRV2K_逻辑设置.pdf》,里边有全部的mcu 端可用的FunctionName 列表。
除了mcu 的FunctionName(映射到引脚)外,mcu 对cpld 还开放出更多的内核级通路接口,如:mem_ahb_各通道,dma 各通道,mcu 的reset 和stop 等信号,具体定义也参考《AGRV2K_逻辑设置.pdf》。
而cpld 信号名称,则会在cpld 的顶层模块接口中自动生成,供cpld 中使用。
上述的两条VE 配置,prepare LOGIC 后生成的item 如下:
对于iocvt_chn 来说,是没有指定方向的普通gpio 口,则有输入和输出信号对应。
iocvt_chn_in:对cpld 来说是输出到mcu 的数据信号;
iocvt_chn_out_data:对cpld 来说是输入到mcu 的数据信号;
iocvt_chn_out_en:对cpld 来说是输入到mcu 的使能信号;
对于txd_chn 来说,由于mcu 的串口TX 是定义好方向的,是mcu 的output 方向。所以在cpld 里只有两个item 项:
txd_chn_out_data:对cpld 来说是输出到mcu 的数据信号;
txd_chn_out_en:对cpld 来说是输入到mcu 的使能信号;
如果对普通GPIO 也设置了方向,则导出到cpld 的方向也就只有对应方向的信号了。
如:VE 里设置GPIO4_1 iocvt_chn 为mcu 的输出:
则prepare LOGIC 后生成的item 只有input 的两项。如下:
注意:在mcu 和cpld 信号连接中,mcu 的output 就是cpld 的input。
8.3 VE配置实操演示补充:
8.3.1 VE配置流程
为了避免引脚冲突,VE文件对引脚的配置,我们重新定义如下:
Build成功后:
执行Prepare Logic.
Prepare LOGIC成功后,有【SUCCESS】提示。
接着,在Quartus II打开对应的工程文件:
然后双击Files对应的anlog_ip.v,查看端口的定义:
8.3.2 意外情况处理办法
如果在anlog_ip.v的端口列表看不到新增的端口,我们该如何处理?
上述anlog_ip.v的端口的定义,没有看到新定义的以下端口:
LED_D2 PIN_15:OUTPUT
LED_D3 PIN_16:OUTPUT
BTN_L1 PIN_17:INPUT
GPIO4_1 iocvt_chn
UART1_UARTTXD txd_chn
造成的原因:
上述INPUT/OUTPUT端口是后面加的,原来有的anlog_ip.v文件不会被覆盖(否则会冲掉用户代码),所以端口信息没有更新。我们可以从logic文件夹下的anlog_ip_tmpl.v看到更新后的端口列表。
以下是通过Quartus软件打开anlog_ip_tmpl.v。
解决办法:要么把自己改过的代码复制过来,或者把anlog_ip_tmpl.v的接口复制到源文件里。或者把logic目录删了,重新Prepare LOGIC。
这里因为是空工程文件,还没有添加自己的设计代码,所以我们关闭Quartus II,然后删除logic文件夹。然后重新点Prepare LOGIC
当状态栏提示 [SUCCESS] 后,软件自动生成新的logic文件夹。
我们重新打开Quartus II工程的anlog_ip.v文件,就看到新增的端口定义了。
8.3.3 为何在anlog_ip.v中查看端口定义
为何在anlog_ip.v中查看端口定义,是因为该文件名称,是在VSCODE里面定义好的。如果要换其他名称,也需要对ip_name的值进行修改。
以上本章节完结。
下个章节,即第二部分,将以样例为基础,描述mcu+cpld在具体使用中怎么体现。
- 2024-09-20
-
发表了主题帖:
AG32 下使用 freeRTOS 的参考
本帖最后由 HIZYUAN 于 2024-9-20 18:23 编辑
AG32 下使用 freeRTOS 的参考
在 SDK 下已经有移植好的 FreeRTOS Kernel V10.4.6 版本,可供用户使用。
源码位于:\AgRV_pio\packages\framework-agrv_freertos\
用户使用时,不必关注该源码,只需关注 API 使用即可。
一、简单验证:
使用时,从 VSCODE 中直接打开工程:\AgRV_pio\platforms\AgRV\examples\freeRTOS
打开工程后,可以先验证简单的运行情况。
这个工程中,并没有 ve 文件(而是使用了默认的 ve 文件)。
便于后续开发,可以先建立一份 ve。
步骤:
1. 从 example 路径下 copy 一份 example_board.ve 过来;
2. 打开该 example_board.ve,删除掉里边除 clk 和 led 灯以外的其他引脚配置;
3. 在 platformio.ini 中添加对该 ve 的引用:board_logic.ve = example_board.ve
接下来,编译 ve 并烧录,然后编译 code 并烧录。
两项都烧录成功后,就可以看到 led 灯的闪烁了。
二、使用样例:
打开 main.c,可以看到在 main 函数中使用了几种元素:xQueue、xSemaphore、xTask、xTimer。同时在 main.c 中对接的 hook 回调中,会配合使用这些元素。
这里注意,如果要精简样例,比如只跑一个 task 时,删除其他元素时,要同时把 hook 里对应的调用也删除。
main() 函数中,可精简到调用3个函数:
int main(void)
{
prvSetupHardware();
xTaskCreate(led_task,
"led_task",
configMINIMAL_STACK_SIZE,
NULL,
mainEVENT_SEMAPHORE_TASK_PRIORITY,
&xGPTimerTask);
vTaskStartScheduler();
for(;;);
}
其中,prvSetupHardware()函数中有 init 函数是必须的:
在 led_task 中可写闪灯代码如下:
另外,由于不再使用 xEventSemaphore,也需要在 vApplicationTickHook 中去除对 xSemaphore 的操作:
可尝试编译运行,查看效果。
除了以上简化过程,还有用户会使用到 freeRTOS 的静态方法。
如果使用静态方法,即打开了宏:configSUPPORT_STATIC_ALLOCATION,需要新增两个 hook 函数,可参考:https://blog.csdn.net/m0_46451722/article/details/113053257 中的描述。
使用如:
编译通过后,可在函数中使用 static 那组函数。
用法和动态那组函数相似,注意参数使用静态分配好的即可。
三、使用自建工程:
如果用户希望在自建工程中使用 freeRTOS,该如何把它添加进来?
比如,在 example 下要把 freeRTOS 加进来。步骤如下:
1. 在 platformio.ini 中增加对 freertos 的引用:
注意,多个库之间用“逗号+空格”来隔开。
2. 确认 ve 文件里的配置正常(时钟+led 引脚);
3. 在 example.c 中引入 freertos 的头文件及用到的宏定义:
4. 在 example.c 中新增几个函数:
5. 在 main.c 中 init 后直接启动 freeRTOS:
然后,编译 ve 并烧录,再编译 code 并烧录,就可以看到 led 的闪烁了。
更多使用技巧可在www.agm-micro.com或hizyuan.com上查看
AG32下使用freeRTOS的参考. ...
- 2024-09-19
-
发表了主题帖:
AG32 MCU替代GD32F407的数字示波器方案
AG32 MCU替代GD32F407的数字示波器方案
一、AG32替代GD32F407/STM32F407的数字示波器方案
市场上有多款数字迷你示波器,特别小巧,携带非常方便。单通道,标注100Mhz带宽,500MS采样率。这样高的采样率需要使用高速AD及很高性能的处理器。原方案使AD9288双通道8bit 100Mhz高速AD,以及GD32F407最高运行频率168MHz。
AG32VF407是AG32系列中的最高端型号,与GD407做到管脚兼容,但是却有独特的特性,可以在本方案中完美替换GD407。AG32系列异构芯片内部框图:
二、AG32 MCU的优势:
1、高性价比(超高主频给了开发者更多的数据处理分析时间)
RISC-V 开源内核,248Mhz的超高主频,是STM32F207/407望尘莫及的。除此之外,还有2K的FPGA,相当于4片ALTERA CPLD EPM570的容量,这样相当于1片ST207+4片EPM570的AGM32芯片的超高性价比。
2、灵活的自定义接口(高速AD数据接口的实现)
通过AG32里的FPGA可以实现数字示波器使用的高速AD9288的数据接口,这个时钟的速度高达100Mhz,普通的MCU没有类似这种同步机制的接口来读数据。
3、自定义的硬件加速模块(实现示波器的触发功能)
示波器的触发要求电压低于或者高于设置的电压时,开始采样后续的波形。这个电压比较就可以交给FPGA来实现。
4、FPGA/MCU相互协调,最大程度发挥性能
FPGA最擅长的就是大数据量的并行采集分析处理。这125M(超频)的高速AD数据采样即使使用了DMA数据读取,也会频繁与MCU抢占AHB总线,导致MCU的运行效率及其低下。
如果用FPGA来做缓存就好很多了,会大幅减少AHB总线的抢占情况。使MCU有更多的时间来刷新波形的显示,以及一些人机界面的操作。FPGA同时还能对采集到的数据进行缩放、过滤等,尽可能帮助MCU完成波形显示前的数据处理。
5、数字接口重定向(任何应用,2层PCB轻松完成)
AG32系列定义的PIN_XX可以用软件定义成任意数字接口,如UART,SPI,IIC, PWM,IO等等。除了模拟部分,ADC, DAC,CMP,usb外,其它接口都能任意定义。这样根据PCB布局来调整数字接口部分的顺序,2层板就轻松搞定。这样布出来的板子不但美观大方,而且性能更加可靠,基本上不存在交叉走线的情况。
6、可以任意定义端口驱动能力
用户可以根据需要任意定义每一个端口的驱动能力,大大加强了接口的抗干扰能力。
7、防破解功能
为避免被抄袭,有客户产品在销售之前会抹掉主控芯片的MARK号码防止竞争对手抄袭,但友商可以根据外围电路,比如SPI flash, IIC的eeprom, UART口等对应于主控芯片的某几个引脚来猜测验证这是哪家的哪款型号。而AGM的MCU破解难度可以让对手望而切步。
8、技术支持
开发者可以通过官方提供的技术支持服务,快速完成代码移植和项目开发。
三、AGM32
AGM32系列32位微控制器提供了新的自由度和丰富的兼容外设以及兼容的引脚和功能。AG32VF407系列的配置如下。
•最大CPU速度为248 MHz
•从Flash 执行零等待
•SRAM 128KB, FLASH 1MB
•支持浮点
•1个CAN2.0, 5个UART, 2个I2C;
•2个基本定时器,5个高级定时器
•支持SDIO、以太网MAC
•支持USB FS+OTG
•看门狗
•3个12位、最高3M SPS ADC(17通道)、2个DAC
•2x比较器 RTC, SPI
-
回复了主题帖:
AG32 MCU新品,内置2K FPGA+64Mbit PSRAM
HO010300 发表于 2024-9-14 08:48
好用吗?gitup有开源代码吗?
可以联系海振远科技,获取最新的技术资料
- 2024-09-13
-
发表了主题帖:
AG32 MCU新品,内置2K FPGA+64Mbit PSRAM
本帖最后由 HIZYUAN 于 2024-9-13 09:48 编辑
引言
AG32内部存储包括了128KB的SRAM,在某些应用场合,对于内存需求较高的场合比如跑GUI或者算法等,自带的内存会就不够用,这个时候用户需要外扩SRAM或SDRAM。
此外,AG32结合了MCU和FPGA的优势,具有集成度高、稳定性好、设计灵活和效率高等优点,在叠封SDRAM/PSRAM后,缩小了板块面积,并降低产品成本,同时大幅提高PCB布板方面EMC相关设计的便利程度,可应对各种相关需求,比如屏控、打印/喷码控制等。
概述
AG32再出新品,合封64Mbit PSRAM,适用于片内RAM需求较大的客户,采用LQFP64封装。如需更多管脚IO,也可根据需求推出LQFP100封装。
一颗AG32 MCU芯片,内置2k FPGA逻辑资源,加上64Mbit PSRAM,提供大容量的RAM,可以满足多种需求。一方面降低了系统成本,同时也可以节省PCB板空间。
应用的案例
方案特点
1、AG32具备最高248MHz时钟频率,拥有丰富的外设,包括五个UART、两个I2C、支持USB、CAN和SPI通道等丰富的外围模块,以其高速的指令执行速度、方便的JTAG调试方式和低功耗等特性为数据采集与处理的设计提供了一个较为完善的平台。
2、AG32拥有3x12位最多3M SPS的ADC(17个通道),和2个DAC,并且提供两个双通道比较器。
3、AG32初始与STM32管脚兼容,但可以通过配置文件全部灵活重定义,给内核中的MCU和CPLD使用,因此可提供超出STM32的GPIO口数量。
4、AG32的MCU和FPGA通过芯片内部AHB总线高速通信,速度远超传统SPI。
5、AG32内置FPGA可实现客户定制逻辑功能,包括接口IP、Decoder等功能。
- 2024-08-11
-
回复了主题帖:
【AG32VF407测评】GPIO映射规则与灵活的IO复用
嗯,AG32 I/O可以灵活定义。如需要了解更多信息,可以联系海振远科技获取资料或者申请样品。
-
回复了主题帖:
AG32VF407测试GPIO(AG32入门篇)
优秀,加油。
- 2024-07-27
-
回复了主题帖:
【国产芯AGM AG32VF407 再测评】09:真实操作LED(GPIO)
LED可以通过MCU或者FPGA逻辑控制,2种方式都可以体验一下。
采用AGM原厂设计的DEMO板,开发上手更简单。
-
回复了主题帖:
FPGA+MCU在音频处理上的低成本解决方案
谢谢关注。后续保持沟通。
- 2024-07-24
-
发表了主题帖:
AG32 下的分散加载
AG32 下的分散加载
分散加载:
在实际应用中,有时候需要强制把一段数据,或一段代码,固定到指定的一个地址。这个时候,就不能使用默认的编译配置,需要自己来配置连接属性。
AG32 中可以通过修改 ld 配置,达成这样的目的。
分散加载在 gcc 下的限制:
不能插入到代码段,只能放到正常编译的 bin 后边(参后详述)。
在默认情况下,AG32 编译时使用的连接配置文件是 AgRV2K_FLASH.ld,位于:AgRV_pio\packages\framework-agrv_sdk\misc\devices 下。
打开该文件会看到,关联了另外两个文件:
其中,在 AgRV2K_mem.ld 中是多个自定义的标签:
而在 mem.ld 的定义中,则是对 section 的使用和分配:
以上的三个文件,总结:
1. AgRV2K_FLASH.ld:关联到工程的,一般不要改动;
2. AgRV2K_mem.ld:自定义标签的定义,如果要新增标签,需要改动;
3. mem.ld:设置编译地址分配的地方,需要改动。
这里,相当于三个文件加在一起,组成一个完整的 scat 文件。这里的语法都是标准的 gcc ld 语法,可自行网上搜索更全的使用方法。
下边只是个简单的举例供参考。
举例:把某个数组和某个函数指定编译到 flash 的某个位置,
比如,指定数组 guSetting 到 152K 的地方(地址为:0x80026000)
指定函数 testFuncToPos() 紧跟在数组后边。
需要做:
1. 在 AgRV2K_FLASH.ld 中定义一个新标签:
FLASH_E 和 FLASH_E_SIZE
分别为起始地址 0x80026000 和 4K 大小;
同时定义 FLASH_EXT 段,后续会来使用;
如下图:
这里的 flash 位置使用时最好放到 code 的结尾处。
并且要考虑 fpga 部分的 flash 使用空间。
(如果不对 fgpa 的位置指定,fpga 会默认占用 flash 的最后 100K)
2. 在 mem.ld 中,根据上边定义的标签,定义 section,如:
.flash : ALIGN(4)
{
*(.testSectionData);*(.testSectionCode);
} > FLASH_EXT
如下图:
这里定义出来两个 section:testSectionData 和 testSectionCode。这两个 section 名称,
就是在代码中使用的关联 section。
3. 在代码中,对数组和函数进行 section 指定,方法如:
__used uint8_t guSetting[16] __section(".testSectionData") =
__used __section(".testSectionCode") void testFuncToPos(void)
如下图:
并且在项目中调用函数 testFuncToPos。
4. 编译后,可以从工程的\.pio\build\release\路径下查看.readelf 文件,
(如果是 dev 方式编译,路径是:\.pio\build\dev\)
打开该文件后,可以看到 guSetting 和 testFuncToPos 正是在我们所期望的
位置上:
注意:这里对 flash 空间规划时,需要增加 fpga(cpld)对空间的使用考虑。
附:
关于芯片 flash 大小:
不管所选型号的 flash 是多大,请注意最后 100K 是留给 fpga 使用的。
如果使用的芯片是 256K 的 flash 空间,那么就是 156K 程序+100K fpga,用户程序不能
超过 156K。如果超过 156K 编译是可以通过的,但烧录后会冲掉 ve 配置部分。
ve 配置被冲掉后,程序运行会表现出各种异常(连系统时钟初始化都跑不过)。
如果程序使用的空间较大,fpga 又刚好比较小,可以调整这个界限的值。调整方法如下:
board_logic.compress = true //(可选)对 fpga 部分进行压缩,更省空间
board_upload.logic_address = 0x80034000 //根据实际情况调整该边界值
flash 的大小是在 agrv2k_103.json 中定义的。
flash 起始地址是 0x80000000,ram 是 0x20000000。
另:
分 散 加 载 中 , 如 果 连 AgRV2K_FLASH.ld 都 想 自 己 指 定 , 则 需 要 修 改platformio.ini 中配置项:
board_build.ldscript = AgRV2K_FLASH.ld
分散加载在 gcc 下的限制:
在 arm 中,可以通过_attribute_( at(绝对地址) )的方式,把某个数组或某个函数强制编译到某个地址,并且不影响其他代码的编译。编译后整个 bin 空间看上去是连续的。
这是 arm 编译器支持的一个特性。
但 gcc 不支持这样的指定。
gcc 使用 ld 指定的地址,不能在正常编译的 code 的区域内。这个地址只能放在没有用到的 flash 部分。
也就是说,新指定的位置,必须在正常的编译区域的后边。
实际操作时,代码些许的改动都会影响到 bin 的大小,所以这个指定的位置,往往会跟正常 bin 之间预留一些空间。所以,自定义 ld 文件的方式 bin 文件会增大一些。
从 bin 的角度看,code 和指定区域,两段中间空出来的区域,会被填充成 00。
最终 bin 增大的部分,就是这部分填充成 0 的 size 大小。
如果对 bin 的大小比较敏感,那就要缩小这段 0 的区域。可以在最终出包时,看下其他代码编译后的大小,然后把这段指定地址放的尽量近。
如果对 bin 的大小不太敏感,那就随意指定到没用到的 flash 区域即可。
-
发表了主题帖:
FPGA+MCU在音频处理上的低成本解决方案
FPGA+MCU在音频处理上的低成本解决方案
前言
AGM AG32的架构是FPGA + MCU,并且AG32与STM32的关键兼容,这个低成本的AG32器件,在音频处理(语音识别、降噪、声音增强等)的应用上有明显的优势。
AG32内置2K的FPGA资源,采用RISC-V核,通过FPGA和RISC-V MCU的结合,可以更有效、方便的对声音信号进行采集、滤波处理、算法处理和输出。
AGRV2K的引脚说明
1、AG32具备最高248MHz时钟频率,拥有丰富的外设,包括五个UART、两个I2C、支持USB、CAN和SPI通道等丰富的外围模块,以其高速的指令执行速度、方便的JTAG调试方式和低功耗等特性为数据采集与处理的设计提供了一个较为完善的平台。
2、AG32拥有3x12位最多3M SPS的ADC(17个通道),和2个DAC,并且提供两个双通道比较器。
3、AG32初始与STM32管脚兼容,但可以通过配置文件全部灵活重定义,给内核中的MCU和CPLD使用,因此可提供超出STM32的GPIO口数量。
4、AG32的MCU和CPLD通过芯片内部AHB总线高速通信,速度远超传统SPI。
5、AG32内置CPLD可实现客户定制逻辑功能。
6、提供32/48/64/100多种封装。海振远科技可以为用户提供技术支持,同时也可以提供样品及批量采购的商务支持。
小结
本章节主要是介绍FPGA+MCU在音频处理上的低成本解决方案及海振远AG32方案特点。下一章节,我们将介绍AG32系列MCU用于Mini-LED背光控制,欢迎持续关注我们。
如需要了解更多信息,或者更多的产品及方案,欢迎联系海振远科技。
- 2024-07-23
-
发表了主题帖:
FPGA+MCU在音频处理上的低成本解决方案
FPGA+MCU在音频处理上的低成本解决方案
2024-7-23 陆玫丹
AGM——技术资讯
Technology NEWS
前言
AGM AG32的架构是FPGA + MCU,并且AG32与STM32的关键兼容,这个低成本的AG32器件,在音频处理(语音识别、降噪、声音增强等)的应用上有明显的优势。
AG32内置2K的FPGA资源,采用RISC-V核,通过FPGA和RISC-V MCU的结合,可以更有效、方便的对声音信号进行采集、滤波处理、算法处理和输出。
AGRV2K的引脚说明
1、AG32具备最高248MHz时钟频率,拥有丰富的外设,包括五个UART、两个I2C、支持USB、CAN和SPI通道等丰富的外围模块,以其高速的指令执行速度、方便的JTAG调试方式和低功耗等特性为数据采集与处理的设计提供了一个较为完善的平台。
2、AG32拥有3x12位最多3M SPS的ADC(17个通道),和2个DAC,并且提供两个双通道比较器。
3、AG32初始与STM32管脚兼容,但可以通过配置文件全部灵活重定义,给内核中的MCU和CPLD使用,因此可提供超出STM32的GPIO口数量。
4、AG32的MCU和CPLD通过芯片内部AHB总线高速通信,速度远超传统SPI。
5、AG32内置CPLD可实现客户定制逻辑功能。
6、提供32/48/64/100多种封装。海振远科技可以为用户提供技术支持,同时也可以提供样品及批量采购的商务支持。
小结
本章节主要是介绍FPGA+MCU在音频处理上的低成本解决方案及海振远AG32方案特点。下一章节,我们将介绍AG32系列MCU用于Mini-LED背光控制,欢迎持续关注我们。
如需要了解更多信息,或者更多的产品及方案,欢迎联系海振远科技。
- 2024-07-21
-
回复了主题帖:
AGM FPGA介绍——AG10KF256
川普即将二进白宫,国产替代,势不可挡。加油!