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/TMS320F28379D:初始化问题-未解析的符号

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/726348/ccs-tms320f28379d-problems-by-initialising---unresolved-symbols

器件型号:TMS320F28379D
Thread 中讨论的其他器件:controlSUITEC2000WARE

尊敬的社区:
我通过初始化遇到问题。
在我的配置中、我想使用 ADC、Σ-Δ 滤波器和 DAC。 对于所有这些、我需要一个用于计时和触发的 ePWM。
我独立测试了每个模块的配置、现在我想将所有模块整合在一起、但我始终会收到故障消息。 (我的配置的基础是 TI-examples。)
失败的原因是"未解析符号"。

有人能告诉我什么是错误的吗?

高级感谢您的参与

此致 Basti  

工具/软件:Code Composer Studio




//###################################################################################################################### // ////文件:sdfm_PWM_SYNC_CPU_cpu01.c // //标题:F2837xD 的 SDFM PWM 同步示例。 // //! addtogroup cpu01_example_list //!

SDFM PWM 同步

//! //! 在此示例中、SDFM 滤波器数据由 CPU 在 SDFM ISR 例程中读取。 //! SDFM 配置如下所示: //! -本例中使用了 SDFM1 //! -选择 MODE0输入控制模式 //! -比较器设置 //! -选择了 SinC3滤波 器//! - OSR = 32 //! - HLT = 0x7FFF (阈值上限设置) //! - LLT = 0x0000 (阈值下限设置) //! -数据过滤器设置 //! -启用所有4个滤波器模块 //! -选择了 SinC3滤波 器//! - OSR = 256 //! -所有4个滤波器均通过使用 PWM //! (主滤波器使能位) //! -以16位格式表示的滤波器输出 //! -为了转换25位数据过滤器 //! 转换为16位格式用户需要为 //右移9位! OSR = 256 //!的 Sinc3滤波器 - SDFM 滤波 器的中断模块设置//! -所有4个阈值更高的比较器中断被禁用 //! -所有4个阈值下限比较器中断被禁用 //! -禁用所有4个调制器故障中断 //! -所有4个滤波器将在新的滤波器数据 //! 可用 //! // //########################################################################################################################## //$TI 发行版:F2837xD 支持库 V210 $// $发行 日期:星期二11月1日14:46:15 CDT 2016 $// 版权所有:版权所有(C) 2013-2016德州仪器(TI)公司-// http://www.ti.com/ 保留所有权利$ //############################################################################################################ // //包含的文件 // #include "F28x_Project.h" #include "F2837xD_struct.h" #include "F2837xD_sdfm_drivers.h" // 定义 // #define MAX_SAples 200 #define SDFM_PIN_MUX_OPTION1 1 #define SDFM_PIN_MUX_Option2 2 #define SDFM_PIN_MUX_OPTION3. 3 #define ePWM_TIMER_TBPRD 65535 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////// //define für ePWM #define DB_UP 1//define für DAC #define reference_VDAC 0 #define reference_VREF 1 #define DACA 1 #define DACB 2 #define DACC 3 #define reference reference_VREF #define DAC_NUM DACA//define für ADC #define results_buffer_size 3072 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // //全局 // uint16_t gPeripheralNumber,gPWM_Number = 11; uint16_t Filter1_result[MAX_Samples]; uint16_t Filter3_Result[MAX_Samples]; uint16_t Filter2_resultsamples];uint16_t Filter2_Result [MAX_Samples]; uint16_t filter4_result[MAX_samples]; ////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Globals für ePWM UINT16 EPwm7_DB_Direction; UINT16 EPwm6_DB_Direction; UINT16 EPwm5_DB_Direction; UINT16 EPwm4_DB_Direction; UINT32 EPwm7TZIntCount; uint32 EPwm6TZIntCount; uint32 EPwm5TZIntCount; uint32 EPwm4TZIntCount; //Glaobals für für DAC volatile struct dac_regs* dac_ptr[4]={0x0、DacaRegs、DacbRegs、Dacfrom/dacracts////intracts///////////////////intrs////////////////////////////////////////////////////////////////////////////////////////// void #configma DATA_SECTION (Filter1_Result、"Filter1_RegsFile"); #pragma DATA_SECTION (Filter2_Result、"Filter2_RegsFile"); #Filterma DATA_SECTION (Filter3_Result、"Filter3_RegsFile"); #pragma DATA_SECTION (Filter4_Result、"Filter4_Regsfile");_ pragma INSD/ INDIRECT_INU16 ( void); void pragma NOT_pragma (void) pragma INSD/ INSDT/ INDIRECTPLISRISR/ IND16);void (void (void) ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //函数原型 für ePWM void InitEPwm7Examples(); void InitEPwm6Examples(); void InitEPwm5Examples(); void InitEPwm4Examples(); __interrupt void epwm7_ISR (void); _中断 void epwm6_ISR (void); _中断 void epwm5_ISR (void); _中断 void epwm4_ISR (void); void InitEPwmGpio_TZ (void); //函数原型 für für DAC void configureDAC (uint16 DAC_num);//function ///////////(void/////////////////////////////////////////////////////////////////////////////////void///////////////////////////// // // Main // void main (void) { uint16_t pinMuxoption; uint16_t HLT、LLT; // 初始化系统控制: // PLL、看门狗、启用外设时钟 //此示例函数可在 F2837xD_sysctrl.c 文件中找到。 // InitSysCtrl(); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// InitGpio(); // Einschalten der CLK der PWM 模块 // // CpuSysRegs.PCLKCR2.bit.EPWM7=1; // CpuSysRegs.PCLKCR2.bit.EPWM6=1; CpuSysRegs.PCLKCR2.bit.EPWM5=1; // CpuSysRegs.PCLKCR2.bit.EPWM4=1; InitEPwmGpio_TZ (); //////////////////////////////////////////////////////////////////////////////////////////////// // //清除所有__interrupts 并初始化 PIE 矢量表: //禁用 CPU __interrupts // Dint; // //将 PIE 控制寄存器初始化为默认状态。 //默认状态是禁用所有 PIE _interrupts 并 清除标志//。 //此函数位于 F2837xD_PIECTRL.c 文件中。 // InitPieCtrl(); // 禁用 CPU __interrupts 并清除所有 CPU __interrupt 标志: // IER = 0x0000; IFR = 0x0000; // //初始化 PIE 矢量表,其中包含指向 shell 中断 //服务例程(service routines,ISR)的指针。 //这将填充整个表,即使在 本示例中未使用__interrupt //也是如此。 这对于调试很有用。 //可以在 F2837xD_SYSCTRL.c 中找到 shell ISR 例程 //此函数位于 F2837xD_SYSCTRL.C.中 // InitPieVectTable(); // //此示例中使用的中断被重新映射到 这个文件中的// ISR 函数。 // EALLOW; PieVectTable.SD1_INT =&Sdfm1_ISR; //PieVectTable.SD2_INT =&Sdfm2_ISR; ////////////////////////////////////////////////////////////////////////////////////////////////////// //中断-启动 für ePWM // PieVectTable.EPWM7_TZ_INT =&epwm7_ISR; // PieVectTable.EPWM6_TZ_INT =&epwm6_ISR; PieVectTable.EPWM5_TZ_INT =&epwm5_ISR; // PieVectTable.EPWM4_TZ_INT =&epwm4_ISR; //Interruptionen für ADC PieVectTable.ADCA1_INT =&adca1_ISR; //////////////////////////////////////////////////////////////////////////////////////////////////// EDIS; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //配置 ADC 并为其加电 // 配置 ADC (); ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// EALLOW; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Alles zwischen ***** Wird 同步 ausgeführt durch 裸片同步裸片 EALLOW; CpuSysRegs.PCLKCR0.bit.TBCLKSYNC =0; EDIS; //Intitialisierung/Einstellung der EPWM2 und der EPWM7 // InitEPwm7Examples(); // InitEPwm6Examples(); InitEPwm5Examples(); // InitEPwm4Examples(); /Intitialisierung/Einstellung ADC ePWM ConfigureEPWM(); EALLOW; CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=1; EDIS; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //在通道0上设置用于 ePWM 触发转换的 ADC //SetupADCepwm (0); Änderung μ s aufu Channel 2 SetupADCepwm (2); SetupADCepwm3 (3); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // //启用连接到 SDFM INT 的 CPU INT5 // IER |= M_INT5; IER |= M_INT6;//中断 für ePWM7 IER |= M_INT4; IER |= M_INT3; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //启用全局中断和更高优先级的实时调试事件: // IER |= M_INT1;//启用组1中断 EINT;//启用全局中断 INTM ERTM;//启用全局实时中断 DBGM ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // //在 PIE 中启用 SDFM INTn:组5 __interrupt 9-10 // PieCtrlRegs.PIEIER5.bit.INTx9=1;// SDFM1中断被启用 //PieCtrlRegs.PIEIER5.bit.INTx10 = 1;// SDFM2中断被启用 //PieCtrlRegs.PIEIER2.bit.INTx7 = 1; // PieCtrlRegs.PIEIER2.bit.INTx6 = 1; pieCtrlRegs.PIEIER2.bit.INTx5 = 1; // pieCtrlRegs.PIEIER2.bit.INTx4 = 1; PieCtrlRegs.PIEIER1.bit.INTx1 = 1; PieCtrlRegs.PIEIER1.bit.INTx2 = 1; EINT; #ifdef CPU1 PinMuxoption = SDFM_PIN_MUX_OPTION1; // 将 GPIO 引脚配置为 SDFM 引脚 // Sdfm_configurePins (pinMuxoption); #endif // //选择 SDFM1 // gPeripheralNumber = SDFM1; // //输入控制模块 // //配置输入控制模式:调制器时钟速率=调制器数据速率 // Sdfm_configureInputCtrl (gPeripheralNumber、filter1、mode_0); //Sdfm_configureInputCtrl (gPeripheralNumber、Filter2、mode_0); // Sdfm_configureInputCtrl (gPeripheralNumber、FILTER3、 MODE_0); // Sdfm_configureInputCtrl (gPeripheralNumber、FILTER4、MODE_0); // 比较器模块 // HLT = 0x7333;//<-29491=+50mV /0x7530;/0x7FFF;=32767 //过值阈值设置 LLT = 0x0ccd;//<-3217=-50mV//0x0ad0;//0x0000;=0 //欠值阈值设置 // //配置比较器模块的比较器滤波器类型和比较器的 OSR //值、更高的阈值、更低的阈值 // Sdfm_configureComparator (gPeripheralNumber、filter1、SINC3、OSR_32、 HLT、LLT); Sdfm_configureComparator (gPeripheralNumber、Filter2、SINC3、OSR_32、 HLT、LLT); Sdfm_configureComparator (gPeripheralNumber、FILTER3、SINC3、OSR_32、 HLT、LLT); Sdfm_configureComparator (gPeripheralNumber、FILTER4、SINC3、OSR_32、 HLT、LLT); // //启用主过滤器位:除非该位置位 ,否则所有过滤器模块//都不能启用。 当主滤波器//位在单个滤波器模块被启用后被启用时、所有滤波器模块被同步。 当在 启用//单个滤波器模块之前启用主滤波器位时,所有的滤波器//模块都异步。 // Sdfm_enableMFE (gPeripheralNumber); // 数据过滤器模块 // //配置数据过滤器模块过滤器类型、OSR 值和 //启用/禁用数据过滤器 // Sdfm_configureData_filter (gPeripheralNumber、filter1、filter_enable、SINC3、 OSR_64、DATA_16_BIT、SHIFT_4_BIits); Sdfm_configureData_filter (gPeripheralNumber、Filter2、filter_disable、SINC3、 OSR_64、DATA_16_BIT、SHIFT_4_BIits); Sdfm_configureData_filter (gPeripheralNumber、FILTER3、FILTER_DISABLE、SINC3、 OSR_64、DATA_16_BIT、SHIFT_4_BIits); Sdfm_configureData_filter (gPeripheralNumber、FILTER4、FILTER_DISABLE、SINC3、 OSR_64、DATA_16_BIT、SHIFT_4_BITS); //32 OSR Submit 1 Bitshift //64 OSR Submit 4 Biistshift // PWM11.CMPC、PWM11.CMPD、PWM12.CMPC 和 PWM12.CMPD 信号无法同步 //这些滤波器。 此示例中未使用此选项。 // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Änderung auf kein Reset Sdfm_configureExternalreset (gPeripheralNumber、filter_1_EXT_RESET_disable、 FILTER_2_EXT_RESET_DISABLE、 FILTER_3_EXT_RESET_DISABLE、 FILTER_4_EXT_RESET_DISABLE); /* Sdfm_configureExternalreset (gPeripheralNumber、filter_1_EXT_RESET_ENABLE、 FILTER_2_EXT_RESET_ENABLE、 FILTER_3_EXT_RESET_ENABLE、 FILTER_4_EXT_RESET_ENABLE); * //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // //初始化 ePWM // InitEPwm (); // //启用中断 // //可以使用此函数启用/禁用以下 SDFM 中断。 //启用/禁用比较器高阈 值//启用/禁用比较器低阈 值//启用/禁用调制器时钟故障 //启用/禁用滤波器确认 // ////* Sdfm_configureInterrupt (gPeripheralNumber、filter1、IEH_DISABLE、 IEL_DISABLE、MFIE_ENABLE、AE_ENABLE); Sdfm_configureInterrupt (gPeripheralNumber、Filter2、IEH_DISABLE、 IEL_DISABLE、MFIE_ENABLE、AE_ENABLE); Sdfm_configureInterrupt (gPeripheralNumber、FILTER3、IEH_DISABLE、 IEL_DISABLE、MFIE_ENABLE、AE_ENABLE); Sdfm_configureInterrupt (gPeripheralNumber、FILTER4、IEH_DISABLE、 IEL_DISABLE、MFIE_ENABLE、AE_ENABLE); * ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Neu Interrupt Ferigaben bei Schwellwertüberschreitutngen Sdfm_configureInterrupt (gPeripheralNumber、filter1、IEH_ENABLE、 IEL_ENABLE、MFIE_ENABLE、AE_ENABLE); Sdfm_configureInterrupt (gPeripheralNumber、Filter2、IEH_ENABLE、 IEL_DISABLE、MFIE_DISABLE、AE_DISABLE); Sdfm_configureInterrupt (gPeripheralNumber、FILTER3、IEH_ENABLE、 IEL_DISABLE、MFIE_DISABLE、AE_DISABLE); Sdfm_configureInterrupt (gPeripheralNumber、FILTER4、IEH_DISABLE、 IEL_DISABLE、MFIE_DISABLE、AE_DISABLE); ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// while ((* ePWM[gPWM_Number]).TBCTR < 550); // 启用主中断,以便任何滤波器中断都可以通过 SDFM 中断触发//到 CPU // Sdfm_enableMIE (gPeripheralNumber); ////////////////////////////////////////////////////////////////////////////////////// //Konfiguration von DAC Auf configureDAC (DAC_NUM); //////////////////////////////////////////////////////////////////////////////////////////////// //ADC anstoßen、um Verarbeitung zu Beginnen // //开始 ePWM // EPwm2Regs.ETSEL.bit.SOCAEN = 1;//启用 SOCA EPwm2Regs.TBCTL.bit.CTRMODE = 0;//unfreeze、并进入向上计数模式 //////////////////////////////////////////////////////////////////////////// //Endlose Frunktion while (1); } // // Sdfm1_ISR - SDFM 1 ISR // _中断 void Sdfm1_ISR (void) { uint32_t sdfmReadFlagRegister = 0; //静态 uint16_t loopCounter1 = 0; // //读取 SDFM 标志寄存器(SDIFLG) // sdfmReadFlagRegister = Sdfm_readFlagRegister (gPeripheralNumber); /* if (loopCounter1 <= MAX_SAples) { // //读取每个 SDFM 滤波器输出并将其存储在相应的滤波器中 //结果数组 // 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; // //清除 SDFM 标志寄存器 // Sdfm_clearFlagRegister (gPeripheralNumber、sdfmReadFlagRegister); sdfmReadFlagRegister = Sdfm_readFlagRegister (gPeripheralNumber); if (sdfmReadFlagRegister!= 0x0) { ESTOP0; } } 其他 { ESTOP0; Done (); } * //********* //Neue Datenverarbeitung Smit Ausgebe über DAC /* while (1) { //filter1_Result[1]= SDFM2_READ_filter1_DATA_16BIT; unsigned int x1 = SDFM1_READ_filter1_DATA_16BIT >> 3; DAC_PTR[DACA_>DACVALS.ALL =(短整型) 0xf800 + x1; unsigned int x2 = SDFM1_READ_Filter2_DATA_16BIT >> 3; DAC_PTR[DACB]->DACVALS.ALL =(短整型) 0xf800 + x2; // DAC_PTR[DACC]->DACVALS.all = SDFM1_READ_FILTER3_DATA_16BIT; unsigned int x3 = SDFM1_READ_FILTER3_DATA_16BIT >> 3; DAC_PTR[DACC]->DACVALS.ALL =(short) 0xf800 + x3; //unsigned int val =(unsigned char) SDFM1_READ_FILTER3_DATA_16BIT[0]<< 16 |(unsigned char) SDFM1_READ_FILTER3_DATA_16BIT[1]; //DAC_PTR[DACC]->DACVALS.all = val; } // //测试提交 if-Abfrage if (sdfmReadFlagRegister >= 0x0000f000)//Verglich mit dem aktuellen Wert des Flag-Registers。 Sobald Datenwerte vorliegen ist Die Bedingung erfüllt。 { //filter1_Result[1]= SDFM2_READ_filter1_DATA_16BIT; unsigned int x1 = SDFM1_READ_filter1_DATA_16BIT >> 3; DAC_PTR[DACA]-> DACVALS.ALL =(short) 0xf800 + x1; // unsigned int x2 = SDFM1_READ_Filter2_DATA_16BIT >> 3; // DAC_PTR[DACB]->DACVALS.ALL =(短整型) 0xf800 + x2; // DAC_PTR[DACC]->DACVALS.all = SDFM1_READ_FILTER3_DATA_16BIT; // unsigned int x3 = SDFM1_READ_FILTER3_DATA_16BIT >> 3; // DAC_PTR[DACC]->DACVALS.ALL =(short) 0xf800 + x3; //unsigned int val =(unsigned char) SDFM1_READ_FILTER3_DATA_16BIT[0]<< 16 |(unsigned char) SDFM1_READ_FILTER3_DATA_16BIT[1]; //DAC_PTR[DACC]->DACVALS.all = val; // //清除 SDFM 标志寄存器 // Sdfm_clearFlagRegister (gPeripheralNumber、sdfmReadFlagRegister); sdfmReadFlagRegister = Sdfm_readFlagRegister (gPeripheralNumber); } //else if (sdfmReadFlagRegister)&&(sdfmReadFlagRegister) 否则,如果(sdfmReadFlagRegister >=0x00000080)//Verglich 提交 dem aktuellen Wert des Flag-Registers. Sobald ein Schwellenwert überschritten Wurde ist Die Bedingung erfüllt。 {// //清除 SDFM 标志寄存器 // Sdfm_clearFlagRegister (gPeripheralNumber、sdfmReadFlagRegister); sdfmReadFlagRegister = Sdfm_readFlagRegister (gPeripheralNumber); }//Weiterführung der if-else-Struktur für Weitere Bedingungen 如果() {} 其他 {}*/ //********* //清除 SDFM 标志寄存器 // //Sdfm_clearFlagRegister (gPeripheralNumber、sdfmReadFlagRegister); //sdfmReadFlagRegister = Sdfm_readFlagRegister (gPeripheralNumber); // //确认此__interrupt 以接收更多来自组5的__interrupts // PieCtrlRegs.PIEACK.all = PIEACK_group5; } // Sdfm2_ISR - SDFM 2 ISR // _中断 void Sdfm2_ISR (void) { //uint32_t sdfmReadFlagRegister; //静态 uint16_t loopCounter1 = 0; // //读取 SDFM 标志寄存器(SDIFLG) // //sdfmReadFlagRegister = Sdfm_readFlagRegister (gPeripheralNumber); /* if (loopCounter1 <= MAX_SAples) { // //读取每个 SDFM 滤波器输出并将其存储在相应的滤波器中 //结果数组 // filter1_Result[loopCounter1]= SDFM2_READ_filter1_DATA_16BIT; Filter2_Result[loopCounter1]= SDFM2_READ_Filter2_DATA_16BIT; Filter3_Result[loopCounter1]= SDFM2_READ_FILTER3_DATA_16BIT; Filter4_Result [loopCounter1++]= SDFM2_READ_FILTER4_DATA_16BIT; // //清除 SDFM 标志寄存器 // Sdfm_clearFlagRegister (gPeripheralNumber、sdfmReadFlagRegister); sdfmReadFlagRegister = Sdfm_readFlagRegister (gPeripheralNumber); if (sdfmReadFlagRegister!= 0x0) { ESTOP0; } } 其他 { ESTOP0; Done (); } * //********* //Neue Datenverarbeitung Ausmit gabe über DAC //filter1_Result[1]= SDFM2_READ_filter1_DATA_16BIT; DAC_PTR[DACA]-> DACVALS.ALL =(0xf800 + SDFM1_READ_filter1_DATA_16BIT)>> 4; DAC_PTR[DACB]->DACVALS.ALL =(0xf800 + SDFM1_READ_Filter2_DATA_16BIT); DAC_PTR[DACC]->DACVALS.ALL = 0xf800 + SDFM1_READ_FILTER3_DATA_16BIT; //********* // // //确认此__interrupt 以接收更多来自组5的__interrupts // PieCtrlRegs.PIEACK.all = PIEACK_group5; } // Sdfm_configurePins -配置 SDFM GPIO // void Sdfm_configurePins (uint16_t sdfmPinOption) { uint16_t 引脚; 开关(sdfmPinOption) { 案例 SDFM_PIN_MUX_OPTION1: for (pin=16;pin<=31;pin++) { GPIO_SetupPinOptions (Pin、GPIO_input、GPIO_Async); GPIO_SetupPinMux (引脚、GPIO_MUX_CPU1、7); } 中断; 案例 SDFM_PIN_MUX_Option2: for (pin=48;pin<=63;pin++) { GPIO_SetupPinOptions (Pin、GPIO_input、GPIO_Async); GPIO_SetupPinMux (引脚、GPIO_MUX_CPU1、7); } 中断; 案例 SDFM_PIN_MUX_OPTION3: 对于(引脚=122;引脚<=137;引脚++) { GPIO_SetupPinOptions (Pin、GPIO_input、GPIO_Async); GPIO_SetupPinMux (引脚、GPIO_MUX_CPU1、7); } 中断; } } // // InitEPwm -初始化指定的 ePWM 设置 // void InitEPwm (void) { uint16_t CMPC、CMPD; CMPC = 2; CMPD = 2; #ifdef CPU1 GPIO_SetupPinOptions (4、GPIO_OUTPUT、GPIO_异 步); GPIO_SetupPinMux (4、GPIO_MUX_CPU1、1); #endif EALLOW; // //允许所有用户将所有启用的 ePWM 模块全局同步到 //时基时钟(TBCLK) // CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=1; // //设置 TBCLK // (* ePWM[gPWM_Number]).TBPHS.bit.TBPHS = 0x0000;//相位为0 (* ePWM[gPWM_NUMBER]).TBCTR = 0x0000; //清除计数器 (* ePWM[gPWM_Number]).TBPRD = ePWM_TIMER_TBPRD;//设置计时器周期 // 801 TBCLK。 (* ePWM[gPWM_NUMBER]).CMPC = CMPC; //设置比较 C 值 (* ePWM[gPWM_Number]).CMPD = CMPD; //设置比较 D 值 (* ePWM[gPWM_Number]).cmpa.bit.cmpA = CMPC; //设置比较 C 值 (* ePWM[gPWM_Number]).CMPB.bit.CMPB = CMPD; //设置比较 D 值 // //设置计数器模式 // (* ePWM[gPWM_Number]).TBCTL.bit.CTRMODE = TB_COUNT_UP;//向上计数 (* ePWM[gPWM_Number]).TBCTL.bit.HSPCLKDIV = TB_DIV1; (* ePWM[gPWM_Number]).TBCTL.bit.CLKDIV = TB_DIV1; // //设置操作 // (* ePWM[gPWM_Number]).AQCTLA.bit.CAU = 3; //在事件 A 上设置 PWM1A、向上 //计数 // //设置操作 // (* ePWM[gPWM_Number]).AQCTLB.bit.CBU = 3; //在事件 A 上设置 PWM1A、向上 //计数 EDIS; } // //完成-停止调试器和停止应用 程序的函数// void Done (void) { asm (" ESTOP0"); 用于(;); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void InitEPwmGpio_TZ (void) { EALLOW; GpioCtrlRegs.GPAPUD.bit.GPIO12 = 1;//禁用 GPIO10上的上拉电阻(EPWM7A) GpioCtrlRegs.GPAMUX1.bit.GPIO12=1;//将 GPIO10配置为 EPWM7A GpioCtrlRegs.GPAPUD.bit.GPIO13 = 1;//禁用 GPIO11上的上拉电阻(EPWM7B) GpioCtrlRegs.GPAMUX1.bit.GPIO13=1;//将 GPIO11配置为 EPWM7B GpioCtrlRegs.GPAPUD.bit.GPIO10=1;//EPWM6A GpioCtrlRegs.GPAMUX1.bit.GPIO10=1;// GpioCtrlRegs.GPAPUD.bit.GPIO11 = 1;//EPWM6B GpioCtrlRegs.GPAMUX1.bit.GPIO11=1;// GpioCtrlRegs.GPAPUD.bit.GPIO8=1;//EPWM5A GpioCtrlRegs.GPAMUX1.bit.GPIO8=1;// GpioCtrlRegs.GPAPUD.bit.GPIO9=1;//EPWM5B GpioCtrlRegs.GPAMUX1.bit.GPIO9=1;// GpioCtrlRegs.GPAPUD.bit.GPIO6 = 1;//EPWM4A GpioCtrlRegs.GPAMUX1.bit.GPIO6=1;// GpioCtrlRegs.GPAPUD.bit.GPIO7=1;//EPWM4B GpioCtrlRegs.GPAMUX1.bit.GPIO7=1;// EDIS; } // //文件结束 // /////EPM7 Nur für Test-Zwecke void InitEPwm7Examples() { EALLOW; EPwm7Regs.TBPRD = 4; EPwm7Regs.TBPHS.bit.TBPHS = 0x0000; EPwm7Regs.TBCTR = 0x0000; EPwm7Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; EPwm7Regs.TBCTL.bit.PHSEN = TB_DISABLE; EPwm7Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; EPwm7Regs.TBCTL.bit.CLKDIV = TB_DIV1; EPwm7Regs.CMPA.bit.CMPA = 2; EPwm7Regs.AQCTLA.bit.ZRO = AQ_SET; EPwm7Regs.AQCTLA.bit.CAU = AQ_CLEAR; EPwm7Regs.DBCTL.bit.OUT_MODE = DB_FUL_ENABLE; EPwm7Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; EPwm7Regs.DBCTL.bit.IN_MODE = DBA_ALL; EPwm7Regs.DBRED.bit.DBRED = 0; EPwm7Regs.DBFED.bit.DBFED = 0; EPwm7_DB_DIRECTION = DB_UP; EPwm7Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; EPwm7Regs.ETSEL.bit.INTEN = 1; EPwm7Regs.ETPS.bit.INTPRD = et_3rd; EDIS; } __interrupt void epwm7_ISR (void) { EPwm7Regs.ETCLR.bit.INT = 1; }// //EPM7 Nur für Test-Zwecke void InitEPwm6Examples() { EALLOW; EPwm6Regs.TBPRD = 4; EPwm6Regs.TBPHS.bit.TBPHS = 0x0000; EPwm6Regs.TBCTR = 0x0000; EPwm6Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; EPwm6Regs.TBCTL.bit.PHSEN = TB_DISABLE; EPwm6Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; EPwm6Regs.TBCTL.bit.CLKDIV = TB_DIV1; EPwm6Regs.CMPA.bit.CMPA = 2; EPwm6Regs.AQCTLA.bit.ZRO = AQ_SET; EPwm6Regs.AQCTLA.bit.CAU = AQ_CLEAR; EPwm6Regs.DBCTL.bit.OUT_MODE = DB_FUL_ENABLE; EPwm6Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; EPwm6Regs.DBCTL.bit.IN_MODE = DBA_ALL; EPwm6Regs.DBRED.bit.DBRED = 0; EPwm6Regs.DBFED.bit.DBFED = 0; EPwm6_DB_DIRECTION = DB_UP; EPwm6Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; EPwm6Regs.ETSEL.bit.INTEN = 1; EPwm6Regs.ETPS.bit.INTPRD = et_3rd; EDIS; } __interrupt void epwm6_ISR (void) { EPwm6Regs.ETCLR.bit.INT = 1; }// //EPM7 Nur für Test-Zwecke void InitEPwm5Examples() { EALLOW; EPwm5Regs.TBPRD = 4; EPwm5Regs.TBPHS.bit.TBPHS = 0x0000; EPwm5Regs.TBCTR = 0x0000; EPwm5Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; EPwm5Regs.TBCTL.bit.PHSEN = TB_DISABLE; EPwm5Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; EPwm5Regs.TBCTL.bit.CLKDIV = TB_DIV1; EPwm5Regs.CMPA.bit.CMPA = 2; EPwm5Regs.AQCTLA.bit.ZRO = AQ_SET; EPwm5Regs.AQCTLA.bit.CAU = AQ_CLEAR; EPwm5Regs.DBCTL.bit.OUT_MODE = DB_FUL_ENABLE; EPwm5Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; EPwm5Regs.DBCTL.bit.IN_MODE = DBA_ALL; EPwm5Regs.DBRED.bit.DBRED = 0; EPwm5Regs.DBFED.bit.DBFED = 0; EPwm5_DB_DIRECTION = DB_UP; EPwm5Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; EPwm5Regs.ETSEL.bit.INTEN = 1; EPwm5Regs.ETPS.bit.INTPRD = et_3rd; EDIS; } __interrupt void epwm5_ISR (void) { EPwm5Regs.ETCLR.bit.INT = 1; }// //EPM7 Nur für Test-Zwecke void InitEPwm4Examples() { EALLOW; EPwm4Regs.TBPRD = 4; EPwm4Regs.TBPHS.bit.TBPHS = 0x0000; EPwm4Regs.TBCTR = 0x0000; EPwm4Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; EPwm4Regs.TBCTL.bit.PHSEN = TB_DISABLE; EPwm4Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; EPwm4Regs.TBCTL.bit.CLKDIV = TB_DIV1; EPwm4Regs.CMPA.bit.CMPA = 2; EPwm4Regs.AQCTLA.bit.ZRO = AQ_SET; EPwm4Regs.AQCTLA.bit.CAU = AQ_CLEAR; EPwm4Regs.DBCTL.bit.OUT_MODE = DB_FUL_ENABLE; EPwm4Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; EPwm4Regs.DBCTL.bit.IN_MODE = DBA_ALL; EPwm4Regs.DBRED.bit.DBRED = 0; EPwm4Regs.DBFED.bit.DBFED = 0; EPwm4_DB_DIRECTION = DB_UP; EPwm4Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; EPwm4Regs.ETSEL.bit.INTEN = 1; EPwm4Regs.ETPS.bit.INTPRD = et_3rd; EDIS; } __interrupt void epwm4_ISR (void) { EPwm4Regs.ETCLR.bit.INT = 1; } // configureDAC - Abänderung 指定的 DAC 输出//μ s -->配置 von zwei DAC void configureDAC (uint16 DAC_num) { EALLOW; DacaRegs.DACCTL.bit.DACREFSEL =基准; DacaRegs.DACOUTEN.bit.DACOUTEN = 1; DacaRegs.DACVALS.ALL = 0; //DELAY_US (10);//缓冲 DAC 加电延迟 DacbRegs.DACCTL.bit.DACREFSEL =基准; DacbRegs.DACOUTEN.bit.DACOUTEN = 1; DacbRegs.DACVALS.ALL = 0; //DAC_C DaccRegs.DACCTL.bit.DACREFSEL =基准; DaccRegs.DACOUTEN.BIT.DACOUTEN = 1; DaccRegs.DACVALS.ALL = 0; DELAY_US (10);//缓冲 DAC 加电延迟 EDIS; } //配置 ADC -写入 ADC 配置并为两 个//的 ADC 加电 ADC A 和 ADC B // void ConfigureADC (void) { EALLOW; // //写入配置 // AdcaRegs.ADCCTL2.bit.prescale = 6;//将 ADCCLK 分频器设置为/4 AdcSetMode (ADC_ADCA、ADC_resolution_12位、ADC_SIGNALMODE_SINGLE); // //将脉冲位置设置为晚期 // AdcaRegs.ADCCTL1.bit.INTPULSEPOS=1; // //为 ADC 加电 // AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1; // //延迟1ms 以允许 ADC 加电时间 // DELAY_US (1000); EDIS; } // ConfigureEPWM -配置 ePWM SOC 和比较值 // void ConfigureEPWM (void) { EALLOW; //假设 ePWM 时钟已启用 EPwm2Regs.ETSEL.bit.SOCAEN = 0;//禁用组上的 SOC EPwm2Regs.ETSEL.bit.SOCASEL = 1;//在递增计数时选择 SOC EPwm2Regs.ETPS.bit.SOCAPRD = 1; //在发生第一个事件时生成脉冲 EPwm2Regs.TBCTL.bit.HSPCLKDIV = 0;// HSPCLKDIV = 1 EPwm2Regs.TBCTL.bit.CLKDIV = 0;// CLKDIV = 1 EPwm2Regs.CMPA.bit.CMPA = 0x0032;//100dec = 0x0064; //将比较 A 值设置为2048个计数 EPwm2Regs.TBPRD = 0x0064;//199dec = 0x00c7; //将周期设置为4096个计数 EPwm2Regs.TBCTL.bit.CTRMODE = 3; //冻结计数器 EDIS; } // SetupADCepwm - Setup ADC ePWM acquisition window // void SetupADCepwm (uint16 channel) { uint16 acqps; // //根据分辨率确定最小采集窗口(在 SYSCLKS 中) // if (adc_resolution_12bit = AdcaRegs.ADCCTL2.bit.resolution) { acqps = 14;//75ns } 否则、//分辨率为16位 { acqps = 63;//320ns } // //选择要转换的通道和转换结束标志 // EALLOW; AdcaRegs.ADCSOC0CTL.bit.CHSEL =通道;//SOC0将转换引脚 A0 AdcaRegs.ADCSOC0CTL.bit.ACQPS = acqps;//采样窗口为100个 SYSCLK 周期 AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 7;Änderung μ s auf ePWM2 -- vorher 5;=// ePWM1 SOCA/C 上的触发器 AdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 0;// SOC0结束将设置 INT1标志 AdcaRegs.ADCINTSEL1N2.bit.INT1E = 1;//启用 INT1标志 AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;//确保 INT1标志被清除 //AdcaRegs.ADCINTSEL1N2.bit.INT1CONT = 1;//Kontinurieriche Interrups ohne Flag-μ Zurücksetzung EDIS; } void SetupADCepwm3 (uint16通道3) { uint16 acqps; // //根据分辨率确定最小采集窗口(在 SYSCLKS 中) // if (adc_resolution_12bit = AdcaRegs.ADCCTL2.bit.resolution) { acqps = 14;//75ns } 否则、//分辨率为16位 { acqps = 63;//320ns } // //选择要转换的通道和转换结束标志 // EALLOW; AdcaRegs.ADCSOC3CTL.bit.CHSEL =通道3;//SOC0将转换引脚 A3 AdcaRegs.ADCSOC3CTL.bit.ACQPS = acqps;//采样窗口为100个 SYSCLK 周期 AdcaRegs.ADCSOC3CTL.bit.TRIGSEL = 7;Änderung μ s auf ePWM2 -- vorher 5;=// ePWM1 SOCA/C 上的触发器 AdcaRegs.ADCINTSEL1N2.bit.INT2SEL = 3;// SOC0结束将设置 INT1标志 AdcaRegs.ADCINTSEL1N2.bit.INT2E = 1;//启用 INT1标志 AdcaRegs.ADCINTFLGCLR.bit.ADCINT2 = 1;//确保 INT1标志被清除 //AdcaRegs.ADCINTSEL1N2.bit.INT2CONT = 1;//Kontinurieriche Interrups ohne Flag-μ Zurücksetzung EDIS; } // // adca1_ISR -在 ISR 中读取 ADC 缓冲 器// 中断 void adca1_ISR (void) { ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // neue Interrupt-Befehle DES ADC DAC_PTR[DACB]->DACVALS.ALL = AdcaResultRegs.ADCRESULT0; DAC_PTR[DACC]->DACVALS.ALL = AdcaResultRegs.ADCRESULT3; AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;//清除 INT1标志 PieCtrlRegs.PIEACK.all = PIEACK_Group1; ////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

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


    ****为项目 sdfm_PWM_SYNC_CPU_cpu01构建配置 CPU1_RAM ****

    "C:\\Tools\\TI\\ccsv8\\utils\\bin\\gmake"-k all

    编译文件:"c:/Tools/TI/controlSUITE/device_support/F2837xD/v210/F2837xD_examples_Cpu1/sdfm_pwm_sync_cpu/cpu01/sdfm_pwm_sync_cpu_cpu01.c
    调用:C2000编译器
    "c:/Tools/TI/ccsv8/tools/compiler/c2000/bin/cl2000 "-v28 -ml -mt --vcu_support=vcu2 --tmu_support=tmu0 -cla_support=sd1 -float_support=fpu32 -include_path="C:/Tools/TI/ccsv8/tools/compiler/c2000/include /Tools/TI/controlSUITE/device_support/F2837xD/v210/F2837xD_examples_Cpu1/sdfm_pwm_sync_cpu/cpu01/sdfm_pwm_sync_cpu_cpu01.c -include_path="C:/Tools/TI/controlSUITE/device_support/F2837xD/v210/F2837xD_headers/include -include_path="C:/Tools/TI/controlSUITE/device_support/F2837xD/v210/F2837xD_common/include:-fpu=fpu32 -include_display_pred_supervisorit_de=pensorit_cpu_cpu_regard-pred_cpu_cpu1.pensorit_cpu_cpu_cpu_cpu1.-pred_cpu_cpu_cpu_guard_cpu_cpu_cpu1.-pred_guard_cpu_cpu_cpu_ep-
    "C:/Tools/TI/controlSUITE/device_support/F2837xD/v210/F2837xD_examples_Cpu1/sdfm_pwm_sync_cpu/cpu01/sdfm_pwm_sync_cpu_cpu01.c、第232行:警告#225-D:隐式声明的函数"SetupADCepwm3"
    "C:/Tools/TI/controlSUITE/device_support/F2837xD/v210/F2837xD_examples_Cpu1/sdfm_pwm_sync_cpu/cpu01/sdfm_pwm_sync_cpu_cpu01.c "、第469行:警告#69-D:整数转换导致符号改变
    "C:/Tools/TI/controlSUITE/device_support/F2837xD/v210/F2837xD_examples_Cpu1/sdfm_pwm_sync_cpu/cpu01/sdfm_pwm_sync_cpu_cpu01.c、第947行:警告#161-D:声明与之前的"SetupADCepwm3"不兼容(在第232行声明)
    完工:"c:/Tools/TI/controlSUITE/device_support/F2837xD/v210/F2837xD_examples_Cpu1/sdfm_pwm_sync_cpu/cpu01/sdfm_pwm_sync_cpu_cpu01.c

    构建目标:"sdfm_pwm_sync_cpu01.out"
    调用:C2000链接器
    "c:/Tools/TI/ccsv8/tools/compiler/c2000/bin/cl2000 /Tools/TI/ccsv8/tools/compiler/c2000/lib /Tools/TI/controlSUITE/device_support/F2837xD/v210/F2837xD_common/cmd -v28 -ml -mt --vcu_support=vcu2 --tmu_support=tmu0 -cla_support=sd1 -float_support=fpu32 -g -define=cpu1 -display_error_number -cla_dsuppress=10063 -diag_warning=225 -z -fpu_support=fpu32 -gm -gpwm"-code_display_code_display_code.html_code_track_code_display_code.htm"-cn/spru_code_display_code_pwm_code_track_code.htm"-cn_code_display_code_display_code_pwm_code_display_code.htm"-cn/spru_code_display_code_pwm_code_display_code_display_code_display_code.t_code.t_code.htm"-pwm_code_display_code.t_code_display_code_display_code.t_code.t_code_display_code.t_/Tools/TI/controlSUITE/device_support/F2837xD/v210/F2837xD_headers/cmd /Tools/TI/ccsv8/tools/compiler/c2000/include

    警告#10247-D:创建不带段的输出段".ebss"
    规格

    未定义的首次引用
    符号 文件中
    ------ --------
    _AdcSetMode ./sdfm_PWM_SYNC_CPU_cpu01.obj

    错误#10234-D:未解析的符号仍然存在
    错误#10010:链接期间遇到错误;"sdfm_PWM_SYNC_CPU_cpu01.out"
    未构建

    >>编译失败
    Makefile:148:目标'SFM_PWM_SYNC_CPU_cpu01.out'的配方失败
    gmake:***[sdfm_PWM_SYNC_CPU_cpu01.out]错误1.
    gmake:目标"全部"不会由于错误而重新生成。

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

    我想重新创建您的错误、但我不知道我需要安装哪些 TI 组件才能获得以下文件:
    #include "F28x_Project.h"
    #include "F2837xD_struct.h"
    #include "F2837xD_sdfm_drivers.h"
    请给我一个链接吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Basti36">未定义的首次引用
    符号
    ------ --------
    _AdcSetMode ./sdfm_PWM_SYNC_CPU_cpu01.obj[/quot]

    此处提供了该误差的一般说明

    在源文件中、函数 ConfigureADC 调用 AdcSetMode、但  链接器无法找到 AdcSetMode 的定义。 在 C2000Ware 示例工程中、 AdcSetMode 通常在 F2837xD_ADC.c 中定义 如果您将该源文件添加到工程中、编译器将编译该文件、该符号将对链接器可用、并应可解决该错误。

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

    您好!

    我已安装 C2000xyz 软件包。

    在我的安装中、有6个文件包含 AdcSetMode 实现。

    检查您的产品、路径、将适当的文件集成到您的项目中并构建您的项目。

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

    您好、社区
    用于支撑的储罐。
    今天、我可以访问我的工作计算机、并检查了所有内容。
    很抱歉、等待时间长、问题不必要。
    我发现了错误、实际上只是 F2837xD_ADC.c 文件路径中的一个拼写错误。
    然而,许多人感谢他们的大力支持。

    此致 Basti