ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:24.18KB ,
资源ID:23933272      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/23933272.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(430G2231实验辅导.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

430G2231实验辅导.docx

1、430G2231实验辅导实验1 实验1的代码较长,一开始不需要全部弄懂 该实验的目的是熟悉项目的建立、编译和下载 修改好代码之后,进行以下操作 o Project - Build All,编译代码 o Run-Debug,下载代码,此时编译好的二进制代码下载到芯片内部,处理器Halt在main()函数的入口。 o Run-Resume,运行代码,此时会看到电路板上有一个红色和一个绿色的LED灯交替闪烁。 实验2简介 实验2的目的是设定时钟。为了低功耗,MSP430可以使用不同速率的时钟源,在计算任务密集时用高速时钟,在空闲时用低速时钟。 通过设定寄存器的值来设定选择哪个时钟源作为处理器的工作时

2、钟。 MSP430片内自带有一个RC振荡器,称为DCO,由于集成电路工艺的精度限制,每个430芯片中,该振荡器的震荡频率不一致。所以每个430芯片的FLASH存储器中固化了两个校正数据,分别存放于CALBC1_1MHZ和CALDCO_1MHZ 两个位置。这两个位置的数据在出厂的时候被写成校准值,但是如果用户把它们清除了(通常FLASH的擦除会把内容置为0xff),那么这颗芯片就无法再得到准确的时钟频率了。 为了做到低功耗,所以无法设计出 实验现象 该代码正常运行后,可以看到一个绿色LED以较快的频率不停的闪烁 代码/*/ LaunchPad Lab2 - Software Toggle P1.

3、0,/ MSP430G2xx2/ -/ /| XIN|-/ | | |/ -|RST XOUT|-/ | |/ | P1.0|-LED/*#include void main(void) WDTCTL = WDTPW + WDTHOLD; / Stop watchdog timer if (CALBC1_1MHZ = 0xFF | CALDCO_1MHZ = 0xFF) while(1); / If calibration constants erased, trap CPU! / Configure Basic Clock BCSCTL1 = _; / Set range DCOCTL =

4、_; / Set DCO step + modulation BCSCTL3 |= LFXT1S_2; / Set LFXT1 P1DIR = BIT6; / P1.6 output (green LED) P1OUT = 0; / LED off IFG1 &= OFIFG; / Clear OSCFault flag BCSCTL2 |= _ + DIVM_3; / Set MCLK for(;) P1OUT = BIT6; / P1.6 on (green LED) _delay_cycles(100); P1OUT = 0; / green LED off _delay_cycles(

5、5000); 关于设定C语言变量特定比特位 对于一个寄存器,它的某个特定的比特位都是有具体的意义,需要单独进行设定。 一般来说,寄存器会被映射成C程序的变量,我们通过设定这些变量的具体内容来配置寄存器。 在阅读代码时,请注意代码中预先定义的宏的值,某些数值是有特别的作用。例如0x04可以把比特2置为1(最低位是比特0),0x08可以把比特3置1,而0x04+0x08可以把比特2、3一起置为1.。 关于存储器映射寄存器的访问 首先,CPU中的寄存器都要进行编址,即所有的寄存器都要有个地址 读写这些编址的寄存器就像读写一个内存地址的内容 这种寄存器叫做存储器映射寄存器 如何在C语言中对这样的寄存器

6、读/写呢?以Lab2中的BCSCTL2寄存器为例,下面来探究一下 Lab2.c文件中:BCSCTL2 |= SELM_1 + DIVM_3 msp430g2231.h文件中:SFR_8BIT(BCSCTL2); /* Basic Clock System Control 2 */ o #define SFR_8BIT(address) extern volatile unsigned char address o #define SELM_1 (0x40) /* MCLK Source Select 1: DCOCLK */ o #define DIVM_3 (0x30) /* MCLK Di

7、vider 3: /8 */ o 从中可以看到SELM_1和DIVM_3是两个常量,而BCSCTL2的具体值没有看到 关键字释义 o extern 表示在外部定义的变量,通常是在其他的*.obj和*.lib文件中 o volatile:表示不允许编译器优化这个变量,例如以下代码: int a; int b; b = a + 1; b = b-a; 编译器扫描代码之后会发现实际上 b = 1。如果声明了a是volatile类型,会告知编译器不要随意对a的值进行假设,则a不会被优化掉。volatile 关键字通常用来声明某些外设或特殊的寄存器,通常不用来声明普通变量 比如在上面的代码中,如果a代表

8、一个通用管脚上的电平值。那么在b = a + 1;和 b = b-a之间的时刻,a的值可能会改变,所以b变量未必恒定为1,所以要声明a变量为 volatile int a; 手册 MSP430x2xx Family Users Guide o 5.3 Basic Clock Module+ Registers o Table 5-1. Basic Clock Module+ Registers RegisterShort Form Register Type Address Initial State Basic clock system control 2BCSCTL2Read/write0

9、58hReset with PUC 编译后在Debug目录中的.map 文件,描述编译之后的内存布局情况 仔细观察,可以发现map文件主要描述 o 内存分成几个部分(MEMORY CONFIGURATION),起始位置和大小 o 区段的映射(SECTION ALLOCATION MAP) o 全局的符号表(GLOBAL SYMBOLS),名字和地址,其中有这一行:00000058 BCSCTL2 o 看到这里,应当知道了,BCSCTL2是一个地址为 0x58的全局符号,请思考这对应C语言里面的什么语法元素呢? 编译后在Debug目录中的.objects.mk 文件,有这一行LIBS := $(

10、GEN_CMDS_FLAG) -llibc.a,这是C语言的支持库(之一) 在ticcsv5toolscompilermsp430lib中可以发现 libc.a文件 cmd文件探索 o cmd 文件是 link command file的缩写,link是从源代码向二进制代码转换过程中的一个环节 o link前面的过程是compile,该过程把各个源代码生成obj文件,每个obj文件描述了一些逻辑,比如根据一部分变量的值来计算 o 项目的cmd文件lnk_msp430g2231.cmd中,没有关于BCSCTL2的描述,但是在最后一行里面有一行 -l msp430g2231.cmd,这说明当前cm

11、d文件还要引用其他的cmd文件。 o 搜索,发现msp430g2231.cmd文件位于ticcsv5ccs_basemsp430include目录中 o msp430g2231.cmd中有一行:BCSCTL2= 0x0058; 关于MSP430编译器的工作原理,详细的说明在以下两个文档里面 o MSP430 Assembly Language Tools v 4.0 Users Guide o MSP430 Optimizing C/C+ Compiler v 4.0 Users Guide o 注意:如果为了快速的掌握处理器的应用开发,然后去参加比赛,你不需要过早的仔细阅读以上两个文档,因为

12、如果不做东西,看过了也会忘记。 o 知识是慢慢积累的,为了完成任务够用就好。 那么为什么还要写这个文字? o 为了展示如何深入的探究一个问题? o 给出需要查阅哪些资料以及如何查阅这些资料的一个示范。 o 要善于用于搜索的功能(Ctrl+F) 实验3简介 实验3的目的是中断响应。 关于中断 回忆51单片机的中断,并且在430上找到类似的情况,(其他的处理器诸如各种DSP,ARM的各个系列对中断服务的设计也是类似,没有本质区别)关于处理器的中断通常有以下的情况 会有多个中断源,分别表示不同的事件发生 中断可以使电平(信号的值)的触发,也可以是边沿(信号值的改变情况)的触发 要有中断向量表,不同的

13、中断产生的时候,处理器会进入相应的中断地址。 有些中断时可以被屏蔽(不响应它),有些中断是不可以屏蔽的,比如复位或掉电。 会有一个全局的中断使能,这个是响应中断的总开关。 每个可屏蔽的中断应当有自己的使能寄存器,这个是每个中断独立的开关。 通常每个中断信号会有自己的中断向量地址,如果中断信号很多,对于一些优先级较低的中断信号,可以共享一个中断地址,那么当处理器从这个地址执行时,如何分辨到底是哪个中断信号有效了呢,可以在给这个中断地址配一个状态寄存器,这个寄存器的值由中断的硬件电路根据中断产生的情况写入,CPU读取这个寄存器的值就可以知道哪个中断产生了。 通常工具链(编译器、连接器)会提供某种方

14、法,比如扩展C语言的关键字,或是使用编译伪指令(#pragma) 关于看门狗 Watch Dog 为了防止系统死机或者是由于各种干扰造成的程序跑飞,某些单片机带有看门狗的功能,这种功能是可以启用或关闭的,但是需要注意的是系统复位后看门狗的默认状态,如果默认是开启,你必须做出相应的配置,否则它可能会将系统复位。 看门狗是这样一种电路,通常它有一个定时器,一个中断源,另外它还有连接系统复位信号的电路。 如果启用了看门狗电路,则它的计时器会进行计数,如果计时器溢出了,则会触发一个中断。 用户可以在看门狗的中断复位例程里面执行一些操作,比如把看门狗定时器清零,让它重新计数(称作喂狗),或是干脆关闭看门

15、狗。 如果看门狗的定时器溢出了,而用户在一定的时间里没有喂狗,这时看门狗会认为系统跑飞了,于是会把系统复位。 实验现象本实验正确完成后,按下开发板的P1.3按键,有一个LED灯会点亮,再次按下会熄灭。 代码注意: 以一个或两个下划线开头的变量或函数名称表示工具链内建的符号,通常不要自行定义这种以下划线开头的变量或函数/*/ LaunchPad Lab3 - Software Port Interrupt Service/ MSP430G2xx2/ -/ /| XIN|-/ | | |/ -|RST XOUT|-/ /| | |/ -o-|P1.3 P1.0|-LED/ |/*#include

16、void main(void) WDTCTL = WDTPW + WDTHOLD; / Stop watchdog timer P1DIR |= BIT0; / Set P1.0 to output direction P1IES |= BIT3; / P1.3 Hi/lo edge _ &= BIT3; / P1.3 IFG cleared _ |= BIT3; / P1.3 interrupt enabled _BIS_SR(LPM4_bits + GIE); / Enter LPM4 w/interrupt/ Port 1 interrupt service routine#pragma

17、 vector=_interrupt void Port_1(void) if (P1IFG & BIT3) P1OUT = BIT0; / P1.0 = toggle _ &= BIT3; / P1.3 IFG cleared 实验4简介本实验训练定时器的应用 关于定时器的工作模式 如果我们用硬件描述语言自己做一个计数器,我们可以有如下的功能,增加计数,减少计数,当定时器完成一次计数周期后,可以自动装载,也可保持不动,如果有多个定时器,还可能存在一个定时器的计数值需要另一个定时器的溢出事件来触发其改变(本质上是2个级联的计数器)。 处理器的定时器通常是支持上面说的所有功能,但是需要用户通过配

18、置寄存器来选择启用那一种。 另外,对于常见的情况,有时还会使用定时间对输入信号进行比较和捕获 比较模式 最普通的定时器的工作方式就是周期性的溢出。 思考如下的工作场景 o 在定时器的一个计数周期里面,例如从0计数到MAX o 我们需要在计数值为 MAX/8的时候,执行某个代码段A o 我们需要在计数值为 MAX/6的时候,执行某个代码段B o 我们需要在计数值为 MAX/2的时候,执行某个代码段C o 我们需要在计数值为 XXX 时候,执行某个代码段 XXX 如果定时器没有比较功能,则需要CPU一直不停的查询计数器的值,然后做出判断,实际上这是一种软件形式的比较,但是这样很费电。 如果定时器有

19、比较功能,则只需要设定合适的比较值,在满足比较条件的时刻触发中断,然后再让CPU来执行相应的代码段就好了,剩下的时间CPU可以休眠。 捕获模式 思考如下的工作场景 o 在定时器的一个计数周期里面,例如从0计数到MAX o 当某个事件第1次发生的时候,计数值为V1 o 当某个事件第2次发生的时候,计数值为V2 o 当某个事件. 用户对事件发生的时间间隔感兴趣 于是希望硬件电路可以自动的把事件发生时刻的计数值保存到某个寄存器里面,然后触发一次中断让CPU过来处理。 当然,也可以这样做,直接让这个事件触发一次中断,CPU响应这个中断,然后读取定时器的计数值。但是这样做的缺点是从这个事件发生到CPU读

20、取到计数值的过程中,需要执行很多条CPU的指令,此时计数器又已经计了若干的数,所以CPU读到的计数值并不是事件发生那个时刻的,而是滞后了一些,也就是说不准确。 实验现象 该代码正常运行后,可以看到一个绿色LED以较慢的频率不停的闪烁,并且在一个周期里面,亮的时间短,暗的时间长。 代码/*/ LaunchPad Lab4 - Timer Toggle P1.6,/ MSP430G2452/ -/ /| XIN|-/ | | |/ -|RST XOUT|-/ | |/ | P1.6|-LED/*#include void main(void) WDTCTL = WDTPW + WDTHOLD; /

21、 Stop watchdog timer if (CALBC1_1MHZ =0xFF | CALDCO_1MHZ = 0xFF) while(1); / If calibration constants erased, trap CPU! BCSCTL1 = CALBC1_1MHZ; / Set range DCOCTL = CALDCO_1MHZ; / Set DCO step + modulation BCSCTL3 |= LFXT1S_2; / LFXT1 = VLO P1DIR = 0x40; / P1.6 output (green LED) P1OUT = 0; / LED off

22、 IFG1 &= OFIFG; / Clear OSCFault flag BCSCTL1 |= DIVA_3; / ACLK = VLO/8 BCSCTL2 |= SELM_3 + DIVM_3 + DIVS_3; / MCLK = DCO/8, SMCLK = DCO/8 / Configure TimerA TACTL = _; / Source: ACLK, UP mode CCR0 = 5100; /Timer count 5100 CCR1 = 100; /Timer count 100 CCTL0 = CCIE; /CCR0 interrupt enabled CCTL1 = C

23、CIE; /CCR1 interrupt enabled _BIS_SR(GIE); for(;);/ Timer A0 interrupt service routine#pragma vector=_interrupt void Timer_A0 (void) P1OUT |= BIT6; / P1.6 output High/ Timer A1 Interrupt Vector (TA0IV) handler#pragma vector=_interrupt void Timer_A1(void) switch( TA0IV ) case 2: P1OUT &= BIT6; / P1.6

24、 output Low break; case 10: break; 实验5简介实验5关于处理器的低功耗模式 关于低功耗的数字电路 数字电路的功耗中存在两种来源,分别成为静态功耗和动态功耗 动态功耗是指当一个逻辑门的输出值发生反转时(从0到1从1到0)会消耗能量 o 究其原因是因为逻辑门等效的阻容电路的充放电。电容发生充放电就会有电荷流动 o 电阻上有电荷流过就会释放热量。 o 动态功耗与 成正比,其中f是数字电路的工作频率,C是整个电路等效出来的电容,V是供电电压。 o 从中可以看到,低功耗的数字电路应当工作在低频率、低电压下,电路的等效电容由集成电路工艺和电路尺寸决定,一旦芯片生产出来之后

25、就无法再改变了。 o 为了降低动态功耗,现代数字电路的供电电压日益降低,为了降低等效电容,采用低介电常数(low-k)的工艺。为了让芯片在待机的情况下不费电,可以把电路的时钟关闭(clock-gating技术)使得所有的信号逻辑都保持原值。 静态功耗是指,即使电路所有的门都不发生反转,只要接上了电压和地线,那么还是会有电流从芯片的VCC和GND之间通过(称作漏电流),从而费电发热。 o 为了降低静态功耗,现代集成电路采用了电源关闭(power gating)技术和多电压技术,即当电路进入待机模式后,把电源和地线之间的通道关闭,并且把电路切换到一个较低的电压,使得电路能够保持所有信号的状态值即可

26、,等电路进入工作模式后再打开电源通路并且切换到较高的工作电压。 CPU应用开发的低功耗策略 总的原则是,能不动就不动,能慢动就慢动 处理器会支持多种工作速率的模式,在不同的处理任务时使用不同的时钟频率 需要硬件电路支持多个不同速率的时钟,或者支持动态改变主时钟的速率 例如:配置CPU的默认状态是休眠,当某个信号触发时,CPU唤醒进入低速率工作的检测状态,当监测到外部条件达到某个条件是,切换到高速时钟进入高速计算和控制的状态。 需要CPU能够快速的在不同的模式之间切换。 一个处理器芯片内部有不同的部件构成,通常可以有选择的把某些模块休眠(通过配置寄存器),从而省电。 为了方便开发者,编译工具会定

27、义若干模式,从最省电的模式到最费电的模式,被开启的模块逐渐增多,这样开发者只需要使用工具链提供的函数,加以模式配置的参数,就可以一次性的配置好当前模式所有需要配置的寄存器。 需要通过阅读手册明确不同的模式中,哪些模块是被开启或关闭的,否则会得不到正确的结果。 实验现象 该代码正常运行后,可以看到一个绿色LED反复闪烁。 代码/*/ LaunchPad Lab5 - Timer Toggle P1.6 with Low Power Mode/ MSP430G2452/ -/ /| XIN|-/ | | |/ -|RST XOUT|-/ | |/ | P1.6|-LED/*#include void main(void) WDTCTL = WDTPW + WDTHOLD; / Stop watchdog timer if (CALBC1_1MHZ = 0xFF | CALDCO_1MH

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1