通过TMS320F28335学习DSP的开发流程——28335的基础知识(1)

1、TMS320F28335内核的主要特点

①F28335 DSP集成了DSP和微控制器的长处,如DSP的主要特征、单周期乘法运算,F28335能够在一个周期内完成32x32位的乘法累加运算,或者两个16x16位乘法累加运算,而同样32位的普通单片机则需要4个周期以上才能完成
②快速的中断响应
③可在任何内存位置进行单周期读、修改、写操作
④可采用C/C++编程软件,效率非常高

2、处理器的主要资源

①32位浮点DSP,主频是150MHz,方便电机控制、电力设备控制及工业控制等。
②片上存储器:FLASH–256Kx16位;SRAM–34Kx16位;BOOT ROM–8Kx16位;OPT ROM–2Kx16位。其中FLASH、OPT ROM受口令保护,可以保护用户程序。
③片上外设:PWM–18路;HRPWM–6路;CAP–6路;QEP–2通道;ADC–2*8通道,12位,80ns转换时间,0-3V输入量程;SCI–3通道;MCBPS–2通道;CAN–2通道;SPI–1通道;I2C–1通道;外部存储器扩展接口–XINTF;通用输入/输出IO–88个;看门狗电路。

3、与DSP2812的性能对比

通过TMS320F28335学习DSP的开发流程——28335的基础知识(1)_第1张图片
通过TMS320F28335学习DSP的开发流程——28335的基础知识(1)_第2张图片

3、存储器与寄存器

(1)存储器映射

存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配,给存储器分配地址的过程称为存储器映射,如果再分配一个地址就叫重映射。
通过TMS320F28335学习DSP的开发流程——28335的基础知识(1)_第3张图片

(2)F28335存储器特点

F28335是采用多级流水线的增强的哈佛总线结构,能够并行访问程序和数据存储空间。在F28335芯片内部集成了大量的不同的存储介质,F28335片上有256K×16位的FLASH,34K×16位的SARAM,8K×16位的BOOT ROM,2K×16位的OPT ROM,采用统一寻址方式(程序、数据和I/O统一寻址),从而提高了存储空间的利用率,方便程序的开发。除此之外,F28335还提供了外部并行扩展接口XINTF,可进一步外扩存储空间。
(1)片上SARAM
(2)BOOT ROM
(3)片上FLASH和OTP

通过TMS320F28335学习DSP的开发流程——28335的基础知识(1)_第4张图片

(3)寄存器映射

通过#pragma预处理命令和DATA_SECTION将定义的寄存器指定到相应的存储单元内,然后即可通过C语言来操作这些寄存器。
比方说我们找到0x007010这个单元地址,那么可以通过查阅芯片数据手册了解到此单元是系统控制寄存器功能(至于此地址如何查找这个功能我们后面会具体介绍)。因此为了更好区分此单元的功能和方便后续的程序开发,可以给这个单元取一个别名SysCtrlRegs,那么这个SysCtrlRegs就是寄存器,并且这个寄存器地址就是0x007010。这个过程就是寄存器映射。

(4)如何访问F28335寄存器内容

根据#pragma和DATA_SECTION(这些是CCS软件内特定的)的特点,可以使用#pragma和DATA_SECTION将定义的寄存器与实际的存储单元对应起来,然后再使用C语言操作定义的寄存器,比如使用结构体等。假如我们要让F28335的GPIOC的第68管脚输出低电平,我们怎么使用 C 语言来处理?
(1)首先要知道GPIO外设每类寄存器所对应存储单元的首地址是哪个,比如GPIO控制寄存器,通过查询数据手册可知其首地址是0x006F80,然后使用#pragma和DATA_SECTION将定义的寄存器与实际的存储单元对应起来。

#pragma DATA_SECTION(GpioCtrlRegs,"GpioCtrlRegsFile");

该定义可在DSP2833x_GlobalVariableDefs.c文件中查找到

volatile struct GPIO_CTRL_REGS GpioCtrlRegs;

GPIO数据寄存器GPIO_DATA_REGS:

struct GPIO_DATA_REGS 
{
   union  GPADAT_REG       GPADAT;       // GPIO Data Register (GPIO0 to 31)
   union  GPADAT_REG       GPASET;       // GPIO Data Set Register (GPIO0 to 31)
   union  GPADAT_REG       GPACLEAR;     // GPIO Data Clear Register (GPIO0 to 31)
   union  GPADAT_REG       GPATOGGLE;    // GPIO Data Toggle Register (GPIO0 to 31) 
   union  GPBDAT_REG       GPBDAT;       // GPIO Data Register (GPIO32 to 63)
   union  GPBDAT_REG       GPBSET;       // GPIO Data Set Register (GPIO32 to 63)
   union  GPBDAT_REG       GPBCLEAR;     // GPIO Data Clear Register (GPIO32 to 63)
   union  GPBDAT_REG       GPBTOGGLE;    // GPIO Data Toggle Register (GPIO32 to 63)
   union  GPCDAT_REG       GPCDAT;       // GPIO Data Register (GPIO64 to 95)
   union  GPCDAT_REG       GPCSET;       // GPIO Data Set Register (GPIO64 to 95)
   union  GPCDAT_REG       GPCCLEAR;     // GPIO Data Clear Register (GPIO64 to 95)
   union  GPCDAT_REG       GPCTOGGLE;    // GPIO Data Toggle Register (GPIO64 to 95)
   Uint16                  rsvd1[8];
};
union GPACTRL_REG 
{
   Uint32              all;
   struct GPACTRL_BITS bit;
};

// GPIO A control register bit definitions */                                    
struct GPACTRL_BITS 
{  // bits   description
   Uint16 QUALPRD0:8;        // 7:0    Qual period 
   Uint16 QUALPRD1:8;        // 15:8   Qual period 
   Uint16 QUALPRD2:8;        // 23:16  Qual period 
   Uint16 QUALPRD3:8;        // 31:24  Qual period  
};

所以要让GPIO68输出一个低电平可使用C语言调用结构体内成员,如下:

GpioDataRegs.GPCCLEAR.bit.GPIO68=1;//设置GPIO输出低电平信号

你可能感兴趣的:(c语言,链表,开发语言)