F28335的InitSysCtrl()与DSP2833x_SysCtrl.c文件(1)

本文介绍了TI的controlSUITE软件及其在C2000系列DSP开发中的应用,重点解析了F28335设备中InitSysCtrl()函数的作用,该函数在DSP2833x_SysCtrl.c文件中,主要用于初始化系统控制,包括禁用看门狗、设置PLL和外设时钟。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发DSP除了CCS之外,TI还推出了一个controlSUITE,专门针对C2000系列,主要是官网资源的集中和分类。软件免费只需要下载安装,由于不喜欢被别人加工注释了代码与工程,所以controlSUITE是个不错的选择。而且里边是TI原装的东西,所以应该是最精华的!

打开28335的几个例子,main函数第一个调用的就是InitSysCtrl(),而该函数就在DSP2833x_SysCtrl.c文件,

// Step 1. Initialize System Control:
// PLL, WatchDog, enable Peripheral Clocks
// This example function is found in the DSP2833x_SysCtrl.c file.
   InitSysCtrl()

所以工程里边必须包含DSP2833x_SysCtrl.c。打开

C:\ti\controlSUITE\device_support\f2833x\v142\DSP2833x_common\source里边有DSP2833x_SysCtrl.c

其实在main函数里边对InitSysCtrl()的作用已经说了:初始换系统控制:具体包括PLL,看门狗,使能外设时钟。由于是官方例子,就是套路,不用问为什么这么做,因为TI就是这样做的。

进入DSP2833x_SysCtrl.c

//---------------------------------------------------------------------------
// InitSysCtrl:
//---------------------------------------------------------------------------
// This function initializes the System Control registers to a known state.
// - Disables the watchdog
// - Set the PLLCR for prop

#include "DSP2833x_Device.h" // DSP2833x 头文件 #include "DSP2833x_Examples.h" // DSP2833x 例子相关头文件 /**************************************变量定义************************************************/ Uint32 t1=0,t2=0,t3=0,t4=0,T1=0,T2=0,t5,t6,t7,t8,T3,T4; Uint16 i; /**************************************声明区**************************************************/ interrupt void ISRCap1(void); interrupt void ISRCap2(void); void main(void) { // 初始化系统控制: // 设置PLL, WatchDog, 使能外设时钟 // 下面这个函数可以从DSP2833x_SysCtrl.c文件中找到.. InitSysCtrl(); // Xintf总线IO初始化 InitXintf16Gpio(); //zq // 清除所有中断初始化中断向量表: // 禁止CPU全局中断 DINT; // 初始化PIE中断向量表,并使其指向中断服务子程序(ISR) // 这些中断服务子程序被放在了DSP280x_DefaultIsr.c源文件中 // 这个函数放在了DSP2833x_PieVect.c源文件里面. InitPieCtrl(); // 禁止CPU中断和清除所有CPU中断标志 IER = 0x0000; IFR = 0x0000; // PIE 向量表指针指向中断服务程(ISR)完成其初始化. // 即使在程序里不需要使用中断功能,也要对 PIE 向量表进行初始化. // 这样做是为了避免PIE引起的错误. InitPieVectTable(); //EALLOW,EDIS是成对使用的,有些寄存器是受到保护的,不能任意写, //EALLOW相当于去掉保护,对写保护的寄存器进行操作后 EDIS 是重新把这个寄存器保护起来的意思。 EALLOW; // This is needed to write to EALLOW protected registers PieVectTable. ECAP1_INT = &ISRCap1; // 将CAP1中断添加都中断向量表里 PieVectTable. ECAP2_INT = &ISRCap2; // 将CAP2中断添加都中断向量表里 EDIS; // This is needed to disable write to EALLOW protected registers // 初始化CAP的相关配置 InitCapl(); IER |= M_INT4; //使能第一组中断 PieCtrlRegs.PIEIER4.bit.INTx1 = 1; //使能第四组中断里的第一个中断--CAP1中断 PieCtrlRegs.PIEIER4.bit.INTx2 = 1; //使能第四组中断里的第二个中断--CAP2中断 EINT; // 中断使能 ERTM; // 使能总实时中断 i = 0; // i = 0 for(; ;)// For循环 { } } interrupt void ISRCap1(void) { PieCtrlRegs.PIEACK.all = PIEACK_GROUP4;//0x0001赋给12组中断ACKnowledge寄存器,对其全部清除,不接受其他中断 ECap1Regs.ECCLR.all=0xFFFF;//写0XFFFF对CAP1中断清除寄存器进行清除操作 t1= ECap1Regs.CAP1; //赋值 t2= ECap1Regs.CAP2; //赋值 t3= ECap1Regs.CAP3; //赋值 t4= ECap1Regs.CAP4; //赋值 T1=t2-t1;T2=t4-t3; } interrupt void ISRCap2(void) { PieCtrlRegs.PIEACK.all = PIEACK_GROUP4;//0x0001赋给12组中断ACKnowledge寄存器,对其全部清除,不接受其他中断 ECap2Regs.ECCLR.all=0xFFFF;//写0XFFFF对CAP2中断清除寄存器进行清除操作 t5= ECap2Regs.CAP1; //赋值 t6= ECap2Regs.CAP2; //赋值 t7= ECap2Regs.CAP3; //赋值 t8= ECap2Regs.CAP4; //赋值 T3=t6-t5;T4=t8-t7; } //=========================================================================== // No more. //===========================================================================
05-16
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值