This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/DRV8312-C2-Kit:如何使用数据记录模块显示4个以上的通道?

Guru**** 2332680 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/581946/ccs-drv8312-c2-kit-how-to-display-more-than-4-channels-using-datalog-module

部件号:DRV8312-C2-Kit

工具/软件:Code Composer Studio

数据记录模块仅定义4个输入。 如果我想显示4个以上的输入信号,该怎么办? 谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的,您可以定义4个以上的输入,但您必须定义更多的dlog缓冲区,更改源代码文件中的_init()和_update(),并且还需要在头文件中为dlog缓冲区定义更多的指针。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Yanming您好,感谢您的回复。  我需要总共8个频道。 我已修改 头文件

    #ifndef __DLOG4CH_H__
    #define __DLOG4CH_H__
    
    #define NULL 0
    
    typedef结构{长任务; //变量:任务地址指针
    int *iptr1; //输入:第一个输入指针(Q15)
    int *iptr2; //输入:第二个输入指针(Q15)
    int *iptr3; //输入:第三个输入指针(Q15)
    int *iptr4; //输入:第四个输入指针(Q15)
    int *iptr5; //输入:第一个输入指针(Q15)
    int *iptr6; //输入:第二个输入指针(Q15)
    int *iptr7; //输入:第三个输入指针(Q15)
    int *iptr8; //输入:第四个输入指针(Q15)
    内部触发值; //输入:触发点(Q15)
    Int prescalar; //参数:数据日志预分页
    int skip_cntr; //变量:数据日志跳过计数器
    内置连接器; //变量:数据日志计数器
    长写_ptr; //变量:图形地址指针
    内部大小; //参数:最大数据缓冲区
    int (*init)(); //指向init函数的指针
    int (*update)();//指向更新函数
    的指针} DLOG_4CH;
    
    typedef DLOG_4CH * DLOG_4CH_handle;
    
    void DLOG_4CH_INIT (void *);
    void DLOG_4CH_UPDATE (void *);
    
    /*=====================================================================================================
    DLOG_4CH对象的默认初始化程序。
    ============================================================================================================= */
    
    #define DLOG_4CH_defaults{0UL,\
    空,\
    空,\
    空,\
    空,\
    空,\
    空,\
    空,\
    空,\
    0,\
    1,\
    0,\
    0,\
    0UL,\
    0x0C0,\
    (int (*)(int)) DLOG_4CH_INIT,\
    (int (*)(int)))DLOG_4CH_UPDATE }
    
    #endif 

    和源代码:

    .def _DLOG_4CH_UPDATE
    .def _DLOG_4CH_INIT
    
    ;数据日志缓冲区定义
    buffer_size 设置0C8h
    
    DLOG_4CH_buff1 .USect "DLOG",buff_size
    DLOG_4CH_buff2 使用"DLOG",buff_size
    DLOG_4CH_buff3 使用"DLOG",buff_size
    DLOG_4CH_buff4 使用"DLOG",buff_size
    DLOG_4CH_buff5 使用"DLOG",buff_size
    DLOG_4CH_buff6 使用"DLOG",buff_size
    DLOG_4CH_buff7 使用"DLOG",buff_size
    DLOG_4CH_buff8 .usect "DLOG",buy_size
    ;===================================================================
    ;初始化函数===================================================================================================
    
    
    _DLOG_4CH_INIT:
    MOVL XAR5,#POS_TRIG_S1
    MOVL * XAR4,XAR5 ; TASK_POS_TRIG_S1
    ADDB XAR4,#10 ; XAR4->trig_value
    
    MOV *+XAR4[2],#0
    
    MOVL XAR5,#DLOG_4CH_buff1
    MOVL *+ XAR4[4],XAR5 ; write_ptR=DLOG_4CH_buff1
    
    
    MOV AL,*+XAR4[6] ; ACC=大小
    MOV *+XAR4[3],所有 ; cntr=size
    LRETR
    
    =====================================================================================================================
    ; Datalog Update函数
    ;===========================================================================================
    
    _DLOG_4CH_UPDATE:
    SETC SXM
    MOVL XAR5,XAR4 ; XAR4->task
    MOVL XAR7,* XAR4++ ; XAR4->iptr1, XAR7=task
    ADDB XAR5,#10 ; XAR5->trig_value
    磅 * XAR7. ;分支到任务
    
    位置_触发_ S1:
    MOV ACC,* XAR5 ; ac=trig_value
    MOVL XAR6,* XAR4 ; XAR6=iptr1.
    子 ACC,* XAR6 ; ACC=(Trig_value -*iptr1)
    BF DL_EXIT,Leq ;如果ACC <= 0,则退出
    
    MOVL XAR6,#POS_TRIG_S2
    MOVL *—XAR4,XAR6 ; TASK_POS_TRICG_S2
    LRETR
    
    位置_trig_S2:
    MOV ACC,* XAR5 ; ac=trig_value
    MOVL XAR6,* XAR4 ; XAR6=iptr1.
    子 ACC,* XAR6 ; ACC=(Trig_value -*iptr1)
    BF DL_EXIT,GEQ ;如果ACC >= 0,则退出
    
    MOVL XAR6,#DL_riggered
    MOVL *—XAR4,XAR6 ; TASK_POS_TRICG_S2
    LRETR
    
    DL_触发:
    包括 *+XAR5[2] ; skip_cntr=skip_cntr+1
    MOV ACC,*+XAR5[2] ; ac=skip_cntr
    子 ACC,*+XAR5[1] ; ac=skip_cntr-prescalar
    SBF DL_EXIT,NEQ ;如果(cskip_cntr+1)< prescalar,则退出
    
    MOV *+XAR5[2],#0 ; skip_cntr=0
    MOV ACC,*+XAR5[3] ; ACC=cntr
    SBF DLOG_END,EQ
    
    12月 *+XAR5[3] ; cntr=cntr-1
    ADDB XAR5,#4 ; XAR5->write_ptr
    
    MOVL XAR6,* XAR5 ; XAR6=write_ptr
    ADDB XAR6,#1 ; XAR6=write_ptR+1
    MOVL * XAR5,XAR6 ; write_ptR=write_ptr +1
    SubB XAR6,#1 ; XAR6=write_ptr
    
    MOV AR0,#buy_size ; ar0=buy_size
    
    
    ; IPTR1所指的日志样本
    MOVL XAR7,* XAR4++ ; XAR7=iptr1.
    MOV AL,* XAR7 ; AL=*iptr1.
    无操作 *,ARP6
    MOV *0++,AL ;*write_ptr=*iptr1, XAR6=write_ptr+size
    
    ; IPTR2指向的日志示例
    MOVL XAR7,* XAR4++ ; XAR7=iptr2
    MOV AL,* XAR7 ; AL=*iptr2.
    无操作 *,ARP6
    MOV *0++,AL ;*write_ptr=*iptr2, XAR6=write_ptr+size
    
    ; IPTR3指向的日志示例
    MOVL XAR7,* XAR4++ ; XAR7=iptr3
    MOV AL,* XAR7 ; AL=*iptr3.
    无操作 *,ARP6
    MOV *0++,AL ;*write_ptr=*iptr3, XAR6=write_ptr+size
    
    ; IPTR4指向的日志示例
    MOVL XAR7,* XAR4++ ; XAR7=iptr4
    MOV AL,* XAR7 ; AL=*iptr4.
    无操作 *,ARP6
    MOV *0++,AL ;*write_ptr=*iptr4, XAR6=write_ptr+size
    LRTR
    
    ;IPTR5所指的日志样本
    MOVL XAR7,* XAR4++ ; XAR7=iptr5
    MOV AL,* XAR7 ; AL=*iptr5.
    无操作 *,ARP6
    MOV *0++,AL ;*write_ptr=*iptr5, XAR6=write_ptr+size
    LRTR
    
    ;IPTR6所指的日志样本
    MOVL XAR7,* XAR4++ ; XAR7=iptr5
    MOV AL,* XAR7 ; AL=*iptr5.
    无操作 *,ARP6
    MOV *0++,AL ;*write_ptr=*iptr5, XAR6=write_ptr+size
    LRTR
    ;IPTR7所指的日志样本
    MOVL XAR7,* XAR4++ ; XAR7=iptr5
    MOV AL,* XAR7 ; AL=*iptr5.
    无操作 *,ARP6
    MOV *0++,AL ;*write_ptr=*iptr5, XAR6=write_ptr+size
    LRTR
    
    ;IPTR8所指的日志样本
    MOVL XAR7,* XAR4++ ; XAR7=iptr5
    MOV AL,* XAR7 ; AL=*iptr5.
    无操作 *,ARP6
    MOV *0++,AL ;*write_ptr=*iptr5, XAR6=write_ptr+size
    LRETR
    
    ;重新初始化模块,以便在下次触发日志记录时记录数据
    
    DLOG_END:
    
    MOVL XAR6,#DLOG_4CH_buff1
    MOVL *+ XAR5[4],XAR6 ; write_ptR=DLOG_4CH_buff1
    
    MOVL XAR6,#POS_TRIG_S1
    MOVL *—XAR4,XAR6 ; TASK_POS_TRICG_S2
    
    MOV AL,*+XAR5[6] ; ACC=大小
    MOV *+XAR5[3],所有 ; cntr=size
    
    DL_退出:
    LRETR 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    当我编译代码时,它显示错误:

    "../F2.8035万_RAM_BLDC_Sensorless.CMD",第90行:错误:程序不适合
    可用内存。区域的照射行程定位和对齐/阻止失败
    ".ebss"大小0x1ce第1页。 可用内存范围:
    DataRAM大小:0x800未使用:0x1b8最大孔:0x1b8



    有什么建议? 谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    dlog缓冲区没有这样大的RAM,您必须增加RAM大小或减少dlog通道。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Yanming您好,感谢您的回复。 因为我真的需要7或8个通道来显示电流和电压之间的关系,您知道如何增加RAM大小吗? CCS中是否有其他方法可以存储不同变量的数据? 然后我用其他工具绘制图表。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    更改cmd文件以增加数据记录部分。 如果没有足够的RAM,也许可以使用F2.8069万 controlCARD,该设备具有更多的RAM。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Yanming,您好,我只有F2.8035万。 如何更改cmd文件? 谢谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    增加cmd文件中的数据RAM大小,最好参阅TMS320C28x汇编语言工具用户指南和TMS320C28x优化C,C++编译器用户指南,以了解命令文件的内容以及如何配置。