TI论坛
直播中

严岩

8年用户 181经验值
私信 关注
[问答]

请教关于TMS320C6670 REG_D_Descriptor 和list_buffer 累加问题

我知道写一个队列的REG_D_Descriptor,就是向该队列添加一个包,读的话就是取一个包。
1、我对发送端过程的理解是这样的,空闲队列先压一个descriptor到发送队列,也就是向发送队列的REG_D_Descriptor写值,当该描述符到达队列的头部时,TXDMA会自动弹出descriptor(不管发送队列是什么类型的,都会自动?至少应该除了pend queue),然后解析描述符的内容,把数据发送完后,就会把描述符回收到return queue,当return queue不为空的时候就触发中断,同时list_buffer里面添加一个描述符。这样的理解哪里有问题,希望能帮忙说明下!
2、上述过程中的TXDMA会自动弹出descriptor,是不是TXDMA 去读取了发送队列的REG_D_Descriptor?假如发送队列里同时压入了4个descriptor,那么发送队列的REG_D_Descriptor应该是最后一个进入的描述符的指针和大小,前面三个的应该覆盖了,那么TXDMA 是怎么去知道前3个descriptor的描述符指针和大小呢?是不是有个描述符缓冲区?
3、按我的理解,return queue应该在添加一个descriptor后会触发中断,那是因为return queue非空,那么中断应该要把return queue里的描述符弹出去吧,如果return queue 是pend queue就很好理解,但return queue是通用队列就不好理解了,我看的navigator的例程里,accumulator中断里并没有弹出队列。
4、我不明白list_buffer里面是什么时候添加一个描述符的,是空闲队列将描述符压入发送队列的时候还是 TXDMA从发送队列弹出描述符的时候?或者是retun queue里添加描述符的时候?
最近在研究这个,作为一个学生,实在是有太多的不懂,可能问题太多了,还请谅解。

回帖(1)

杨娟

2018-8-6 09:37:26
您好,
消除疑问最好的办法就是做实验,看结果,从实验结果来验证理解消除疑问。可以参考STK中navigator例程:
http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/47664.aspx
1.    你的理解大致是对的。注意只有将描述符放到TxQ,才会被qmss自动读走并通过pktdma将数据读入内部buffer,将描述符放到普通的队列是不会被处理的,至于发送完成后描述符放到一个tx completion queue中,是否产生中断取决于软件配置,如果这个Tx completion queue被PDSP acc channel监控并且配置阈值为1,则是当queue中有一个描述符就会产生一个中断事件;
2. 描述符push到队列后,硬件会自动维护队列中描述符的链接关系,然后依次进行处理,上层在queue中看不到每个描述符的地址,RegD也不能反映描述符的地址;
3. 如1所述,acc channel监视的queue,当queue中描述符个数达到acc channel配置的阈值后,PDSP会自动将描述符从queue中搬到list buffer,这是硬件做的,不用在中断中由软件来干预;
                                                                          

举报

更多回帖

发帖
×
20
完善资料,
赚取积分