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.

[参考译文] TMDSDOCK28335:F28335

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1062354/tmdsdock28335-f28335

器件型号:TMDSDOCK28335
你(们)好 
我使用的是 F28335 DSP (www.ti.com/.../)。 我正在尝试进行模数转换。 
我在 controlSUITE 中尝试了一些示例、例如 ADCSOC、但无法理解数字信号的输出引脚。 输入信号是一个具有一些偏移的正弦波、因此信号将处于0-3V 范围内。 
我已将信号发生器输出连接到引脚 ADCA1和 ADCA2、但不知道我将在哪个引脚上接收数字输出。 我将感谢他们的指导和帮助。 

代码-

//######################################################################################################################
//
//文件:example_2833xAdh
//
//标题:ADC 转换开始示例
//
//! 添加到组 F2833x_example_list
//!

ADC 转换开始(ADC_SoC)


//!
//! 此 ADC 示例使用 ePWM1在 SEQ1上生成周期性 ADC SOC。
//! 转换了 ADCINA3和 ADCINA2两个通道。
//!
//! b 监视\b 变量\n
//! - Voltage1[10]-最后10个 ADCRESULT0值
//! - Voltage2[10]-最后10个 ADCRESULT1值
//! -转换计数-当前结果编号0-9
//! -循环计数-空闲循环计数器
//
//######################################################################################################################
//$TI 发行版:$
//$Release Date:$
//版权所有:
//版权所有(C) 2009-2021 Texas Instruments Incorporated - http://www.ti.com/
//
//以源代码和二进制形式重新分发和使用,有无
//如果满足以下条件,则允许进行修改
//满足:
//
//重新分发源代码必须保留上述版权
//注意、此条件列表和以下免责声明。
//
//二进制形式的重新分发必须复制上述版权
//注意、中的条件列表和以下免责声明
//随提供的文档和/或其他材料
//分布。
//
//德州仪器公司的名称和的名称都不是
//其贡献者可用于认可或推广衍生产品
//未经特定的事先书面许可,从该软件下载。
//
//本软件由版权所有者和作者提供
//“原样”以及任何明示或暗示的保证,包括但不包括
//限于对适销性和适用性的暗示保证
//一个特定的目的是免责的。 在任何情况下、版权均不得
//所有者或贡献者应对任何直接、间接、偶然、
//特殊、典型或必然的损害(包括但不包括)
//仅限于采购替代货物或服务;
//数据或利润;或业务中断)
//责任理论,无论是合同责任、严格责任还是侵权行为
//(包括疏忽或其他)以任何方式因使用而产生
//此软件,即使已被告知可能会发生此类损坏。
//$
//######################################################################################################################

//
//包含的文件
//
#include "DSP28x_Project.h"//器件头文件和示例 include 文件

//
//函数原型
//
_interrupt void ADC_ISR (void);

//
//全局
//
uint16环计数;
UINT16转换计数;
uint16 Voltage1[10];
uint16 Voltage2[10];

//
//主函
//
void main (void)

//
//步骤1. 初始化系统控制:
// PLL、安全装置、启用外设时钟
//此示例函数位于 DSP2833x_SYSCTRL.c 文件中。
//
InitSysCtrl();

EALLOW;
#IF (CPU_FRQ_150MHz)//默认- 150MHz SYSCLKOUT
//
// HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 150/(2*3)= 25.0MHz
//
#define ADC_MODCLK 0x3
#endif
#IF (CPU_FRQ_100MHz)
//
// HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 100/(2*2)= 25.0MHz
//
#define ADC_MODCLK 0x2
#endif
EDIS;

//
//定义 ADCCLK 时钟频率(小于或等于25MHz)
//假设 InitSysCtrl()已将 SYSCLKOUT 设置为150MHz
//
EALLOW;
SysCtrlRegs.HISPCP。all = ADC_MODCLK;
EDIS;

//
//步骤2. 初始化 GPIO:
//此示例函数位于 DSP2833x_GPIO.c 文件和中
//说明了如何将 GPIO 设置为其默认状态。
//
// InitGpio();//针对此示例跳过

//
//步骤3. 清除所有中断并初始化 PIE 矢量表:
//禁用 CPU 中断
//
Dint;

//
//将 PIE 控制寄存器初始化为默认状态。
//默认状态为禁用所有 PIE 中断和标志
//被清除。
//此函数位于 DSP2833x_PIECTRL.c 文件中。
//
InitPieCtrl();

//
//禁用 CPU 中断并清除所有 CPU 中断标志:
//
IER = 0x0000;
IFR = 0x0000;

//
//使用指向 shell 中断的指针初始化 PIE 矢量表
//服务例程(ISR)。
//这将填充整个表,即使是中断也是如此
//在本例中未使用。 这对于调试很有用。
//可以在 DSP2833x_DefaultIsr.c 中找到 shell ISR 例程
//此函数可在 DSP2833x_PieVect.c 中找到
//
InitPieVectTable();

//
//此示例中使用的中断被重新映射到
//此文件中的 ISR 函数。
//
EALLOW;//这是写入 EALLOW 受保护寄存器所必需的
PieVectTable.ADCINT =&ADC_ISR;
EDIS;//这是禁止写入 EALLOW 受保护寄存器所必需的

//
//步骤4. 初始化所有器件外设:
//此函数位于 DSP2833x_InitPeripherals.c 中
//
// InitPeripherals ();//此示例不需要
InitAdc ();//对于此示例,初始化 ADC

//
//步骤5. 特定于用户的代码、启用中断:
//

//
//在 PIE 中启用 ADCINT
//
PieCtrlRegs.PIEIER1.bit.INTx6=1;
IER |= M_INT1;//启用 CPU 中断1
EINT;//启用全局中断 INTM
ERTM;//启用全局实时中断 DBGM

LoopCount = 0;
ConversionCount = 0;

//
//配置 ADC
//
AdcRegs.ADCMAXCONV.ALL = 0x0001;//在 SEQ1上设置2 conv
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x3;//将 ADCINA3设置为第1个 SEQ1转换器
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x2;//将 ADCINA2设置为第2个 SEQ1转换器

//
//从 ePWM 启用 SOCA 以启动 SEQ1
//
AdcRegs.ADCTRL2.bit.ePWM_SOCA_SEQ1 = 1;

AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1;//启用 SEQ1中断(每个 EOS)

//
//假设 ePWM1时钟已在 InitSysCtrl()中启用;
//
EPwm1Regs.ETSEL.bit.SOCAEN = 1;//启用组上的 SOC
EPwm1Regs.ETSEL.bit.SOCASEL = 4;//从 CPMA 中选择 SOC、以进行递增计数
EPwm1Regs.ETPS.bit.SOCAPRD = 1;//在发生第一个事件时生成脉冲
EPwm1Regs.CMPA.half.CMPA = 0x0080;//设置比较值
EPwm1Regs.TBPRD = 0xFFFF;//为 ePWM1设置周期
EPwm1Regs.TBCTL.bit.CTRMODE = 0;//向上计数并启动

//
//等待 ADC 中断
//
for (;;)

LoopCount++;



//
// ADC_ISR -
//
_interrupt void
ADC_ISR (空)

Voltage1[ConversionCount]= AdcRegs.ADCRESULT0 >> 4;
Voltage2[ConversionCount]= AdcRegs.ADCRESULT1 >>4;

//
//如果记录了40次转换,则重新开始
//
if (ConversionCount = 9)

ConversionCount = 0;

其他

ConversionCount++;


//
//为下一个 ADC 序列重新初始化
//
AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;//复位 SEQ1
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;//清除 INT SEQ1位
PieCtrlRegs.PIEACX.ALL = PIEACK_Group1;//确认 PIE 中断

返回;


//
//文件结束
//


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

    您好!

    [引用 userid="484615" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forume/1062354/tmsdock28335-F28335"] Voltage1[ConversionCount]= AdcRegs.ADCRESULT0 >> 4;
    Voltage2[ConversionCount]= AdcRegs.ADCRESULT1 >>4;[/报价]

    如上所示、ADC 结果将在 ADC 结果寄存器中提供。 12位/16位值的 ADC 结果 在任何引脚上都不可用。

    谢谢
    Vasudha

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

    感谢 Vasudha Bhadoria。

    我是 DSP 编码的初学者。 我们如何将输出引脚配置为任何寄存器?  

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

    您好!

    不能、这不能直接完成、但您可以配置 DAC、以便将 ADC 结果复制到 DAC 输入以实现相同的效果。 让我知道 这种情况的用例。

    谢谢
    Vasudha

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

    您好!

    我想进行简单的模数转换、然后将存储的数据转换为与输入信号相同的模拟信号。 在 DSP 板的输入端、我已将具有一定偏移的交流信号(高频~50kHz)连接到 ADCpin、并且我希望复制来自 DSP GPIO 引脚的同一信号。  通过更改采样、我们可以看到对重构信号的影响、  低采样率将产生阶梯式正弦波。 此外、可以添加滤波器以消除信号(直流信号)中的噪声。

    谢谢:)

    哈米德

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

    您好!

    我想您可以使用上一篇文章中提到的 DAC 进行同样的操作。

    谢谢
    Vasudha