在完成DSP28335工程新建后,要跟着例程学习DSP的编程。如果学习C语言的第一个神奇的实验是在屏幕上显示出:Hello,world!那个对于单片机编程来说,第一个实验肯定就是点亮一个LED灯。就是控制引脚IO口输出。本文是在南京研旭的例程基础上编写完成的。
1. 编写主函数
步骤1:初始化系统控制函数,包括PLL,看门狗,使能外设时钟,这个函数的原型在DSP2833x_SysCtrl.c中查找
InitSysCtrl();
步骤2:初始化GPIO,这个函数原型在DSP2833x_Gpio.c中查找
InitXintf16Gpio();
步骤3:清除所有中断,初始化中断向量表,关闭CUP中断
DINT;
步骤4:初始化中断控制寄存器到默认状态,默认状态是所有的中断是失能的,标志位被清除,这个函数原型在DSP2833x_PieCtrl.c
InitPieCtrl();
步骤5:关闭CUP中断,清除所有的中断标志位;
IER = 0x0000;
IFR = 0x0000;
步骤6:初始化中断向量表,这个函数原型在DSP2833x_PieVect.c,本例程未用到中断,但是这个函数是非常有用的。
InitPieVectTable();
配置LED的引脚
configtestled();
LED1=1; //引脚输出高电平
DELAY_US(10); //延时10us
LED2=1;
DELAY_US(10);
LED3=0;
DELAY_US(10);
LED4=0;
DELAY_US(10);
while(1){
LED1=~LED1; //引脚输出电平反转
DELAY_US(100000); //延时100ms
LED2=~LED2;
DELAY_US(100000);
LED3=~LED3;
DELAY_US(100000);
LED4=~LED4;
DELAY_US(100000);
}
2. InitSysCtrl()初始化系统
查看函数原型,关闭看门狗、初始化PLL、初始化外设时钟。
所谓关闭看门狗,简单理解就是防止系统死机,可以认为单片机上有一个寄存器,对寄存器上的数据不断的减1,当把这个寄存器的数据减为0了,系统就会死机。为了不让系统死机,就不断给这个寄存器赋值,称为“喂狗”。这个寄存器在系统寄存器。
初始化PLL,即设置分频和倍频参数。这个查找DSP28335的使用手册,查到了时钟频率分频和倍频原理。
电路板上晶振为30MHz,DSP28335支持频率为150MHz,所以,4-bit Multiplier PLLCR[DIV]设置为10,PLLSTS[DIVSEL]设置为2. 时钟对于一个工程来说很重要,特别是涉及到频率、波特率、时间间隔这些功能,配置时钟需要配合软件和硬件共同决定,需要指导控制板上接的晶振频率和芯片支持的频率。
最后一步是初始化外设时钟,时钟是一个耗能的,工程中没有用到的外设,其外设时钟可以关闭,
InitPeripheralClock()这个函数就是用于初始化用到的和没用到的时钟,初学者一般默认开启所有时钟,不然在后期调试很难找原因。
对于外设时钟,DSP28335的手册中并不复杂,说明了外设时钟可以做分频处理。STM32的外设挂接在不同频率的时钟树,DSP倒没有具体说明是否有时钟树,后续看到外设的时候再思考这个问题
3.InitXintf16Gpio()初始化引脚
DSP28335拥有176引脚,这些引脚中分为最小系统引脚(电源、晶振、复位、仿真器),通用IO、AD模拟量采集等引脚。
通用IO从GPIO0~GPIO87通用IO,由于每一个寄存器最多只能控制数目有限,所以DSP采用分组的形式配置IO的控制寄存器、数据寄存器、初始化寄存器。在配置引脚是不可以把引脚配置到错误的寄存器上。
GPxCTRL控制寄存器:引脚的采样周期
GPxQSEL1:限定选择寄存器。
GPxMUX:引脚复用寄存器。查阅手册,发现引脚能复用多种功能,因此具体设置什么需要查手册。GPxDIR: 方向寄存器,0为输入,1为输出。GPxPUD:上拉寄存器,使能上拉为0,关闭为1。这个主要涉及到分组和复用、频率等参数,这个是所有使用单片机引脚都需要用到的内容。
GPIO_DATA_REG是数据寄存器,1为高电平,0为低电平
4. 中断
DSP28335采用三级中断,即外设级、PIE级、CPU级。DSP的中断机制较STM32相对复杂,以后会专门研究。该工程对中断进行了初始化处理。
关闭CPU级中断,关闭PIE级中断,清除所有的中断标志位,初始化中断向量表。
所谓初始化中断向量表是指,DSP支持的所有中断是有在表中固定的位置。初始化中断向量表是指将初始化的中断表复制到中断向量表。
5. 控制引脚输出
LED=1是指把LED对应的引脚的数据寄存器给1,LED=-是指把LED对应的引脚的数据寄存器给0;
DELAY_US(100000);是延时函数,us级,该函数是延时100ms。这个函数原型在DSP2833x_usDelay.asm文件,使用汇编语言编写。
使用汇编语言,具有运算速度快的特点。
本文主要介绍了GPIO的配置。通过例程来分析编写简单的DSP程序的步骤,上述的步骤很多是必要的,比如配置时钟、系统初始化、配置引脚、配置中断表等等。TI官方给出的原型函数可调用可根据需求修改。这个极大的方便了使用,毕竟官方给出的原型函数考虑的东西还是很全面的。