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.

[参考译文] TMS570LS3137:TMS570LS3137

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1406110/tms570ls3137-tms570ls3137

器件型号:TMS570LS3137

工具与软件:

我正在尝试在2个引脚上生成 PWM 信号、但第2个引脚请求无法在我创建的一个引脚中生成、但使用 HTURAM 无法生成另一个引脚。 HET 代码如下所述。

PWM_PERIOD .equ 4.
PWM_PIN_num1 .equ 9;第一个 PWM 引脚编号
PWM_PIN_num2 .equ 10;第二个 PWM 引脚编号
INIT_COMPARE1 .equ 2;第一个引脚的初始比较值
INIT_COMPARE2 .equ 3;第二个引脚的初始比较值
init_HR_delay .equ 120

;用于生成虚拟计数器的计数器指令
l00 CNT{reqnum=0、request=GENREQ、reg=A、irq=off、max=PWM_period};

;第一个 PWM 引脚的 ECMP 设置
L01 ECMP{next=l04、hr_lr=高电平、en_pin_action=on、cond_addr=L02、pin=PWM_PIN_num1、action=PULSELO、reg=A、IRQ=off、data=init_COMPARE1、hr_data=init_HR_delay};

;第一个引脚的 MOV32指令
L02 MOV32{REMOTE=L01、TYPE=IMTOREG&REM、reg=none、data=init_COMPARE1、hr_data=init_HR_delay};

;第二个 PWM 引脚的 ECMP 设置
L03 ECMP{next=l06、hr_lr=高电平、en_pin_action=on、cond_addr=L05、pin=PWM_PIN_num2、action=PULSELO、reg=A、IRQ=off、data=init_COMPARE2、hr_data=init_HR_delay};

;第二个引脚的 MOV32指令
L04 MOV32{REMOTE=L03、type=IMTOREG&REM、reg=none、data=init_COMPARE2、hr_data=init_HR_delay};

;跳转到下一条指令
L05 BR{next=L00、cond_addr=L00、event=NOCOND};

;跳回 PWM 设置的开始
L06 BR{next=L03、cond_addr=L03、event=NOCOND};

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

    C 代码。

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    #define SINE_FREQ_DIVIDER 16 //5 //4.882 (适用于2KHz 正弦波、LRP=64VCLK)//16

    /*允许的 LR 预分频系数为16、32、64和128。 少一点
    *多于32将没有足够的时隙供 N2HET 程序使用
    *运行。
    *
    *
    * LRPFC 可以是5、6或7。
    * 7 ->一个 LR = 128 VCLK2
    * 6 ->一个 LR = 64 VCLK2
    * 5 ->一个 LR = 32 VCLK2
    * 4 ->一个 LR = 16 VCLK2
    */
    #define LRPFC 7 //6.
    /*输出正弦波信号的引脚编号*/
    #define NHET1_PIN_PWM PIN_HET_4
    #define NHET1_PIN_PWM_1 PIN_HET_19

    */./............. /
    /*将被载入 NHET1 CNT 指令的 PWM 周期。 最小值
    * PWM 的 PWM 基础频率是1 * LRP */
    #define CNT_MAX_PERIOD 16U

    /*要将正弦波数字化的采样点数*/
    #define SAMPLE_SIZE 1.

    const uint32 sine_table_percent[sample_size]={1024};

    uint32 sine_table[sample_size];
    uint32 sine_table_1[sample_size];
    void htuInit (void);
    void configNHET1 (void);
    void calculate_ecmp_compare (void);
    void hetInit (void);

    void APP_Moder Valve_Init (void)

    htuInit ();

    hetInit ();

    configNHET1();


    }


    void htuInit (void){
    /* DCP0 CPx 元素数量= 1、帧计数= SAMPLE_SIZE */
    htuRAM1 ->DCP[0].ITCOUNT = 0x00010000 + SAMPLE_SIZE;

    /* DCP0 CPx DIR =主存储器到 NHET */
    /*大小= 32位*/
    /* ADDMH = 16字节*/
    /* ADDFM =后增量主存储器*/
    /* TMBA =循环缓冲器 A */
    /* TMBB =单次触发缓冲器 B (未使用缓冲器 B)*/
    /* IHADDR = 0x28 MOV32数据字段*/
    htuRAM1 ->DCP[0].IHADDRCT =(htuRAM1 ->DCP[0].IHADDRCT & 0x0)|
    0x1 << 23 |// DIR
    0x0 << 22 |// size
    0x0 << 21 |// ADDMH
    0x0 << 20 |// ADDFM
    0x1 << 18 |// TMBA
    0x0 << 16 |// TMBB
    0x28 << 0;// IHADDR

    /*源缓冲区的 DCP0 CPA 起始地址*/
    htuRAM1 ->DCP[0].IFADDRA =(unsigned int) sine_table;

    /*启用 DCP0 CPA */
    htuREG1 -> CPENA = 0x00000001;

    /*启用 HTU */
    htuREG1 ->GC = 0x00010000;
    }


    void configNHET1 (void)

    /*配置 LRP 预分频器、hr 始终为1、lr 可以为
    * 16、32、64或128 */
    hetREG1->PFR = LRPFC << 8;

    /* calculate_ecmp_compare()将计算实际比较值
    *以及每个采样点的高分辨率延迟值
    *要加载到 NHET1 ECMP 引脚指令中的同一波的输出*/
    // calculate_ecmp_compare ();

    SINE_TABLE[0]=1024;

    /*在 HTU 的通道0上启用 DMA 请求。 在 CNT 指令中
    * DMA 请求被置为 HTU 模块的通道0 */
    hetREG1->REQENS=3;

    /*将选定的引脚设置为输出。 */
    hetREG1->DIR =(1<< NHET1_PIN_PWM)|(1<< NHET1_PIN_PWM_1);

    /*根据定义的宏将 PWM 周期加载到 CNT 指令*/
    hetRAM1->Instruction[Phet_L00_0].Control =(UINT32)(CNT_MAX_PERIOD - 1)|
    (hetRAM1->Instruction[Phet_L00_0].Control 和0xFFFD0000);

    /*配置引脚数以输出 PWM */
    hetRAM1->Instruction[Phet_L01_0].Control =
    (hetRAM1->Instruction[Phet_L01_0].Control & 0xFFFFE0FF)|
    (NHET1_PIN_PWM<< 8);

    hetRAM1->Instruction[Phet_L03_0].Control =
    (hetRAM1->Instruction[Phet_L03_0].Control & 0xFFFFE0FF)|
    (NHET1_PIN_PWM_1 << 8);

    //从 hetinit 移动


    hetREG1->GCR = 0x01030001U;
    }


    /*此函数计算比较值和高分辨率延迟
    *要加载到 NHET1 ECMP 指令中、以便生成 PWM
    *占空比
    */
    void calculate_ecmp_compare (void)

    uint16 i=0;
    /*使用 SAMPLE_SIZE 来确定采样点的数量。 正弦
    *波频率为 F = 1/((SINE_FREQ_DIVIDER * LRP)* SAMPLES)。
    *生成分频正弦波频率的方法是增加
    *反向等于 PWM 基频。 开关将打开和关闭
    *我们还需要调整比较值以生成 PWM 占空比
    每个正弦波采样点的开关频率。
    */
    for (i=0;i<=SAMPLE_SIZE;i++){
    /* CNT_MAX_PERIOD * 128可提供高分辨率总数
    *一个 PWM_period 内的时钟。 乘法是通过执行完成的
    * CNT_MAX_PERIOD 左移7位。
    */
    SINE_TABLE[i]=(SINE_TABLE_percent[i]*(CNT_MAX_PERIOD << 7));
    }
    }

    void hetInit (void)

    /**@b INITIALIZE @b HET */


    hetREG1->GCR = 0U;

    (void) memcpy ((void*) hetRAM1、(void*) HET_INIT0_PST、sizeof (HET_INIT0_PST);

    // hetREG1->PFR = 0x309;

    /*保留引脚- 8、20、21、26、29作为电压监控的输入*/
    hetREG1->DIR = 0xFFFFFFFFU;

    /*清除所有中断标志*/
    hetREG1->FLG = 0xFFFFFFFFU;

    /*禁用请求行*/
    hetREG1->REQENS = 0x00000000U;

    /* NHET 请求行未分配给 HTU */
    hetREG1->REQDS = 0x00;

    /* N2HET1在连续模式中被配置为主器件并且被打开*/
    // hetREG1->GCR = 0x01030001U;

    }

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

    尊敬的 Suguresh:

    对延迟响应深表歉意。

    我上周休假、因此我有很多其他问题需要处理。

    现在我开始处理这个问题!

    [quote userid="476668" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1406110/tms570ls3137-tms570ls3137我正在尝试在2引脚上生成 PWM 信号、但第2个引脚请求无法在我制造的一个引脚中生成另一个引脚不能使用 HTURAM 生成。 下面列出了 HET 代码。[/QUOT]

    我不明白这一点。

    如果我错了、请更正我:

    您正在尝试在引脚9和引脚10上生成两个 PWM 信号、但最后、PWM 仅在引脚9上生成、您无法在引脚10上看到 PWM 信号。 是这样吗?

    ——
    谢谢、此致、
    Jagadish。

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

    是使用 HTU RAM

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

    尊敬的 Suguresh:

    [报价 userid="524805" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1406110/tms570ls3137-tms570ls3137/5387322 #5387322"]您正在尝试在引脚9和引脚10上生成两个 PWM 信号、但最后 PWM 仅在引脚9上生成、您将无法在引脚10上看到 PWM 信号。 正确吗?

    是这样吗?

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

    实际上、我现在给用户讲的是、我们可以采用这种情况、我需要知道需要创建2个 DCP 的两个信号、并且通过提供 HET RAM 中的值、我需要控制2个 PWM 信号。