DSP学习笔记(一)--DSP基础



  • DSP(Digital Signal Processing),指数字信号处理,DSP芯片即数字信号处理芯片。

    从名字上来看,DSP芯片的主要任务是计算,是处理数据,因此往往具有较高的运算能力,工作频率也很高,作为经典入门级的TMS320F28335型号DSP,晶振频率却达到了150MHz,而更加高端的DSP芯片的工作频率可以达到GHz的级别。

    DSP内部架构属于哈佛结构,哈佛结构即数据和指令的存储分开,属于并行结构,另一种常见的结构为冯诺依曼结构,冯诺依曼结构的数据和指令是一起存储的,工作效率相比哈佛结构而言要低,但好处是电路设计上比较简单。现在前沿的电脑,笔记本电脑等移动产品的CPU往往采取一种折中的架构方式,在CPU核心上,为了保证运行速度,往往会偏向更加复杂,同时也更加高效的哈佛结构,而CPU外部的一些模块,比如CPU自带的缓存,则可能会偏向较为简洁的冯诺依曼结构。总之,如今的CPU并不能确定的说属于什么结构,更像是两种结构的混合与发展。

    DSP在一些基本的控制功能上不如像stm32之类的单片机,优势主要集中在运算上,经常用于电机控制,图像处理等。

    曾经把ARM、DSP和CPU、GPU进行过比较,发现计算机的芯片更加专门化,CPU相比ARM更强化了控制功能,GPU更强化了运算功能,而GPU相比于DSP,控制功能进一步弱化。

    测试使用的DSP芯片就是上面提到的28335芯片,编写软件使用ccs8.0,通过JTAG烧写。

    DSP芯片的I/O口也称为GPIO,初始化与stm32类似

    编写LED闪灯程序

    main.c

    #include "DSP28x_Project.h"
    #include "bsp_led.h"
    #define FLASH_RUN 1
    #define SRAM_RUN 2
    #define RUN_TYPE FLASH_RUN
    #if RUN_TYPE==FLASH_RUN
    extern Uint16 RamfuncsLoadStart;
    extern Uint16 RamfuncsLoadEnd;
    extern Uint16 RamfuncsRunStart;
    #endif
    void delay_1ms(Uint16 t);
    /**

    • @brief 主函数
    • @parameter 无
    • @return_value 无
      */
      void main(void)
      {
      /第一步:初始化系统控制:/
      InitSysCtrl();

    /第二步:初始化GPIO口/
    InitGpio();

    /* 第三步:清除所有中断 和初始化 PIE 向量表:*/
    DINT;// 禁用CPU中断
    InitPieCtrl();// 初始化 PIE 控制寄存器到默认状态,默认状态是全部 PIE 中断被禁用和标志位被清除
    IER = 0x0000;// 禁用 CPU 中断和清除所有 CPU 中断标志位:
    IFR = 0x0000;
    InitPieVectTable();// 初始化 PIE 中断向量表
    // 中断重映射,注册中断程序入口(按需求添加)

    //
    

    /程序烧录入28335(可选)/
    #if RUN_TYPE==FLASH_RUN
    MemCopy(&RamfuncsLoadStart,&RamfuncsLoadEnd,&RamfuncsRunStart);
    InitFlash();
    #endif

    /* 第四步: 初始化所有外设*/
    // InitPeripherals(); //初始化所有外设

    /* 第五步:添加用户具体代码*/
    LED_GPIO_Config();//LED端口初始化

    /第六步:进入主循环/
    for(;;)
    {
    LED0(1);
    delay_1ms(1000);
    LED0(0);

        LED1(1);
        delay_1ms(1000);
        LED1(0);
    
        LED2(1);
        delay_1ms(1000);
        LED2(0);
    
        LED3(1);
        delay_1ms(1000);
        LED3(0);
    
        LED4(1);
        delay_1ms(1000);
        LED4(0);
    }
    

    }

    /**

    • @brief 1ms延迟函数
    • @parameter t
    • @return_value 无
      */
      void delay_1ms(Uint16 t)
      {
      while(t--)
      {
      DELAY_US(1000);
      }
      }

    效果如下

    0_1604765652995_260c4677-0405-44a9-8e43-b06635050ac5-image.png


 

Copyright © 2018 bbs.dian.org.cn All rights reserved.

与 Dian 的连接断开,我们正在尝试重连,请耐心等待