完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
根据例程更改序列采样,利用一个定时器定时进行序列采样,自动放入DMA缓冲区,由于需要的通道和数据较多,设置缓冲区大于1024位,现发现当我设置大于1024,例如2048位的时候,Printf()输出就全变成了零,多次尝试更改大于,只要大于1024就会出现这种问题,哪位大侠能协助解决。 #define APP_ADC16_SEQ_START_POS (0U) #ifndef APP_ADC16_CORE ATTR_RAMFUNC_WITH_ALIGNMENT(ADC_SOC_DMA_ADDR_ALIGNMENT) uint32_t seq_buff[APP_ADC16_SEQ_DMA_BUFF_LEN_IN_4BYTES]; 上面是数据的定义。 hpm_stat_t process_seq_data(uint32_t *buff, int32_t start_pos, uint32_t len) if (ADC16_IS_SEQ_DMA_BUFF_LEN_INVLAID(len)) { for (int i = start_pos; i < start_pos + len; i+=8) { return status_success; } 这是数据打印输出的程序部分,与例程没多大区别。 |
|
相关推荐
2个回答
|
|
打扰各位了,我自己找到问题所在了,SDK在hpm_soc_feature.h里定义了序列采样模式下DMA缓冲区最大内存数为4096U,按4byte计算在APP里最大只能定义1024了,如果加大此数,相应也会允许APP里增加到最大内存数。
hpm_soc_feature.h里的定义:#define ADC_SOC_SEQ_MAX_DMA_BUFF_LEN_IN_4BYTES (4096U) 我的采样APP里的定义:#define APP_ADC16_SEQ_DMA_BUFF_LEN_IN_4BYTES (1024U) |
|
|
|
感谢各位,找到问题了,例程里有个判据if (ADC16_IS_SEQ_DMA_BUFF_LEN_INVLAID(len)) {
return status_invalid_argument; 它判断DMA缓存是否越限的,而在hpm_soc_feature.h里定义了越限值是4096,为4byte1024的上限,如果需要更多缓存,更改hpm_soc_feature.h里的越限值就可以了。 |
|
|
|
只有小组成员才能发言,加入小组>>
400个成员聚集在这个小组
加入小组自己做的hpm5321和6750板子怎么都没有1.1的输出呢?
1185 浏览 1 评论
关于hpm6364的femc同时使用外接sdram和sram的问题
991 浏览 1 评论
972 浏览 0 评论
847 浏览 1 评论
945 浏览 0 评论
【盖楼抢好礼】欢迎先楫半导体HPMicro入驻电子发烧友社区!
25585浏览 532评论
2865浏览 22评论
USBX范例中启用 double FPU , 运行异常,卡死在tx_risc_v_trap_handler函数
3027浏览 5评论
1850浏览 5评论
请问Segger Embedded Studio这个窗口不小心拉出来悬浮后怎么塞回去?
3036浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-22 17:57 , Processed in 0.517835 second(s), Total 46, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号