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:C2000

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/665324/ccs-tms320f28377s-c2000

器件型号:TMS320F28377S

工具/软件:Code Composer Studio

大家好、

我将 TMS320F28377S 用于我的应用、因为我需要使用 ADC。

我在 C2000 ware 中尝试过示例。 代码构建没有任何错误、它将加载到 My launchpad 中、程序运行无任何问题。

只有一件事是、当施加2V 到 ADCchannel 0和1 (J3中的 Launch Pad 引脚28、30)时、ADC 结果保持为零。

帮助我解决此问题。

Yuvaraj。

我的代码


#include "driverlib.h"
#include "device.h"


//
//定义
//
#define EX_ADC_Resolution ADC_Resolution ADC_Resolution_12位//或 ADC_Resolution_16BIT
#define EX_ADC_SIGNAL 模式 ADC_MODE_SINGLE_END_/或 ADC_MODE_DIFFERTICAL

//全局
uint16_t adcAResult0;
uint16_t adcAResult1;
uint16_t adcBResult0;
uint16_t adcBResult1;
uint16_t sDataA[10];
uint16_t rDataA[10];
uint16_t rDataPointA;
uint16_t a、j;

uint16_t AdcaResults[10];
uint16_t 结果索引;


//函数原型

void initadc (void);
void initADCSOC (void);


void main (void)

device_init();
DEVICE_initGPIO();
interrupt_initModule();
interrupt_initVectorTable();
initads();
initADCSOC();
EINT;
ERTM;

while (1)

对于(j = 0;j < 10000;j++)

对于(A = 0;A < 100;A++)


//转换,等待完成并存储结果
ADC_forceSOC (ADCA_BASE、ADC_SOC_NUMBER0);
ADC_forceSOC (ADCA_BASE、ADC_SOC_number1);

while (ADC_getInterruptStatus (ADCA_BASE、ADC_INT_NUMBER1)= false)


ADC_clearInterruptStatus (ADCA_BASE、ADC_INT_NUMBER1);

//存储结果
adcResult0 = ADC_readResult (ADCARESULT_base、ADC_SOC_NUMBER0);
adcResult1 = ADC_readResult (ADCARESULT_base、ADC_SOC_number1);

对于(j = 0;j < 10000;j++)

对于(A = 0;A < 100;A++)





//用于配置 ADC A 和 B 并为其加电的函数
void initadc (void)

//将 ADCCLK 分频器设置为/4
ADC_setPrescaler (ADCA_BASE、ADC_CLK_DIV_4_0);

//设置分辨率和信号模式(请参阅上面的#defines)并加载相应的修整。
ADC_setMode (ADCA_BASE、EX_ADC_Resolution、EX_ADC_SIGNAL 模式);

//将脉冲位置设置为晚期
ADC_setInterruptPulseMode (ADCA_BASE、ADC_PULSE_END_of _CONV);

//为 ADC 加电、然后延迟1ms
ADC_enableConverter (ADCA_BASE);

//DEVICE_DELAY_US (1000);
对于(j = 0;j < 1000;j++)

对于(A = 0;A < 100;A++)



//功能、用于配置 ADC A 和 B 的 SOC 0和1
空 initADCSOOC (空)

//配置 ADCA 的 SOC
//- SOC0将转换引脚 A0。
//- SOC1将转换引脚 A1。
//-这两个都将只由软件触发。
//-对于12位分辨率、采样窗口为15 (200MHz 时为75ns
// SYSCLK 速率)。 对于16位分辨率、将显示一个采样窗口
将使用64的//(200MHz SYSCLK 速率下为320ns)。
#if (EX_ADC_Resolution = ADC_Resolution_12位)
ADC_setupSOC (ADCA_BASE、ADC_SOC_NUMBER0、ADC_TRIGGER_SW_ONLY、
ADC_CH_ADCIN0、15);
ADC_setupSOC (ADCA_BASE、ADC_SOC_number1、ADC_TRIGGER_SW_ONLY、
ADC_CH_ADCIN1、15);
/*#Elif (EX_ADC_Resolution == ADC_Resolution_16BIT)
ADC_setupSOC (ADCA_BASE、ADC_SOC_NUMBER0、ADC_TRIGGER_SW_ONLY、
ADC_CH_ADCIN0、64);
ADC_setupSOC (ADCA_BASE、ADC_SOC_number1、ADC_TRIGGER_SW_ONLY、
ADC_CH_ADCIN1、64);*
#endif

//设置 SOC1以设置中断1标志。 启用中断并确保其标志被清除。
ADC_setInterruptSource (ADCA_BASE、ADC_INT_NUMBER1、ADC_SOC_NUMBER1);
ADC_enableInterrupt (ADCA_BASE、ADC_INT_NUMBER1);
ADC_clearInterruptStatus (ADCA_BASE、ADC_INT_NUMBER1);

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

    除了使用嵌套循环之外、我不会看到代码中的任何内容、我认为嵌套循环仅用于调试目的。 我们强烈建议使用内置延迟函数调用、因为这些函数会提供更准确的时基。 您提到、您对 ADCA 通道0和1使用了 Launch Pad 引脚28和30。 LaunchPad 引脚28对应于 ADCB ch0、引脚30未连接。 由于您在代码上使用 ADCA 通道0和1、因此您可能需要分别使用 Launchpad 引脚27和29。

    此致、
    Joseph
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢约瑟夫。 我现在得到了结果