TI中文支持网
TI专业的中文技术问题搜集分享网站

如何使用uPP接口实现ADC连续不断的采样?

基于EDMA可以实现pingpong缓存,从而实现ADC的连续不断的采样。但主要用于ADC采样的uPP接口使用的是专用的DMA控制器,而不是EDMA。由此得一个问题,使用uPP接口是否可实现ADC连续不断的采样?

Tony Tang:

uPP的DMA也可以实现两套参数交替传数据。通过pend位判断何时可以写入下一帧参数。所以是可以实现连续采样的。

yan wang4:

回复 Tony Tang:

你好Tony Tang,

你说的这个我不知道该怎样实现,能不能给个程序参考一下?或者加我QQ:1005938597

yan wang4:

你好Oscar Ou,

我最近也在做这方面的东西,请问你这个问题解决了吗?可不可以请教你一下,麻烦加我QQ:1005938597

Tony Tang:

回复 yan wang4:

附件里的upp例程里有。

for(i = 1; i < 1464843; i++)  {    UPP->UPQD0 = (uint32_t)&xmit_buffer;//add next DMA transfer     UPP->UPQD1 = 0x00010080;      //1 lines 128 bytes per line     UPP->UPQD2 = 0x00000080;      //no offset between lines

   while(UPQS2r->bits.PEND == 1){}; }

yan wang4:

回复 Tony Tang:

谢谢!

yan wang4:

回复 Tony Tang:

你好Tony Tang ,

我的程序是这样写的:

UARTPuts("ping\n",-2); upp_reg_hdl->UPID0 = (Uint32)upp_buffer_ping; upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(upp_buffer_ping[0]); upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(upp_buffer_ping[0]);

UARTPuts("pong\n",-2); upp_reg_hdl->UPID0 = (Uint32)upp_buffer_pong; upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(upp_buffer_pong[0]); upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(upp_buffer_pong[0]);

我是想让这两个buffer连续接收FPGA端发送的数据(目前数据是自己造的,0-32766,循环发送),即upp_buffer_ping接收0-1023,upp_buffer_pong可以继续接收后面的数据1024-2048。但实际上,两个buffer都是接收的0-1023,这是什么原因呢?

Tony Tang:

回复 yan wang4:

两个配置中间加检查pend位:

while(UPQS2r->bits.PEND == 1){};

yan wang4:

回复 Tony Tang:

您好,很高兴您能够回复我。

我单步运行程序来观察过寄存器UPIS2中的PEND位,一直是低电平,所以这个循环语句对程序是不起作用的。

yan wang4:

回复 Tony Tang:

您好,在我的整个程序运行过程中,UPIS2的值一直是0x00000080,问题是不是出在这里?

zhichang qiu:

回复 yan wang4:

您好,请问你懂的问题解决了吗

赞(0)
未经允许不得转载:TI中文支持网 » 如何使用uPP接口实现ADC连续不断的采样?
分享到: 更多 (0)