第2篇-dsp28069初始化

一、时钟配置

时钟配置基于与TI提供的F2806x_SsysCtrl文件中的InitSysCtrl()函数类似,本文配置如下

- 采用外部晶振30M

- 系统时钟配置为90M

- 所有外设时钟禁用,为方便阅读或移植,在Asan_Cfg.h文件中采用宏定义的方式进行使能相应时钟

整体初始化过程如下:

除InitPeripheralClocks()函数外,其它可直接调用TI提供的InitSysCtrl()函数,配置为90M的系统时钟,宏定义变量如下

InitPeripheralClocks()函数采用如下形式

void InitPeripheralClocks(void)
{
	EALLOW;

// LOSPCP prescale register settings, normally it will be set to default values

   SysCtrlRegs.LOSPCP.all = 0x0001;	//Lowspeed CLK 45M
	

// XCLKOUT to SYSCLKOUT ratio.  By default XCLKOUT =  SYSCLKOUT
   //SysCtrlRegs.XCLK.bit.XCLKOUTDIV=2;

// Peripheral clock enables set for the selected peripherals.
// If you are not using a peripheral leave the clock off
// to save on power.
//
// Note: not all peripherals are available on all 2803x derivates.
// Refer to the datasheet for your particular device.
//
// This function is not written to be an example of efficient code.

   #if (DSP_SUPPORT_ePWM1 == 1)
   SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK = 1;    // ePWM1
   #endif
   
   #if (DSP_SUPPORT_ePWM2 == 1)
   SysCtrlRegs.PCLKCR1.bit.EPWM2ENCLK = 1;    // ePWM2
   #endif
   
   #if (DSP_SUPPORT_ePWM3 == 1)
   SysCtrlRegs.PCLKCR1.bit.EPWM3ENCLK = 1;    // ePWM3
   #endif
   
   #if (DSP_SUPPORT_ePWM4 == 1)
   SysCtrlRegs.PCLKCR1.bit.EPWM4ENCLK = 1;    // ePWM4
   #endif
   
   #if (DSP_SUPPORT_ePWM5 == 1)
   SysCtrlRegs.PCLKCR1.bit.EPWM5ENCLK = 1;    // ePWM5
   #endif
   
   #if (DSP_SUPPORT_ePWM6 == 1)
   SysCtrlRegs.PCLKCR1.bit.EPWM6ENCLK = 1;    // ePWM6
   #endif
   
   #if (DSP_SUPPORT_ePWM7 == 1)
   SysCtrlRegs.PCLKCR1.bit.EPWM7ENCLK = 1;    // ePWM7
   #endif
   
   #if (DSP_SUPPORT_ePWM8 == 1)
   SysCtrlRegs.PCLKCR1.bit.EPWM8ENCLK = 1;    // ePWM8
   #endif
	
   #if (DSP_SUPPORT_HRPWM == 1)
   SysCtrlRegs.PCLKCR0.bit.HRPWMENCLK = 1;    // HRPWM
   #endif

   #if (DSP_SUPPORT_eQEP1 == 1)
   SysCtrlRegs.PCLKCR1.bit.EQEP1ENCLK = 1;    // eQEP1
   #endif
   
   #if (DSP_SUPPORT_eQEP2 == 1)
   SysCtrlRegs.PCLKCR1.bit.EQEP2ENCLK = 1;    // eQEP2
   #endif

   #if (DSP_SUPPORT_eCAP1 == 1)
   SysCtrlRegs.PCLKCR1.bit.ECAP1ENCLK = 1;    // eCAP1
   #endif
   
   #if (DSP_SUPPORT_eCAP2 == 1)
   SysCtrlRegs.PCLKCR1.bit.ECAP2ENCLK = 1;    // eCAP2
   #endif
   
   #if (DSP_SUPPORT_eCAP3 == 1)
   SysCtrlRegs.PCLKCR1.bit.ECAP3ENCLK = 1;    // eCAP3
   #endif

   #if (DSP_SUPPORT_HRCAP1 == 1)
   SysCtrlRegs.PCLKCR2.bit.HRCAP1ENCLK = 1;	  // HRCAP1
   #endif
   
   #if (DSP_SUPPORT_HRCAP2 == 1)
   SysCtrlRegs.PCLKCR2.bit.HRCAP2ENCLK = 1;	  // HRCAP2
   #endif
   
   #if (DSP_SUPPORT_HRCAP3 == 1)
   SysCtrlRegs.PCLKCR2.bit.HRCAP3ENCLK = 1;	  // HRCAP3
   #endif
   #if (DSP_SUPPORT_HRCAP4 == 1)
   SysCtrlRegs.PCLKCR2.bit.HRCAP4ENCLK = 1;   // HRCAP4
   #endif
   
   #if (DSP_SUPPORT_ADC == 1)
   SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;      // ADC
   #endif
   
   #if (DSP_SUPPORT_COMP1 == 1)
   SysCtrlRegs.PCLKCR3.bit.COMP1ENCLK = 1;    // COMP1
   #endif
   
   #if (DSP_SUPPORT_COMP2 == 1)
   SysCtrlRegs.PCLKCR3.bit.COMP2ENCLK = 1;    // COMP2
   #endif
   
   #if (DSP_SUPPORT_COMP3 == 1)
   SysCtrlRegs.PCLKCR3.bit.COMP3ENCLK = 1;    // COMP3
   #endif

   #if (DSP_SUPPORT_TIMER0 == 1)
   SysCtrlRegs.PCLKCR3.bit.CPUTIMER0ENCLK = 1; // CPU Timer 0
   #endif
   
   #if (DSP_SUPPORT_TIMER1 == 1)
   SysCtrlRegs.PCLKCR3.bit.CPUTIMER1ENCLK = 1; // CPU Timer 1
   #endif
   
   #if (DSP_SUPPORT_TIMER2 == 1)
   SysCtrlRegs.PCLKCR3.bit.CPUTIMER2ENCLK = 1; // CPU Timer 2
   #endif

   #if (DSP_SUPPORT_DMA == 1)
   SysCtrlRegs.PCLKCR3.bit.DMAENCLK = 1;      // DMA
   #endif

   #if (DSP_SUPPORT_CLA1 == 1)
   SysCtrlRegs.PCLKCR3.bit.CLA1ENCLK = 1;     // CLA1
   #endif

   #if (DSP_SUPPORT_USB0 == 1)
   SysCtrlRegs.PCLKCR3.bit.USB0ENCLK = 1;	  // USB0
   #endif 
   
   #if (DSP_SUPPORT_I2CA == 1)
   SysCtrlRegs.PCLKCR0.bit.I2CAENCLK = 1;     // I2C-A
   #endif
   
   #if (DSP_SUPPORT_SPIA == 1)
   SysCtrlRegs.PCLKCR0.bit.SPIAENCLK = 1;     // SPI-A
   #endif
   
   #if (DSP_SUPPORT_SPIB == 1)
   SysCtrlRegs.PCLKCR0.bit.SPIBENCLK = 1;     // SPI-B
   #endif
   
   #if (DSP_SUPPORT_SCIA == 1)
   SysCtrlRegs.PCLKCR0.bit.SCIAENCLK = 1;     // SCI-A
   #endif
   
   #if (DSP_SUPPORT_SCIB == 1)
   SysCtrlRegs.PCLKCR0.bit.SCIBENCLK = 1;     // SCI-B
   #endif
   
   #if (DSP_SUPPORT_MCBSPA == 1)
   SysCtrlRegs.PCLKCR0.bit.MCBSPAENCLK = 1;   // McBSP-A
   #endif
   
   #if (DSP_SUPPORT_ECAN == 1)
   SysCtrlRegs.PCLKCR0.bit.ECANAENCLK=1;      // eCAN-A
   #endif
   
   #if (DSP_SUPPORT_TBCLK == 1)
   SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;     // Enable TBCLK within the ePWM
   #endif

   EDIS;

}

 默认外设时钟暂时关闭,后面使用到时需要在配置头文件中置1

二、初始化PIE寄存以及其它寄存器清0

直接调用TI提供的InitPieCtrl()函数 ;

函数末尾增加如下语句

IER = 0x0000;                //清中断使能位
IFR = 0x0000;                //清中断标志位

三、初始化PIE向量

- 复制TI提供F2806x_DefaultISR.h和F2806x_DefaultISR.c文件,添加置工程

直接调用TI提供的InitPieVectTable()函数 ;

四、将FLASH拷贝至ARM运行

增加MemCopy()函数

/*************************************************************************/
/*  Name  : MemCopy                                                      */
/*                                                                       */
/*  Copy the execution code from Flash to Ram for execution              */
/*                                                                       */
/*  In    : Flash starting address                                       */
/*  Out   : Flash ending address                                         */
/*  Return: RAM address                                                  */
/*************************************************************************/
void MemCopy(Uint16 *SourceAddr, Uint16* SourceEndAddr, Uint16* DestAddr)
{
	while(SourceAddr < SourceEndAddr)
	{
		*DestAddr++ = *SourceAddr++;
	}
	return;
}

五、初始化FLASH

直接调用TI提供的InitFlash()函数;

初始化配置已完成如上工作,编译已通过

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

软件攻城狮阿三

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值