使用C语言操作DSP的寄存器.ppt
第6章 使用C语言操作DSP的寄存器,手把手教你学DSP基于TMS320X281X,北京航空航天大学出版社 作者:顾卫钢,HELLODSP:专业的DSP开发工具和方案供应商,可定制承接项目,手把手教你学DSP基于TMS320X281X,北京航空航天大学出版社 作者:顾卫钢,HELLODSP:专业的DSP开发工具和方案供应商,可定制承接项目,6.1 寄存器的C语言访问,由于DSP的寄存器能够实现对系统和外设功能的配置与控制,因此在DSP的开发过程中,对于寄存器的操作是极为重要的,也是很频繁的,也就是说对寄存器的操作是否方便会直接影响到DSP的开发是否方便。幸好,F2812为大家提供了位定义和寄存器结构体的方式,能够很方便的实现对DSP内部寄存器的访问和控制。,6.1.1 了解SCI的寄存器,6.1.2 使用位定义的方法定义寄存器,所谓“位域”就是把一个字节中的二进制位划分为几个不同的区域,并说明每个区域的位数。每个域都有一个域名,允许在程序中按域名进行操作。位域的定义和位域变量的说明同结构体定义和其成员说明类似,其语法格式为:Struct 位域结构名 类型说明符 位域名1:位域长度 类型说明符 位域名2:位域长度 类型说明符 位域名n:位域长度;,例6-1 位域定义,struct bs/定义位域bs int a:8;int b:2;int c:6;,例6-2 用位域定义SCICCR,struct SCICCR_BITS Uint16 SCICHAR:3;/2:0 字符长度控制位 Uint16 ADDRIDLE_MODE:1;/3 多处理器模式控制位 Uint16 LOOPBKENA:1;/4 回送测试模式使能位 Uint16 PARITYENA:1;/5 极性使能位 Uint16 PARITY:1;/6 奇/偶极性选择位 Uint16 STOPBITS:1;/7 停止位个数 Uint16 rsvd1:8;/15:8 保留;struct SCICCR_BITS bit;bit.SCICHAR=7;/SCI字符长度控制位为8位,例6-3 SCICCR的共同体定义,union SCICCR_REG Uint16 all;/可实现对寄存器整体操作 struct SCICCR_BITS bit;/可实现位操作;union SCICCR_REG SCICCR;SCICCR.all=0 x007F;SCICCR.bit.SCICHAR=5;,例6-4 SCI寄存器的结构体文件,struct SCI_REGS union SCICCR_REG SCICCR;/通信控制寄存器 union SCICTL1_REG SCICTL1;/控制寄存器1 Uint16 SCIHBAUD;/波特率寄存器(高字节)Uint16 SCILBAUD;/波特率寄存器(低字节)union SCICTL2_REG SCICTL2;/控制寄存器2 union SCIRXST_REG SCIRXST;/接收状态寄存器 Uint16 SCIRXEMU;/接收仿真缓冲寄存器 union SCIRXBUF_REG SCIRXBUF;/接收数据寄存器 Uint16 rsvd1;/保留 Uint16 SCITXBUF;/发送数据缓冲寄存器 union SCIFFTX_REG SCIFFTX;/FIFO 发送寄存器 union SCIFFRX_REG SCIFFRX;/FIFO 接收寄存器 union SCIFFCT_REG SCIFFCT;/FIFO 控制寄存器 Uint16 rsvd2;/保留 Uint16 rsvd3;/保留 union SCIPRI_REG SCIPRI;/FIFO 优先级控制寄存器;extern volatile struct SCI_REGS SciaRegs;extern volatile struct SCI_REGS ScibRegs;,例6-5 对SCICCR按位进行操作,SciaRegs.SCICCR.bit.STOPBITS=0;/1位停止位SciaRegs.SCICCR.bit.PARITYENA=0;/禁止极性功能SciaRegs.SCICCR.bit.LOOPBKENA=0;/禁止回送测试模式功能SciaRegs.SCICCR.bit.ADDRIDLE_MODE=0;/空闲线模式SciaRegs.SCICCR.bit.SCICHAR=7;/8位数据位,例6-6 对SCICCR整体进行操作,SciaRegs.SCICCR.all=0 x0007;,例6-7 对SCIHBAUD和SCILBAUD进行操作,SciaRegs.SCIHBAUD=0;SciaRegs.SCILBAUD=0 xF3;,6.2 寄存器文件的空间分配,使用DATA_SECTION方法将寄存器文件分配到数据空间 将数据段映射到寄存器对应的存储空间,例6-8 将变量分配到数据段,#pragma DATA_SECTION(SciaRegs,SciaRegsFile);volatile struct SCI_REGS SciaRegs;#pragma DATA_SECTION(ScibRegs,ScibRegsFile);volatile struct SCI_REGS ScibRegs;,例6-9 将数据段映射到寄存器对应的存储空间,MEMORY PAGE 1:SCI_A:origin=0 x007050,length=0 x000010 SCI_B:origin=0 x007750,length=0 x000010 SECTIONS SciaRegsFile:SCI_A,PAGE=1 ScibRegsFile:SCI_B,PAGE=1,