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);
}
}
效果如下