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:对 C2000 F2807 Piccolo 进行无中断的 Delta SIGMA 管理

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/570378/ccs-delta-sigma-management-without-interrupt-for-c2000-f2807-piccolo

工具/软件:Code Composer Studio

我想在没有中断的情况下管理 Δ-Σ 模块。

这是我的代码:

#define MAX_SAples 32 //样本数

//输出数据缓冲区
unsigned int filter1_result[MAX_SAamples];// filter_1
unsigned int filter3_result[MAX_SAamples];// filter_2
unsigned int filter2_result[MAX_Samples];// filter_3
unsigned int filter4_result[MAX_SAamples];// filter_4
unsigned int SDELTA_1;

void sigma_delta_read (void);//数据读取函数

// delta sigma 初始化
void sigma_delta_init (void){

unsigned int i;

   //数据缓冲区初始化
   对于(i=0;i<=MAX_SA采样-1;i++){
    filter1_Result[i]= 1;
    Filter2_Result[i]= 1;
    Filter3_Result[i]= 1;
    Filter4_Result[i]= 1;
   }


   // GPIO 引脚配置
   for (i=122;i<=129;i++){
    GPIO_SetupPinMux (I、GPIO_MUX_CPU1、7);
    GPIO_SetupPinOptions (I、GPIO_INPUT、GPIO_异 步);
   }

   // SFDM 初始化和配置
   Sdfm_configureInputCtrl (1、filter1、mode_0);
   Sdfm_configureInputCtrl (1、Filter2、mode_0);
   Sdfm_configureInputCtrl (1、FILTER3、MODE_0);
   Sdfm_configureInputCtrl (1、FILTER4、MODE_0);
   Sdfm_configureComparator (1、filter1、SINC1、OSR_32、2000、 50);
   Sdfm_configureComparator (1、Filter2、SINC1、OSR_32、2000、 50);
   Sdfm_configureComparator (1、FILTER3、SINC1、OSR_32、2000、 50);
   Sdfm_configureComparator (1、FILTER4、SINC1、OSR_32、2000、 50);
   Sdfm_configureData_filter (1、filter1、filter1、filter_enable、SINC1、OSR_256、 DATA_16_BIT、SHIFT_9_Bits);
   Sdfm_configureData_filter (1、filter2、filter_enable、SINC1、OSR_256、 DATA_16_BIT、SHIFT_9_Bits);
   Sdfm_configureData_filter (1、FILTER3、FILTER_ENABLE、SINC1、OSR_256、 DATA_16_BIT、SHIFT_9_Bits);
   Sdfm_configureData_filter (1、FILTER4、FILTER_ENABLE、SINC1、OSR_256、 DATA_16_BIT、SHIFT_9_Bits);
   Sdfm_enableMFE (1);

 //无外部复位
   Sdfm_configureExternalreset (1、filter_1_EXT_RESET_disable、filter_2_EXT_RESET_disable、filter_3_EXT_RESET_disable、filter_4_EXT_RESET_disable);

 //无中断
   Sdfm_configureInterrupt (1、filter1、IEH_DISABLE、IEL_DISABLE、MFIE_DISABLE、 AE_DISABLE);
   Sdfm_configureInterrupt (1、Filter2、IEH_DISABLE、IEL_DISABLE、MFIE_DISABLE、 AE_DISABLE);
   Sdfm_configureInterrupt (1、FILTER3、IEH_DISABLE、IEL_DISABLE、MFIE_DISABLE、 AE_DISABLE);
   Sdfm_configureInterrupt (1、FILTER4、IEH_DISABLE、IEL_DISABLE、MFIE_DISABLE、 AE_DISABLE);

   Sdfm_enableMIE (1);

//数据读取函数
void sigma_delta_read (void){

unsigned long sdfmReadFlagRegister = 0;
静态无符号 int loopCounter1 = 0;

 //寄存器 SDIFLG 读数
 SDFMReadFlagRegister = Sdfm_readFlagRegister (1);

   filter1_Result[loopCounter1]= SDFM1_READ_filter1_DATA_16BIT;
   Filter2_Result[loopCounter1]= SDFM1_READ_Filter2_DATA_16BIT;
   Filter3_Result[loopCounter1]= SDFM1_READ_FILTER3_DATA_16BIT;
   Filter4_Result[loopCounter1]= SDFM1_READ_FILTER4_DATA_16BIT;

   loopCounter1 = loopCounter1 + 1;
   if (loopCounter1 = MAX_SAples) loopCounter1 = 0;

   //清除 SDIFLG 寄存器
   // Sdfm_clearFlagRegister (1、sdfmReadFlagRegister);

 //寄存器 SDIFLG 读数
   // sdfmReadFlagRegister = Sdfm_readFlagRegister (1);

//运行函数
void sigma_delta_run (void){

 //数据读取函数
   Sigma_Delta_Read ();

正确吗?

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

    我建议阅读13.6) TRM 中 SDFM 一章的中断单元部分。 它讨论了在确认事件(AE)被禁用时读取滤波器数据的选项、尽管这需要计时器中断。

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

    正如 Elizabeth 建议的、您需要有某种类型的计时器中断来读取 SDFM 结果。 该计时器可以 CPU 计时器(或) PWM 中断。

    此致、
    曼诺伊