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/TMS320F28377S:关于缓冲器 DAC 正弦生成中的 CPU 定时器 ISR

Guru**** 2463330 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/696703/ccs-tms320f28377s-regarding-the-cpu-timer-isr-in-buff-dac-sine-generation

器件型号:TMS320F28377S

工具/软件:Code Composer Studio

中断空 CPU_timer0_ISR (空)

//
//启动 CPU 定时器1以指示中断开始
//
CpuTimer1Regs.TCR.ALL = 0x0000;

//
//将当前正弦值写入缓冲 DAC
//
DAC_PTR[DAC_NUM]->DACVALS.ALL = sgen_out;

//
//记录当前正弦值
//
dlog (sgen_out);

//
//计算下一个正弦值
//
sgen.calc(&sgen);

//
//缩放下一个正弦值
//
sgen_out =(sgen.out + 32768)>> 4;

//
//确认此中断以从组1接收更多中断
//
PieCtrlRegs.PIEACX.ALL = PIEACK_Group1;

//
//停止 CPU 定时器1以指示中断结束
//
CpuTimer1Regs.TCR.ALL = 0x0010;

//
//计算以周期为单位的中断持续时间
//
interruptCycles = 0xFFFFFFUL - CpuTimer1Regs.TIM.ALL;

//
//计算以微秒为单位的中断持续时间
//
interruptDuration_us = cpuPeriod_us * interruptCycles;

//
//重新加载 CPU 定时器1
//
CpuTimer1Regs.TCR.ALL = 0x0030;

上述几行实际上是如何工作的?

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

    您突出显示的所有代码在其上方都有注释。 是否有您不清楚的特定问题?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    静态内联 void dlog (uint16值)

    dataalog[ndx]=值;
    if (++ndx =DLOG_SIZE)

    NDX = 0;

    dataalog[0]= ndx;


    关于 dlog 函数,在 dlog 用法的第一次迭代中,sgen_out 存储在 dlog[0](因为 ndx =0)和更高版本的 dlog[0]=ndx 中。
    我无法理解该部分。
    2)是在此 while 循环中的 setfreq()、set gain()、setoffset()调用函数,因为它们已在 setwave()函数中调用

    while (1)

    setFreq();//设置输出频率和最大输出频率
    setGain();//设置波形幅度
    setOffset();//设置波形的偏移
    maxOutput_lsb = getMax ();
    minOutput_lsb = getMin ();
    PK_TO_pk_lsb = maxOutput_lsb - minOutput_lsb;
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Surya、

    1.是的、这看起来像一个错误。 正确、对于 dlog 函数、每次索引重置为零时都会覆盖第一个记录的值。 我将会提交一个错误以纠正该问题。
    2、是的、是的。 setFreq()、setGain()和 setOffset()是内联函数,而 configureWave()不是内联函数。 这样、while 循环中没有函数调用命中。