找兼职做酒店网站,深圳网站建设深圳,企业网站制作报价表,桂林做手机网站建设在自己的电脑上构建出一套模块配置模板#xff0c;可以大幅节省DSP程序开发时间#xff0c;从而达到事半功倍的效果。对于初学者#xff0c;掌握了模块配置#xff0c;也就能实现大部分的单片机功能。 在DSP28335模块配置模板系列#xff0c;不仅会给出GPIO、ADC、EQEP、E… 在自己的电脑上构建出一套模块配置模板可以大幅节省DSP程序开发时间从而达到事半功倍的效果。对于初学者掌握了模块配置也就能实现大部分的单片机功能。 在DSP28335模块配置模板系列不仅会给出GPIO、ADC、EQEP、EPWM、定时器、中断、DAC、SPI、SPC、I2C等模块的配置模板同时也会深入底层原理解释为何要这样配置。 后续还会给出DSP2837xd的模块配置模板系列。
在构建各模块配置的模板之前先给出主函数的通用模板
void main()
{InitSysCtrl(); InitPieCtrl();IER 0x0000;IFR 0x0000;InitPieVectTable();
}
其中InitSysCtrl()是TI官方提供的源文件DSP2833x_SysCtrl.c中定义的一个初始化系统控制寄存器的函数主要功能有三个分别是
1.关闭看门狗 DisableDog(); 看门狗Watchdog Timer,WDT是一种用于监控系统是否正常运行的硬件定时器当系统出现异常情况如死循环、挂起等而无法在规定时间内复位看门狗定时器时看门狗定时器会溢出并自动复位系统让系统恢复到正常运行状态。由于系统初始化的过程包括时钟配置、外设时钟初始化等多个步骤这些步骤需要较长的时间才能完成而看门狗定时器的溢出时间是固定的。如果初始化时间超过了看门狗定时器的溢出时间看门狗会触发系统复位从而影响系统初始化的过程。因此在系统初始化开始之前需要关闭看门狗定时器。
2.初始化PLL寄存器 InitPll(DSP28_PLLCR,DSP28_DIVSEL); PLL是DSP的相位锁定环它能实现同步输出信号与输出信号的相位和频率的功能DSP28335芯片使用外部30Mhz晶振外部晶振信号通过芯片内部的振荡器OSC产生一个频率为30Mhz的基准时钟信号该基准信号输入到PLL模块中使得PLL输出的信号与基准信号在相位上保持锁定再通过PLL模块的倍频操作将基准时钟信号的频率提高到所需的工作频率然后经过必要的分频调整到合适的CPU工作时钟频率最终将时钟信号送入CPU中使用。 InitPll函数的两个输入分别是倍频系数和分频系数这里输入的是两个宏定义变量倍频系数DSP28_PLLCR为10分频系数DSP28_DIVSEL为2所以CPU工作频率为30Mhz*10/2150Mhz。 这里存在一个有趣的问题可不可以将倍频系数设置为10分频系数设置为1这样CPU工作频率不就达到300Mhz了吗 答案是虽然PLL可以进行倍频操作但芯片的最大工作频率是有限制的DSP28335的最大工作频率通常为150MhzDSP2837xd的最大工作频率通常为200Mhz。
3.初始化外设时钟并对需要使用的外设时钟进行使能 InitPeripheralClocks(); 不同的外设所需要的时钟频率是不一样的通过这个函数可以设置各种外设的时钟频率以及使能相应的外设时钟同时禁用不需要的外设时钟以减少能耗。 其中InitPieCtrl()是TI官方提供的源文件DSP2833x_PieCtrl.c中定义的一个初始化PIE控制寄存器的函数主要功能有:禁用PIE模块清除所有PIE中断使能寄存器PIEIER;清除所有PIE中断标志寄存器PIEIFR目的是确保在后续的操作中系统处于一个已知的、安全的中断状态。 IER寄存器用于控制哪些中断请求能够被CPU响应将其设置为0表示禁用所有中断使得CPU不会响应任何中断请求确保在初始化过程中不会发生中断。 IFR寄存器用于标识哪些中断事件已经发生将其设置为0表示清除所有中断标志确保系统在初始化后没有残留的中断事件。 其中InitPieVectTable()是TI官方提供的源文件DSP2833x_PieVect.c中定义的一个初始化PIE向量表的函数主要功能是将初始的PIE向量表内容复制到实际使用的PIE向量表中并启用PIE向量表以确保系统能够正确响应中断请求。 在主函数中初始化系统时钟、初始化外设时钟、初始化PIE使能和标志寄存器以及初始化PIE向量表后接下来就可以开始进行GPIO模块的配置
1.开启GPIO时钟 SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK 1;
2.设置GPIO复用功能 GPIO管脚有多个功能例如GPIO50有三个功能分别是通用I/O、EQEP1A(I)、XD(29)如果需要将GPIO50管脚设置为通用I/O功能则需要对相应的寄存器进行设置
GpioCtrlRegs.GPCMUX1.bit.GPIO500;
3.设置GPIO方向输入还是输出 设置GPIO管脚为输出管脚
GpioCtrlRegs.GPCDIR.bit.GPIO501;//设置GPIO方向为输出
4.设置GPIO上拉电阻 当GPIO引脚配置为输入且未连接到明确的高或低电平信号时该引脚会处于浮动状态容易受到环境噪声影响导致不稳定的信号上拉电阻将引脚拉到高电平防止其浮动确保引脚处于稳定的已知状态
GpioCtrlRegs.GPCPUD.bit.GPIO500;//使能GPIO上拉电阻
完整的GPIO模块配置的函数为
void GPIO_Init()
{EALLOW;SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK 1;GpioCtrlRegs.GPCMUX1.bit.GPIO500;GpioCtrlRegs.GPCDIR.bit.GPIO501;GpioCtrlRegs.GPCPUD.bit.GPIO500;EDIS;
}
此外可以通过对GPIO数据寄存器的有关位进行设置分别让GPIO管脚实现高电平、低电平、翻转电平的输出
GpioDataRegs.GPCSET.bit.GPIO501
GpioDataRegs.GPCCLEAR.bit.GPIO501
GpioDataRegs.GPCTOGGLE.bit.GPIO501