Thread 中讨论的其他器件: C2000WARE
工具与软件:
大家好
正如您在图片中看到的、我有两个项目、分别名为 demo2和 demo3。 我当前正在为我的项目使用 TMS320F28374S 微控制器。 如文档中所述、我已经开发了两个工程、一个来自 driverlib、另一个来自器件支持以执行相同的任务。 当我根据 demo2 (driverlib)进行编译时、GPIO26每6 u-Sec 进行一次切换、当我从 demo3 (器件支持)进行编译时、需要40 u-Sec
我想知道为什么在同一硬件上运行相同函数所花费的时间大不相同。 我想知道在配置 demo3项目时遇到了什么错误。 我已按照文档 F2837xS_FRM_EX_UG 中的每条指令 配置项目。
这是为 F2837xS_SYSCTRL.c 文件中的 InitSysCtrl 函数编写的代码。
void InitSysCtrl (void)
{
//
//禁用看门狗
//
DisableDog ();
#ifdef _flash
//
//将时间关键代码和闪存设置代码复制到 RAM。 其中包括
//以下函数:InitFlash ()
//
// RamfuncsLoadStart、RamfuncsLoadSize 和 RamfuncsRunStart
//符号是由链接器创建的。 请参阅器件.cmd 文件。
//
memcpy (&RamfuncsRunStart、&RamfuncsLoadStart、(size_t)&RamfuncsLoadSize);
//
//调用闪存初始化以设置闪存等待状态。 该函数必须
//驻留在 RAM 中。
//
Flash_Bank 0();
#endif
//
//*重要*
//
// Device_cal 函数、可复制 ADC 和振荡器校准
//出现 TI 中保留的 OTP 值到相应的调整寄存器中
//在引导 ROM 中自动执行。 旁路掉时、就会发现这一点
//调试过程中、必须为 ADC 和调用以下函数
//振荡器按规范运行。 的需求
//调用此函数之前必须启用 ADC。
//
//有关更多信息、请参见器件数据手册和/或 ADC 参考手册
//信息。
//
EALLOW;
//
//尽快在未绑定的 IO 上启用上拉以降低功耗
//消耗。
//
GPIO_EnableUnbondedIOPullups();
CpuSysRegs.PCLKCR13.bit.ADC_A = 1;
CpuSysRegs.PCLKCR13.bit.ADC_B = 1;
CpuSysRegs.PCLKCR13.bit.ADC_C = 1;
CpuSysRegs.PCLKCR13.bit.ADC_D = 1;
//
//检查器件是否已修整
//
if (*((UINT16 *) 0x5D1B6)=0x0000){
//
///设备未修整-应用静态校准值
//
AnalogSubsysRegs.ANAREFTRIMA.ALL = 31709;
AnalogSubsysRegs.ANAREFTRIMB.All = 31709;
AnalogSubsysRegs.ANAREFTRIC.all = 31709;
AnalogSubsysRegs.ANAREFTRIMD.All = 31709;
}
CpuSysRegs.PCLKCR13.bit.ADC_A = 0;
CpuSysRegs.PCLKCR13.bit.ADC_B = 0;
CpuSysRegs.PCLKCR13.bit.ADC_C = 0;
CpuSysRegs.PCLKCR13.bit.ADC_D = 0;
EDIS;
//
//初始化 PLL 控制:SYSPLLMULT 和 SYSCLKDIVSEL。
//
//定义要作为参数传递给此函数的已定义选项
//(在 F2837xS_examples.h 中)
//
//注意:如果是、内部振荡器不能用作 PLL 源
// PLLSYSCLK 配置为高于194 MHz 的频率。
//
// PLLSYSCLK =(XTAL_OSC)*(IMULT + FMULT)/(PLLSYSCLKDIV)
//
#ifdef _LAUNCHXL_F28377S
InitSysPll (XTAL_OSC、IMULT_40、FMULT_0、PLLCLK_BY_2);
#else
InitSysPll (XTAL_OSC、IMULT_20、FMULT_0、PLLCLK_BY_2);
#endif
//
//打开所有外设
//
InitPeripheralClocks();
}
在 demo2 (driverlib)的 main.c 中写入的代码如下:
#include "main.h"
浮点 T;
PLL_datatype grid_volt;
int main (void)
{
device_init();
Interrupt_initModule();
interrupt_initVectorTable();
interrupt_enableMaster();
InitializeGPIO();
EINT;
ERTM;
while (1)
{
GPIO_writePin (26、1);
PLL (&grid_volt、T);
PLL (&grid_volt、T);
GPIO_writePin (26、0);
}
}
dem3 (器件支持)的 main.c 中写入的代码如下:
#include
#include "main.h"
浮点 T;
PLL_datatype grid_volt;
int main (void)
{
InitSysCtrl();//系统初始化
EALLOW;
GpioCtrlRegs.GPAMUX2.bit.GPIO26 = 0;// GPIO34作为 GPIO
GpioCtrlRegs.GPAGMUX2.bit.GPIO26 = 0;// GPIO34作为 GPIO
GpioCtrlRegs.GPADIR.bit.GPIO26 = 1;// Direct GPIO as output
EDIS;
while (1)
{
GpioDataRegs.GPATOGGLE.bit.GPIO26 = 1;
PLL (&grid_volt、T);
GpioDataRegs.GPATOGGLE.bit.GPIO26 = 1;
}
}
提前感谢您。