DSP28335学习笔记-LED闪烁

     在完成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的使用手册,查到了时钟频率分频和倍频原理。

DSP28335学习笔记-LED闪烁_第1张图片

电路板上晶振为30MHz,DSP28335支持频率为150MHz,所以,4-bit Multiplier PLLCR[DIV]设置为10,PLLSTS[DIVSEL]设置为2. 时钟对于一个工程来说很重要,特别是涉及到频率、波特率、时间间隔这些功能,配置时钟需要配合软件和硬件共同决定,需要指导控制板上接的晶振频率和芯片支持的频率。

DSP28335学习笔记-LED闪烁_第2张图片

最后一步是初始化外设时钟,时钟是一个耗能的,工程中没有用到的外设,其外设时钟可以关闭,

InitPeripheralClock()这个函数就是用于初始化用到的和没用到的时钟,初学者一般默认开启所有时钟,不然在后期调试很难找原因。

对于外设时钟,DSP28335的手册中并不复杂,说明了外设时钟可以做分频处理。STM32的外设挂接在不同频率的时钟树,DSP倒没有具体说明是否有时钟树,后续看到外设的时候再思考这个问题

3.InitXintf16Gpio()初始化引脚

DSP28335拥有176引脚,这些引脚中分为最小系统引脚(电源、晶振、复位、仿真器),通用IO、AD模拟量采集等引脚。

通用IO从GPIO0~GPIO87通用IO,由于每一个寄存器最多只能控制数目有限,所以DSP采用分组的形式配置IO的控制寄存器、数据寄存器、初始化寄存器。在配置引脚是不可以把引脚配置到错误的寄存器上。

DSP28335学习笔记-LED闪烁_第3张图片

GPxCTRL控制寄存器:引脚的采样周期

GPxQSEL1:限定选择寄存器。

DSP28335学习笔记-LED闪烁_第4张图片

  • 00:与系统时钟同步,对于该引脚作为外设和通用IO时有效
  • 01:采样三次有效,对于该引脚作为外设和通用IO时有效
  • 10:采样六次有效,对于该引脚作为外设和通用IO时有效
  • 11:异步模式,当配置为外设时有效。当引脚配置为通用IO,且该寄存器配置为2时,作用和00、01、10相同。

GPxMUX:引脚复用寄存器。查阅手册,发现引脚能复用多种功能,因此具体设置什么需要查手册。GPxDIR: 方向寄存器,0为输入,1为输出。GPxPUD:上拉寄存器,使能上拉为0,关闭为1。这个主要涉及到分组和复用、频率等参数,这个是所有使用单片机引脚都需要用到的内容。

DSP28335学习笔记-LED闪烁_第5张图片

GPIO_DATA_REG是数据寄存器,1为高电平,0为低电平

4. 中断

DSP28335采用三级中断,即外设级、PIE级、CPU级。DSP的中断机制较STM32相对复杂,以后会专门研究。该工程对中断进行了初始化处理。

关闭CPU级中断,关闭PIE级中断,清除所有的中断标志位,初始化中断向量表。

所谓初始化中断向量表是指,DSP支持的所有中断是有在表中固定的位置。初始化中断向量表是指将初始化的中断表复制到中断向量表。

DSP28335学习笔记-LED闪烁_第6张图片

5. 控制引脚输出

LED=1是指把LED对应的引脚的数据寄存器给1,LED=-是指把LED对应的引脚的数据寄存器给0;

DELAY_US(100000);是延时函数,us级,该函数是延时100ms。这个函数原型在DSP2833x_usDelay.asm文件,使用汇编语言编写。

DSP28335学习笔记-LED闪烁_第7张图片

使用汇编语言,具有运算速度快的特点。

本文主要介绍了GPIO的配置。通过例程来分析编写简单的DSP程序的步骤,上述的步骤很多是必要的,比如配置时钟、系统初始化、配置引脚、配置中断表等等。TI官方给出的原型函数可调用可根据需求修改。这个极大的方便了使用,毕竟官方给出的原型函数考虑的东西还是很全面的。

你可能感兴趣的:(学习,笔记)