根据例程更改序列采样,利用一个定时器定时进行序列采样,自动放入DMA缓冲区,由于需要的通道和数据较多,设置缓冲区大于1024位,现发现当我设置大于1024,例如2048位的时候,Printf()输出就全变成了零,多次尝试更改大于,只要大于1024就会出现这种问题,哪位大侠能协助解决。
#define APP_TICK_MS (1000)
#define APP_ADC16_SEQ_START_POS (0U)
#define APP_ADC16_SEQ_DMA_BUFF_LEN_IN_4BYTES (1024U)
#define APP_ADC16_SEQ_IRQ_EVENT adc16_event_seq_single_complete
#ifndef APP_ADC16_CORE
#define APP_ADC16_CORE BOARD_RUNNING_CORE
#endif
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)
{
adc16_seq_dma_data_t *dma_data = (adc16_seq_dma_data_t *)buff;
if (ADC16_IS_SEQ_DMA_BUFF_LEN_INVLAID(len)) {
return status_invalid_argument;
}
for (int i = start_pos; i < start_pos + len; i+=8) {
//printf("Sequence Number:%02d ", dma_data[i].seq_num);
//printf("Cycle Bit: %02d ", dma_data[i].cycle_bit);
//printf("ADC Channel: %02d ", dma_data[i].adc_ch);
printf("%05d\n", dma_data[i].result);
}
return status_success;
}
这是数据打印输出的程序部分,与例程没多大区别。
更多回帖