资源描述
*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,一、寄存器的,C,语言访问,二、寄存器文件的空间分配,三、使用,C,语言设置通用定时器,四、使用,C,语言设置比较单元,五、使用,C,语言设置捕获单元与,QEP,电路,第六章 使用,C,语言操作事件管理寄存器,F2812,的寄存器能够实现对系统和外设功能的配置与控制,因此在,F2812,的开发中对寄存器的操作是极为重要的,操作寄存器常用的语言有两种,汇编和,C,语言,而采用,C,语言,更加形象,更加有助于理解,.,本讲就以事件管理器寄存器的操作为例,讲解如何使用,C,语言对,F2812,的寄存器进行操作,.,一、寄存器的,C,语言访问,使用位定义的方法定义寄存器,什么是位域,所谓位域,就是将一个字节中的二进制位划分为几个不同的区域,并说明每个区域的位数,每个域都有一个域名,允许在程序中按域名进行操作,.,位域的定义和位域变量的说明同结构体定义和其成员说明类似,其语法格式如图,:,Struct,位域结构名,类型说明符 位域名,1,:位域长度,类型说明符 位域名,2,:位域长度,类型说明符 位域名,n,:位域长度,使用位定义的方法定义寄存器,关于位域,需要注意以下几项,:,类型说明符就是基本的数据类型,一般取,Unit16,位域名一般根据寄存器功能取,也可以无域名,作用起填充或调整位置,;,无名的位域不能使用。,位域的定义必须按照从右往左的顺序进行;,一个位域必须存储在同一个字节中,不能跨两个字节,这样,位域的长度不能大过一个字节;,位域的长度不能大于一个字节的长度,也就是说一个位域不能超过,8,位;,Struct bs,int a:4;,int :0;/,空域,int b,:,5;/,从第,2,个字节开始存放,int c:3,;,;,Struct bs,int a:4;,int :2;/,这,2,位不能使用,int b,:,2;/,从第,2,个字节开始存放,int c:5,;,int d:3,;,;,c,b,a,6,位,2,位,8,位,位域定义实例,struct bs,/,定义位域,bs,int a:8;,int b:2;,int c:6;,;,/,这里的分号不能省略,struct bs bs1;/,声明,bs,型变量,bs1,定义一个位域,bs,EVA/B,中通用定时器全局控制寄存器位域定义,Reserved,T2STAT,T1STAT,T2CTRIPE,T1CTRIPE,T2TOADC,T1TOADC,T1TOADC,TCMPOE,T2CMPOE,T1CMPOE,T2PIN,T1PIN,D15 D14 D13 D12 D11 D10 D9 D8,R-0,R-1 R-1,R/W-1,R/W-1,R/W-0 R/W-0,D7 D6 D5 D4 D3 D2 D1 D0,R/W-0,R/W-0 R/W-0,R/W-0,R/W-0 R/W-0,struct GPTCONA_BITS,Uint16 T1PIN:2;,Uint16 T2PIN:2;,Uint16 T1CMPOE:1;,Uint16 T2CMPOE:1;,Uint16 TCMPOE:1;,Uint16 T1TOADC:2;,Uint16 T2TOADC:2;,Uint16 T1CTRIPE:1;,Uint16 T2CTRIPE:1;,Uint16 T1STAT:1;,Uint16 T2STAT:1;,Uint16 rsvd:1;,;,使用位定义的方法定义寄存器可以方便地对寄存器功能,位,进行操作,但是有时候如果需要对,整个寄存器,进行操作,就需要对寄存器整体进行共同体的定义,.,声明共同体,union GPTCONA_REG,Uint16 all;,/,可实现对寄存器整体操作,struct GPTCONA_BITS bit;,/,可实现位操作,;,union,GPTCONA_REG GPTCONA;,/,声明一个共同体变量,GPTCONA,EVA/B,中通用定时器全局控制寄存器结构体定义,对寄存器定义了共同体之后,就可以对寄存器进行整体的或者按位的操作,这种二选一操作方式的实现正是定义共同体的优势所在,.,EVA/B,中除了通用定时器全局控制寄存器,GPTCONA,外,还有许多其它的寄存器,为了便于管理,需要创建一个结构体,用来包含,EV,中的,所有的寄存器,.,创建结构体文件,struct EVA_REGS ,union GPTCONA_REG GPTCONA;,Uint16 T1CNT;,Uint16 T1CMPR;,Uint16 T1PR;,union TCONA_REG T1CON;,Uint16 T2CNT;,Uint16 T2CMPR;,Uint16 T2PR;,union TCONA_REG T2CON;,union EXTCONA_REG EXTCON;,Uint16 rsvd17;,union COMCONA_REG COMCONA;,Uint16 rsvd2;,union ACTRA_REG ACTR;,Uint16 rsvd3;,union DBTCON_REG DBTCONA;,Uint16 rsvd4;,Uint16 CMPR1;,Uint16 CMPR2;,定义了,EVA,中所有寄存器的结构体,Uint16 CMPR3;,Uint16 rsvd56;,union CAPCONA_REG CAPCON;,Uint16 rsvd6;,union CAPFIFOA_REG CAPFIFO;,Uint16 CAP1FIFO;,Uint16 CAP2FIFO;,Uint16 CAP3FIFO;,Uint16 rsvd7;,Uint16 CAP1FBOT;,Uint16 CAP2FBOT;,Uint16 CAP3FBOT;,Uint16 rsvd82;,union EVAIMRA_REG EVAIMRA;,union EVAIMRB_REG EVAIMRB;,union EVAIMRC_REG EVAIMRC;,union EVAIFRA_REG EVAIFRA;,union EVAIFRB_REG EVAIFRB;,union EVAIFRC_REG EVAIFRC;,;,EVA,的结构体,EVA_REGS,中,有的成员是,union,类型的,有的是,Uint16,类型的,union,的既可以实现整体操作,也可以按位操作,而,Uint16,的只能按位操作,.,前边对,F2812,的寄存器按照,C,语言中位域定义和寄存器结构体的方式组织了数据结构,那么,编译器是 如何把这些变量分配到存储空间的呢,?,这个工作需要两步来完成,:,第一步,:,使用,DATA_SECTION,的方法将寄存器文件分配到数据空间中的某个数据段,.,第二步,:,在,CMD,文件,中,将这个数据段直接映射到这个外设寄存器所占的存储空间,.,二、寄存器文件的空间分配,在,source,目录中的,DSP28_GlobalVariableDefs.c,文件,记录了所有寄存器的分配情况,事件管理器结构框图,通用定时器,全比较单元,捕获单元,我们将按照这,3,块内容 介绍如何用,C,语言设置寄存器的方法,通用定时器功能概述,三、使用,C,语言设置通用定时器,通用定时器模块包含:,一个,16,位可读,/,写及增,/,减的定时器计数器,TxCNT,(,x=1,,,2,,,4,)。,一个,16,位可读,/,写定时器比较寄存器(双缓冲),TxCMPR,;,一个,16,位可读,/,写定时器周期寄存器(双缓冲),TxPR,;,一个,16,位可读,/,写定时器控制寄存器,TxCON,;,一个通用定时器比较输出引脚,TxCMP,;,用于内部和外部时钟输入的可编程定标器;,控制和中断逻辑,用于,4,个可屏蔽中断(上溢、下溢、比较和周期中断);,输出条件逻辑。,红色方框中的寄存器需要在使用中进行设置,通用定时器输入与输出,内部高速外设时钟,HSPCLK,外部时钟,TCLKINA/B,方向输入,TDIRA/B,复位信号,RESET,比较输出,TxCMP,ADC,转换启动信号,提供上溢、下溢、比较匹配和周期匹配信号,计数方向标识位,输入,输出,寄存器名,地 址,功能描述,TxCNT,0 x0000 7401H /7405H /7501H /7505H,计数寄存器,TxCMPR,0 x0000 7402H /7406H /7502H /7506H,比较寄存器,TxPR,0 x0000 7403H /7407H /7503H /7507H,周期寄存器,TxCON,0 x0000 7404H /7408H /7504H /7508H,控制寄存器,GPTCONA/B,全局通用定时控制寄存器,x,=1,,,2,,,3,,,4,红色表示,的寄存器需要在使用中进行设置,通用定时器寄存器,通用定时器 控制寄存器,TxCON,R/W-0,R/W-0 R/W-0,R/W-0,R/W-0,R/W-0 R/W-0 R/W-0,Free,Soft,Reserved,TMODE1,TMODE0,TPS2,TPS1,TPS0,T2SWT1/,T4SWT3,TENABLE,TCLKS1,TCLKS0,TCLD1,TCLD0,TECMPR,SELT1PR/,SELT3PR,D15 D14 D13 D12 D11 D10 D9 D8,D7 D6 D5 D4 D3 D2 D1 D0,R/W-0,R/W-0 R/W-0,R/W-0,R/W-0,R/W-0 R/W-0 R/W-0,选择,4,种计数模式的一种,使用内部还是外部时钟,确定输入时钟使用的预定标参数,确定比较寄存器重新装载的条件,使能或禁止通用定时器,使能或禁止通用定时器的比较操作,实现功能,C,语言操作,(EVA,中,T1,为例,),具体各位的含义请参见手册的表格,直接对下列寄存器赋值即可完成寄存器操作,全局通用定时器 控制寄存器,(,GPTCONA,为例,),Reserved,T2STAT,T1STAT,T2CTRIPE,T1CTRIPE,T2TOADC,T1TOADC,T1TOADC,TCMPOE,T2CMPOE,T1CMPOE,T2PIN,T1PIN,D15 D14 D13 D12 D11 D10 D9 D8,R-0,R-1 R-1,R/W-1,R/W-1,R/W-0 R/W-0,D7 D6 D5 D4 D3 D2 D1 D0,R/W-0,R/W-0 R/W-0,R/W-0,R/W-0 R/W-0,定时器,2,的计数状态,(,只读,),定时器,1,的计数状态,(,只读,),事件,2,启动,ADC,转换,事件,1,启动,ADC,转换,定时器比较输出使能位,定时器,2,比较输出使能位,定时器,1,比较输出使能位,定时器,2,比较输出极性,定时器,1,比较输出极性,实现功能,C,语言操作,(EVA,为例,),直接对下列寄存器赋值即可完成寄存器操作,具体各位的含义请参见手册的表格,通用定时器比较寄存器,TxCMPR,R/W-x,TxCMPR,D15 D0,定时器比较寄存器,x=1,2,3,4,比较寄存器中的值与通用定时器的计数值比较,当比较匹配时,产生:,由,GPTCONA/B,位的设置决定相关的比较输出信号发生跳变;,相应的中断标志被置位;,若中断没有被屏蔽,则产生一个外设中断请求。,通过设置,TxCON,的相关位,可以使能或禁止比较操作。无论在哪种定时器工作模式(包括,QEP,模式),比较和输出均可被使能或禁止。,C,语言访问:,EvaReg.T1CMPR(,以,EVA,中的,T1,为例,),通用定时器 周期寄存器,TxPR,TxPR,D15 D0,R/W-x,定时器比较寄存器,x=1,2,3,4,周期寄存器的值决定定时器的定时周期。当周期定时器的值与计数器的值匹配时,根据计数器的计数模式,通用定时器
展开阅读全文