- 1、本文档共2页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
外设寄存器的访问
F2812中有大量的外设寄存器, 在具体的应用中,要把这些寄存器根据实际需要进行配置。这也是程序在初始化期间需要做的主要工作,在配置完成后,才可以进入正常的流程,即业务逻辑处理阶段。以我的应用为例,F2812主要完成下列工作:2路A/D采样,2路PWM输出,6路GPIO输出。在此基础上,我将进行运算处理,实现主要功能。 传统的寄存器访问方式,通过Macro定义实现。在TI提供的头文件中,提供了一种新的方式:bit field 和struct 方式,即位域加结构的方式。在这种方式中,定义struct来表示与某个外设相关的一组寄存器,然后由Linker程序负责将寄存器映射到内存中。如对于定时器寄存器,定义: ??struct CPUTIMER_REGS { Uint32 TIM; // Timer counter register Uint32 PRD; // Period register Uint16 TCR; // Timer control register Uint16 rsvd1; // reserved Uint16 TPR; // Timer pre-scale low Uint16 TPRH; // Timer pre-scale high }; 这样,如果DSP内有多个定时器,则可以通过声明多个变量实现对三个定时器寄存器的访问,便于代码复用。 利用编译器的DATA_SECTION #pragma,为每个变量分配一个数据段。然后,通过在cmd文件,Linker将每个数据段映射为内存中与该外设寄存器相对应的内存地址。 这时,还不能实现对寄存器,如TIM中的每一位的访问。需要对每个寄存器,为其定义位域,使每一位都可以访问,如定义TCR的位域: struct TCR_BITS { // bits description Uint16 rsvd1:4; // 3:0 reserved Uint16 TSS:1; // 4 Timer Start/Stop Uint16 TRB:1; // 5 Timer reload Uint16 rsvd2:4; // 9:6 reserved Uint16 SOFT:1; // 10 Emulation modes Uint16 FREE:1; // 11 Uint16 rsvd3:2; // 12:13 reserved Uint16 TIE:1; // 14 Output enable Uint16 TIF:1; // 15 Interrupt flag }; 然后,定义一个Union,允许该寄存器既可以按bit访问,也可以作为整体访问: ??union TCR_REG { Uint16 all; struct TCR_BITS bit; }; 在如此这样对每个寄存器都定义好后,重写struct CPUTIMER_REGS如下: struct CPUTIMER_REGS { union TIM_GROUP TIM; // Timer counter register union PRD_GROUP PRD; // Period register union TCR_REG TCR; // Timer control register Uint16 rsvd1; // reserved union TPR_REG TPR; // Timer pre-scale low union TPRH_REG TPRH; // Timer pre-scale high }; 这时,每个寄存器都可以按bit或作为整体访问了。 这样的方式,对于程序员来说,更容易理解,程序也更容易维护。 这样做的坏处:产生的代码长度稍大一些。 另外,对于有些特殊的寄存器,如WDCR,就没有定义Bit field和Union。 上面讲了这么多,那么我们是否需要将这些寄存器全部自己定义呢?答案是不需要。因为TI公司已经为我们提供了现成的.H文件,为我们做好了这些工作。在编程时,我们只需要搞清楚需要把那个头文件包含进来就行了。
您可能关注的文档
- 数学基础-拉普拉斯变换.ppt
- 电位滴定仪项目可行性研究报告(目录).doc
- 自动电位滴定仪项目投资可行性研究报告(目录).doc
- 16课基础图案1.ppt
- 高考数学总复习精品课件(基础、专项、强化)第五章 5.3.ppt
- 高考数学总复习精品课件(基础、专项、强化)第二章 2.2.ppt
- 基础图案,发哥.ppt
- 基础图案的设计.ppt
- 浅谈ArcGIS数字地图拓扑85553.ppt
- 人才是破解管理盲点的杠杆.doc
- 2024版2024年【配套K12】教科版四年级上品社教案.doc
- 2024版2024年【课件讲稿】高二物理复习课.doc
- 2024版2024年5B Unit 4 See the tor 集体备课教学设计教案.doc
- 2024版2024年【幼儿教案】中班幼儿英语教案《pets》.doc
- 2024版2024年【精选】幼儿园中班科学教案范文合集.doc
- 2024版2024年【幼儿园】中班科学活动教案找方位教案.doc
- 2024版2024年【幼儿园精品教案】大班科学教案《春茶》.doc
- 2024版2024年7.2维护祖国统一课件.doc
- 2024版2024年【人教版】小学三年级上册道德与法治教案.doc
- 2024版2024年10以内数的认识教案合集.doc
文档评论(0)