- 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
川普即将二进白宫,国产替代,势不可挡。加油!