您的当前位置:首页正文

dsp学习笔记(上)

2021-09-22 来源:好走旅游网


1、cj431电压基准芯片,2.5v

2、电平标准

3、驱动器74HC245(为增强PWM的驱动负载能力)

4、增加输入端的抗干扰能力:在芯片的输入端加上拉电阻加电源或者下拉电阻接地,没有用到的采样端口尽量不要悬空。 5、D/A电路方案

通用扩展语言GEL和c相似,但是有所不同。GEL语言是C语言的一个子集。与c语言不同的是gel不需要指定函数返回值的类型。Gel中的while语句和c中的while语句相同,gel不支持标准c的break和continue语句

6、一个完整的dsp工程包括头文件(.h),库文件(.lib),源文件(.c),以及配置文件.Cmd

使用关键字MENUITEM可以在gel菜单下选择用户自定义的菜单项,然后用hotmenu、dialog或slider等关键字,在这个新的下拉菜单中添加新的菜单项。

7、关于添加文件遇到的问题

8、变量查找:editfind:Ctrl+f 9、调试时,添加断点的快捷方法如下

点击图上的小手即可 10、单步调试

第一个的意思是单击一步走一步,第二个的意思是指在单步运行时遇到子函数不进入子函数内部进行而是把它当成一步来执行,第三个的意思是当执行到子函数内部时使用这个按钮就可以执行完剩下的部分返回上一层函数。

如果想在一个窗口内同时看到c和汇编,则有操作Viewmixed source/asm 11、观察变量

右击变量add to watch window 可以得到变量的值、类型、地址等。

12、位域定义、结构体以及共同体的知识

结构体先定义再声明

Union SCIFFCT_REG { Uint16 all;

Struct SCIFFCT_BITS bit; };

//---------------------------------------------------------------------------

// SCI Register File: //

Struct SCI_REGS {

Union SCICCR_REG SCICCR; // Communications control register Union SCICTL1_REG SCICTL1; // Control register 1

Uint16 SCIHBAUD; // Baud rate (high) register Uint16 SCILBAUD; // Baud rate (low) register Union SCICTL2_REG SCICTL2; // Control register 2

Union SCIRXST_REG SCIRXST; // Receive status register

Uint16 SCIRXEMU; // Receive emulation buffer register

Union SCIRXBUF_REG SCIRXBUF; // Receive data buffer Uint16 rsvd1; // reserved

Uint16 SCITXBUF; // Transmit data buffer Union SCIFFTX_REG SCIFFTX; // FIFO transmit register Union SCIFFRX_REG SCIFFRX; // FIFO receive register Union SCIFFCT_REG SCIFFCT; // FIFO control register Uint16 rsvd2; // reserved Uint16 rsvd3; // reserved

Union SCIPRI_REG SCIPRI; // FIFO Priority control };

//---------------------------------------------------------------------------

// SCI External References & Function Declarations: //

Extern volatile struct SCI_REGS SciaRegs; Extern volatile struct SCI_REGS ScibRegs;

由于scihbaud和scilbaud定义时为unit16型的,所以不能用.all或者.bit的方式来访问,只能直接给寄存器整体进行赋值。

非常方便的功能:如下图,不用记那么多的寄存器了

寄存器文件的空间分配

(1) 使用data section方法将寄存器文件分配到数据空间

(2) 数据段映射到寄存器对应的存储空间

条件编译

预处理程序提供了条件编译的功能。 可以按不同的条件去编译不同的程序部分,因而产生不同的目标代码文件。这对于程序的移植和调试是很有用的。 条件编译有三种形式,下面分别介绍:

1. 第一种形式:

#ifdef 标识符 程序段1 #else

程序段2 #endif

它的功能是,如果标识符已被 #define命令定义过则对程序段1进行编译;否则对程序段2进行编译。如果没有程序段2(它为空),本格式中的#else可以没有,即可以写为: #ifdef 标识符

第七章 存储器的结构、映像及cmd文件的编写 总线结构为哈佛结构

什么叫分页机制?

http://www.eefocus.com/article/09-05/71862s.html

分页机制在段机制之后进行,以完成线性—物理地址的转换过程。段机制把逻辑地址转换为线性地址,分页机制进一步把该线性地址再转换为物理地址。

分页机制管理的对象是固定大小的存储块,称之为页(page)。分页机制把整个线性地址空间及整个物理地址空间都看成由页组成,在线性地址空间中的任何一页,可以映射为物理地址空间中的任何一页(我们把物理空间中的一页叫做一个页面或页框(page frame))。

使用段的好处在于实现模块化编程

Cmd文件的编写:

1、注释支持:/* */但不支持//,有些关键字必须大写如SECTIONS/MEMORY 2、通过MEMORY伪指令来指示存储空间和SECTIONS分配存储空间。 格式如下:

SECTIONS {

/* Allocate program areas: */

.cinit : > FLASHA PAGE = 0 .pinit : > FLASHA, PAGE = 0 .text : > FLASHA PAGE = 0 Codestart : > BEGIN PAGE = 0 Ramfuncs : LOAD = FLASHD, RUN = RAML0,

LOAD_START (_RamfuncsLoadStart), LOAD_END (_RamfuncsLoadEnd), RUN_START (_RamfuncsRunStart), PAGE = 0

Csmpasswds : > CSM_PWL PAGE = 0 csm_rsvd : > CSM_RSVD PAGE = 0

/* allocate uninitialized data sections: */

.stack : > RAMM0 PAGE = 1 .ebss : > RAML1 PAGE = 1 .esysmem : > RAMH0 PAGE = 1

/* For SDFlash to program these, they must be allocated to page 0 */ .econst : > FLASHA PAGE = 0 .switch : > FLASHA PAGE = 0

/* allocate IQ math areas: */

IQmath : > FLASHC PAGE = 0 /* Math Code */ IQmathTables : > ROM PAGE = 0, TYPE = NOLOAD /* Math Tables In ROM */

/* .reset is a standard section used by the compiler. It contains the */ /* the address of the start of _c_int00 for C Code. /* /* When using the boot ROM this section and the CPU vector */ /* table is not needed. Thus the default type is set here to */

/* DSECT */

.reset : > RESET, PAGE = 0, TYPE = DSECT Vectors : > VECTORS PAGE = 0, TYPE = DSECT

}

烧到FLASH中时,程序运行速度将大大降低,因此希望一些对时间要求较精准的子程序在RAM中运行。

那又如何做到呢??

1、 2、 3、

在FLASH.CMD中划分一段来设置RAM的载入和运行地址

在源文件中利用调用函数memcpy()将FLASH中的内容复制到RAM中运行。

在头文件中定义新变量

F2812片内拥有18k*16位的ram空间和128k*16位的flash空间

第八章 时钟和系统控制

1、振荡器和锁相环

时钟就像人的心跳一样,对于系统而言他是很重要的。

通过软件实时的配置片上外设时钟,片内有较高的时钟频率而片外可以运行在比较低的频率上面。

常用第三种情况:使能,当PLLCR不为0时,写10进去则可获得最大的时钟频率150MHZ。

看门狗电路的基本原理:看门狗电路和一个I/O口连接,通过程序控制该口向看门狗电路送入高电平或者低电平,这些控制看门狗电路的语句分散在程序中,起到一个监测的作用。在程序跑飞的情况下,可以使复位,程序从头开始执行。

向看门狗密钥寄存器8位(WDKEY)写0X55+0XAA的理解 0X55+0XAA=255,使WDCNTR计数器清除

强调顺序:先写0X55再写0XAA,0X55使能,0XAA清除

LPMCR(1-0)的不同决定了四种不同的功耗模式

外设时钟控制寄存器PCLKCR能控制片内各种时钟的工作状态 外设时钟控制寄存器

系统与控制状态寄存器

高速外设时钟预定标寄存器(HISPCP)HSPCLK

低速外设时钟预定标寄存器(LOSPCP)LSPCLK

低速时类似

PLL控制寄存器

第9章 通用输入/输出多路复用GPIO

因篇幅问题不能全部显示,请点此查看更多更全内容