第8章MSP430单片机片内控制模块_第1页
第8章MSP430单片机片内控制模块_第2页
第8章MSP430单片机片内控制模块_第3页
第8章MSP430单片机片内控制模块_第4页
第8章MSP430单片机片内控制模块_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、合肥工业大学DSP及MSP430实验室 MSP430单片机原理与应用单片机原理与应用 http:/ MSP430单片机片内控制模块片内控制模块是指MSP430单片机具有内部控制功能且不与外部器件直接相连的内部集成模块。本章重点讲述Flash控制器、RAM控制器、DMA控制器及硬件乘法控制器的结构、原理及功能,并针对各个控制器给出简单的程序例程。Flash控制器控制器8.1RAM控制器控制器8.2DMA控制器控制器8.3硬件乘法控制器硬件乘法控制器8.48.1 Flash控制器8.1.1 Flash存储器的分段结构MSP430单片机的存储器采用冯诺依曼结构,RAM和Flash在同一寻址空间内统一

2、编址,没有代码空间和数据空间之分。实际上,MSP430F5xx/6xx系列单片机的地址总线为20位,总寻址空间可达到1MB。但是,不同型号的MSP430单片机所具有的Flash空间大小不同,具体请参考相关芯片的数据手册。MSP430F5529单片机具有128kB Flash程序存储空间,其存储器的分段结构示意图如图8.1.1所示。图8.1.1 Flash存储器分段结构示意图 8.1.2 Flash控制器介绍MSP430单片机的Flash控制器主要用来实现对Flash存储器的烧写程序、写入数据和擦除功能,可对Flash存储器进行字节/字/长字(32位)的寻址和编程。Flash存储器和控制器的结构

3、框图如图8.1.2所示。Flash控制器模块包括4个部分:控制寄存器和地址/数据锁存器、时序发生器、编程电压发生器及Flash存储器。控制寄存器主要用来控制Flash存储器的擦除和写入,地址/数据锁存器用来实现擦除与编程时执行锁存操作,时序发生器用来产生擦除与编程所需所有时序控制信号,编程电压产生器用来产生Flash写入和擦除操作所需的较高电压。图8.1.2 Flash存储器和控制器结构框图Flash控制器具有以下特性: 内置编程电压发生器; 可字节、字、长字编程; 超低功耗操作; 段擦除、扇区擦除和块擦除; 边沿0和边沿1读模式; 当程序在其他扇区中执行时,其余的扇区可以单独擦除。8.1 F

4、lash控制器8.1.3 Flash存储器操作Flash存储器默认情况下为读模式。在读模式下,Flash存储器不能进行擦除或写操作,Flash时序发生器和电压发生器也将被关闭。Flash存储器有不止一个扇区可用,在擦除的同时可以对其他扇区进行读取操作。当正在对Flash存储器的段、扇区或块进行编程或擦除操作时,禁止对该部分Flash存储器进行读或写操作。Flash存储器可通过BLKWRT、WRT、MERAS和ERASE控制位选择以下任何一种写入/擦除模式:字节/字/长字写入、块写入、段擦除、扇区擦除(仅在主存储器部分)、块擦除、当擦除扇区时读(除了从当前扇区读)。1. Flash存储器擦除操作

5、擦除后Flash存储器内的每一位值均为1,要往Flash中写入数据,只需将相应的位改为0即可。但是,要将其重新编程从0到1,则需要擦除操作。Flash存储器的最小擦除单元是段,通过ERASE和MERAS控制位可选择3种擦除模式,具体配置如表8.1.1所示。MERASERASE擦 除 模 式01段擦除10扇区擦除11块擦除(所有主存储器的4个扇区都被擦除,信息存储器AD及BSL引导装载程序段AD不被擦除)表8.1.1 擦除模式设置列表8.1 Flash控制器(1)擦除周期对需要擦除的段地址范围内执行一次空写操作(写入0)将启动一次擦除,擦除周期时序如图8.1.3所示。擦除开始时,Flash控制器

6、需要产生适当的时序信号和正确的编程电压,然后由时序发生器控制整个擦除过程,擦除完毕,编程电压撤销。注意:在空写后(擦除开始后),BUSY标志位立即置位,并且在整个擦除周期内保持置位,当擦除完成后BUSY、MERAS和ERASE标志位自动清除。图8.1.3 擦除周期时序图8.1 Flash控制器(2)擦除各存储器方式主存储器包含一个或多个扇区,每个扇区可以采用扇区擦除模式进行单独擦除,也可以通过块擦除模式擦除主存储器下的所有扇区。信息存储段AD及BSL引导装载程序段AD只可采用段擦除模式擦除,若采用扇区擦除或块擦除模式,将不能擦除这些存储器。(3)擦除操作编程步骤MSP430单片机的Flash存

7、储器的擦除操作可以从Flash中启动,也可以从RAM中启动(即擦除操作指令执行所在空间)。当从Flash中启动擦除操作时,被执行的代码不能存放在需要擦除的扇区中,在擦除期间,CPU会停止运行且状态保持不变,擦除完毕后,CPU才会恢复活动状态,继续执行程序代码。但是,从RAM中启动擦除工作时,CPU不会停止运行,能继续执行存储在RAM中的程序代码,BUSY忙标志位用于判断擦除周期是否结束。在CPU访问任何Flash地址时,必须保证擦除周期完成,即BUSY=0,否则对Flash的访问操作将是非法的,ACCVIFG(非法访问中断标志位)置位,且擦除结果是不确定的。MSP430单片机的程序存储空间可通

8、过CCS工程文件下的CMD文件进行更改,默认情况下存放在Flash中,一般情况下在执行程序时直接从Flash中取指令。有时为了加快程序执行速度或进行目标段Flash擦写时,也可将程序从Flash中搬到RAM中执行。但是,在RAM中执行的指令掉电后会消失。 8.1 Flash控制器【例8.1.1】 编写擦除单段数据的函数。/* * 名 称:FlashErase() * 功 能:擦除单段数据 * 入口参数:擦除段的首地址 * 出口参数:无 */void FlashErase(unsigned int adr) unsigned char *p0=(unsigned char *)adr; / 定义

9、字节型指针指向目标段 while(FCTL3 & BUSY); / 如果处于忙,则等待 FCTL3 = FWKEY; / 清除Flash锁定位 FCTL1 = FWKEY + ERASE; / 使能单段擦除操作 _DINT(); / Flash操作期间不允许中断,否则将导致不可预计的错误 *p0 = 0; / 向段内地址写0,即空写入,启动擦除操作 while(FCTL3 & BUSY); / 等待擦除完成 _EINT(); / 启动全局中断 FCTL1 = FWKEY; / Flash退出擦除模式 FCTL3 = FWKEY + LOCK; / 恢复Flash的锁定位,保护数据8.1 Fla

10、sh控制器2. Flash存储器写操作BLKWRTWRT写 模 式01字节/字写入10长字写入11长字块写入Flash存储器的写模式可通过WRT和BLKWRT控制位进行选择,具体配置如表8.1.2所示。表8.1.2 写模式配置列表(1)字节/字和长字写入模式字节/字和长字写入模式的写入周期时序图如图8.1.4所示。在写入过程中,BUSY忙标志位一直置位。这两种写入模式均可以从Flash中启动,也可以从RAM中启动,与擦除操作相同,从Flash中启动时,CPU停止;从RAM中启动时,CPU可继续运行。 图8.1.4 字节/字和长字写入周期时序图8.1 Flash控制器【例8.1.2】 编写向目的

11、地址写入1字节的函数。/* * 名 称:FlashWB() * 功 能:向目的地址写入1字节 * 入口参数:Adr:写入地址 DataB:写入的字节 * 出口参数:无*/void FlashWB(unsigned int Adr,unsigned char DataB) FCTL3 = FWKEY; FCTL1 = FWKEY+ERASE; / 设置擦除控制位 _DINT(); / Flash操作期间不允许中断,否则将导致不可预计的错误 *(unsigned char *)Adr) = 0; / 向段内地址写0,即空写入,启动擦除操作 while(FCTL3 & BUSY); / 等待擦除完成

12、 FCTL1 = FWKEY+WRT; / 设置字节/字写控制位 *(unsigned char *)Adr)=DataB; / 向目的地址写入数据 while(FCTL3 & BUSY); / 等待写入完成 _EINT(); / 启动全局中断 FCTL1 = FWKEY; / Flash退出写模式 FCTL3 = FWKEY + LOCK; / 恢复Flash的锁定位,保护数据8.1 Flash控制器【例8.1.3】 编写程序向Flash信息存储器D段写入一个长字。#include void main(void) unsigned long * Flash_ptrD; / 定义指向信息存储器

13、D段的指针 unsigned long value; WDTCTL = WDTPW+WDTHOLD; / 关闭看门狗 Flash_ptrD = (unsigned long *) 0 x1800; / 初始化指针 value = 0 x12345678; / 初始化需写入的长字 FCTL3 = FWKEY; / 清除Flash锁定位 FCTL1 = FWKEY+ERASE; / 设置擦除控制位 _DINT(); / Flash操作期间不允许中断,否则将导致不可预计的错误 *Flash_ptrD = 0; / 向段内地址写0,即空写入,启动擦除操作 while(FCTL3 & BUSY); /

14、等待擦除操作完成 FCTL1 = FWKEY+BLKWRT; / 使能长字写入操作 *Flash_ptrD = value; / 将长字写入目的Flash段 while(FCTL3 & BUSY); / 等待写入操作完成 _EINT(); / 启动全局中断 FCTL1 = FWKEY; / Flash退出写模式 FCTL3 = FWKEY+LOCK; / 恢复Flash的锁定位,保护数据 while(1); / 主循环,可在此处设置断点查看内存空间8.1 Flash控制器(2)长字块写入模式当有许多连续的字节或字需要编程写入时,长字块写入模式能够提高Flash的写入速度。长字块写入模式周期时序

15、图如图8.1.5所示。长字块写入模式不能从Flash存储器中启动,只能从RAM中启动。在整个块写入的过程中,BUSY忙标志位置位。以一个长字(4字节)为单位地写入,每个长字之间必须检查WAIT标志位,当WAIT标志位置位时,表示已完成前一个长字的写入,可以写入后一个长字。在当前块数据写完之后,BLKWRT控制位必须清零,且在一个块的写入之前必须置位。当BUSY标志位清零后,表示当前块已完成写入操作,可以对下一块执行写入操作。图8.1.5 长字块写入周期时序图8.1 Flash控制器3. Flash控制器中断Flash控制器有两个中断源:KEYV和ACCVIFG。当产生非法访问时,ACCVIFG

16、标志位置位。当Flash写入或擦除操作之后,使能ACCVIE控制位时,ACCVIFG标志位将产生中断请求,ACCVIE控制位位于特殊功能寄存器SFRIE1内,且ACCVIFG标志位来源于不可屏蔽中断(NMI)向量,所以当ACCVIFG请求中断时,GIE控制位无须置位。当利用错误的密码配置Flash控制器寄存器时,将置位KEYV密钥错误标志位,此时将立即产生PUC复位信号,系统将会被复位。8.1 Flash控制器4. Flash存储器编程方法对MSP430 Flash型单片机有3种烧写程序的方法:通过JTAG接口编程、通过BSL引导加载程序编程和通过用户自定义方式编程,所有方式都支持在线编程。M

17、SP430单片机CPU对Flash存储器的在线和外部用户自定义写入方式如图8.1.6所示。用户可以选择通过UART、SPI等方式进行编程。用户可以自行开发软件用于接收数据或对Flash存储器进行编程。由于这种编程方式是由用户定义开发的,所以它完全能够用户化,从而符合用户编程、擦除或者更新Flash存储器的实际应用需求。图8.1.6 用户自定义编程方式示意图8.1 Flash控制器8.1.4 Flash控制器寄存器Flash控制器寄存器列表如表8.1.3所示。FCTLx控制寄存器是一个16位具有密码保护的读/写寄存器。在读或写访问时,必须使用字指令。在写操作时,高字节必须写入密码0A5h。若对F

18、CTLx控制寄存器高位写入0A5h以外的其他值,将引起密钥错误,KEYV标志将置位并产生一个PUC复位信号。读取FCTLx控制寄存器的高字节的结果为096h。寄存器缩写读/写类型偏移地址初始状态Flash控制寄存器1FCTL1读/写0000h9600hFlash控制寄存器3FCTL3读/写0004h9658hFlash控制寄存器4FCTL4读/写0006h9600h表8.1.3 Flash控制器寄存器列表(基址:0140h)8.1 Flash控制器8.1.5 Flash控制器应用举例【例8.1.4】 信息段C、D的擦除和写入操作举例:将信息段C的内容复制到信息段D内。#include char

19、 value; / 声明一个8位变量void write_SegC(char value);void copy_C2D(void);void main(void) WDTCTL = WDTPW+WDTHOLD; / 关闭看门狗 value = 0; / 给变量一个初始值 while(1) write_SegC(value+); / 写信息段C copy_C2D(); / 将信息段C的内容复制到信息段D内 8.1 Flash控制器/写信息段C函数void write_SegC(char value)unsigned int i;char * Flash_ptr; / Flash指针Flash_p

20、tr = (char *) 0 x1880; / 初始化Flash指针 FCTL3 = FWKEY; / 清除锁定控制位 FCTL1 = FWKEY+ERASE; / 段擦除 _DINT(); / Flash操作期间不允许中断,否则将导致不可预计的错误 *Flash_ptr = 0; / 空写,启动擦除 while(FCTL3 & BUSY); / 等待擦除操作完成 FCTL1 = FWKEY+WRT; / 采用字节/字写入模式 for (i = 0; i 128; i+) / 循环写信息段C的128字节 *Flash_ptr+ = value; / 向信息段C写数据 while(FCTL3

21、& BUSY); / 等待写操作完成 _EINT(); / 启动全局中断 FCTL1 = FWKEY; / Flash退出写模式 FCTL3 = FWKEY+LOCK; / 恢复Flash锁定位,保护数据8.1 Flash控制器/将信息段C的内容复制到信息段D内void copy_C2D(void) unsigned int i; char *Flash_ptrC; char *Flash_ptrD; Flash_ptrC = (char *) 0 x1880; / 初始化信息段C指针 Flash_ptrD = (char *) 0 x1800; / 初始化信息段D指针 FCTL3 = FWK

22、EY; / 清除锁定控制位 FCTL1 = FWKEY+ERASE; / 段擦除 _DINT(); / Flash操作期间不允许中断,否则将导致不可预计的错误 *Flash_ptrD = 0; / 空写,启动擦除 while(FCTL3 & BUSY); / 等待擦除操作完成 FCTL1 = FWKEY+WRT; / 采用字节/字写入模式 for (i = 0; i 128; i+) *Flash_ptrD+ = *Flash_ptrC+; / 将信息段C的内容复制到信息段D内 while(FCTL3 & BUSY); / 等待写除操作完成 _EINT(); / 启动全局中断 FCTL1 =

23、FWKEY; / Flash退出写模式 FCTL3 = FWKEY+LOCK; / 恢复Flash锁定位,保护数据8.1 Flash控制器8.2 RAM控制器8.2.1 RAM控制器介绍RAM存储器一般可分为4段,每段最小2kB。MSP430F5529单片机的RAM共8kB,另外还有一段2kB的UAB RAM空间。每个段可通过RAM控制寄存器RCCTL0中的RCRSxOFF控制位进行控制。RCCTL0寄存器由密码保护,只有在字写入模式下写入正确的密码后,才可以修改RCCTL0寄存器的内容。8.2.2 RAM控制器操作1. 活动模式在活动模式下,RAM存储器可以随时进行读/写。如果某段的RAM地

24、址需要保存一些数据,那么不能关闭该RAM段。2. 低功耗模式在低功耗模式下,CPU处于关闭状态。一旦CPU被关闭,RAM立即进入待机模式以减少漏电流。3. RAM关闭模式RAM存储器内的每一段都可以通过置位各自的RCRSxOFF控制位独立关闭。读取关闭的RAM段,返回的数据是0。即使该段被重新上电,之前存储在关闭的RAM段内的所有数据都会丢失,无法读取。4. 堆栈指针RAM段程序堆栈位于RAM空间,如果需要执行中断服务程序,不能关闭保存堆栈的RAM段,否则将进入低功耗模式。5. USB缓冲区在具有USB模块的MSP430单片机中,USB缓冲区在RAM内。第7段RAM是专门为USB缓冲使用的。如

25、果不需要USB操作或在正常操作中没有使用时,可以通过置位RCRS7OFF控制位关闭这个RAM段。8.2.3 RAM控制器寄存器RAM控制器仅具有一个控制寄存器RCCTL0,为16位寄存器,初始状态为8900h,具体介绍如下:15141312111098RCKEY 读出是为96h,写入时必须为5Ah76543210RCRS7OFFRCRS6OFFRCRS5OFFRCRS4OFFRCR37OFFRCRS2OFFRCRS1OFFRCRS0OFF RCKEY:第815位,RAM控制器密钥。读取的结果为96h,写入必须为5Ah,否则此次操作将被忽略。 RCRSxOFF:第07位,RAM段开关控制位。置位

26、相应控制位将关闭相应RAM段,关闭后,该RAM段内保存的数据将丢失。8.2 RAM控制器8.3 DMA控制器8.3.1 DMA控制器介绍DMA控制器的特性包括: 最高可达8个独立的传输通道,不同系列的MSP430单片机所具有的DMA传输通道不同,本节介绍具有3通道的DAM控制器结构; DMA通道优先级可配置; 每次传输仅需要两个MCLK时钟周期; 具有字节、字、字节和字混合传输能力; 块方式传输可达65536个字或字节; 可选择配置触发源; 触发方式可选边沿触发或电平触发; 4种传输寻址方式固定地址到固定地址、固定地址到块地址、块地址到固定地址及块地址到块地址; 具有单个、块或者突发块传输模式

27、。DMA控制器的结构框图如图8.3.1所示。图8.3.1 DMA控制器结构框图8.3 DMA控制器8.3.2 DMA控制器操作1. DMA控制器的寻址方式DMA控制器有4种寻址模式,分别为固定地址到固定地址、固定地址到块地址、块地址到固定地址和块地址到块地址,如图8.3.2所示。对于每个DMA通道来说,其寻址模式都可独立配置,例如,通道0可以配置成在两个固定地址间传输,而通道1则可配置成在两个块地址间传输。寻址模式的配置可通过DMASRCINCR和DMADSTINCR控制位实现,DMASRCINCR控制位可选择每次数据传输完成后源地址增大、减小或不变,DMADSTINCR控制位可选择每次数据传

28、输完成后目标地址增大、减少还是不变。图8.3.2 DMA寻址方式8.3 DMA控制器2. DMA传输模式DMA控制器可通过DMADT控制位选择6种传输模式,具体配置如表8.3.1所示,每个通道都可独立配置其传输模式。DMA传输模式和寻址方式是分别定义的,任何寻址方式都可用于任何传输模式。通过DMAxCTL控制寄存器的DSTBYTE和SRCBYTE控制位可以选择源地址和目标地址之间传输的数据类型:字、字节或字节和字组合。DMADT传 输 模 式描 述000单次传输每次传输都需要单独触发。DMAxSZ规定的传输完毕后,DMAEN位自动清零001块传输一次触发可以传输整个数据块,块传输结束后,DMA

29、EN位自动清零010,111突发块传输CPU和块传输交叉运行。突发块传输结束后,DMAEN位自动清零100重复单次传输每次传输需要一次触发,传输结束后,DMAEN 仍保持使能101重复块传输一次触发传输整个块数据,传输结束后,DMAEN位仍保持使能110,111重复突发块传输CPU和块传输交叉运行,传输结束后,DMAEN位仍保持使能表8.3.1 DMA传输模式列表8.3 DMA控制器(1)单次传输在单次传输中,每次传输都需要一次单独触发,单次传输状态示意图如图8.3.3所示。图8.3.3 单次传输状态示意图8.3 DMA控制器(2)块传输模式在块传输模式中,每次触发可以传输一个数据块。当一个块

30、传输完成后,DMAEN位被复位。如果需要再次传输,必须将DMAEN置位。在传输某个块数据期间,其他的块传输请求将被忽略。块传输状态示意图如图8.3.4所示。图8.3.4 块传输状态示意图8.3 DMA控制器(3)突发块传输模式在突发块传输模式中,数据传输与CPU活动交叉进行。在该模式下,当块传输4字节或字后,CPU将可以运行2个MCLK时钟周期,而不是等待整个块传输完毕后才恢复工作。在突发块传输模式下,CPU的利用率为20%。在突发块传输结束之后,DMAEN将被清除,CPU的利用率可达100%。当一个突发块传输被触发后,将忽略块数据传输过程中产生的其他触发信号。突发块传输模式状态示意图如图8.

31、3.5所示。图8.3.5 突发块传输模式状态示意图8.3 DMA控制器 3. DMA传输初始化 每个DMA通道都可通过DMAxTSEL控制位独立配置触发源。只有当DMACTLx寄存器中的DMAEN控制位为0时,才可以修改DMAxTSEL位,否则可能会产生不可预料的DMA触发事件。4. DMA传输事件触发方式MSP430单片机的DMA控制器支持两种信号触发方式。(1)边沿触发方式当DMALEVEL控制位复位时,触发信号的上升沿可以触发DMA操作。(2)电平触发方式当DMALEVEL控制位置位时,为高电平触发方式。当控制位DMALEVEL和DMAEN被置位,并且触发信号源也为高电平时,才能触发DM

32、A操作。在电平触发方式下,为了完成块或突发块传输,在传输过程中触发信号必须始终保持高电平。如果触发信号变低,DMA控制器将停止传输并保持当前状态;当触发信号重新变高或者软件修改了DMA寄存器,DMA控制器将从触发信号变低时的状态继续传输。当DMALEVEL=1时,建议操作模式选择控制位DMADTx=0,1,2,3,因为在触发DMA操作后,DMAEN位能够自动复位。需要注意的是,只有应用外部触发源DMAE0时,才需要采用电平触发方式,其余触发事件应采用边沿触发方式。8.3 DMA控制器5. 停止DMA传输有两种方法可以停止正在进行的DMA传输:置位ENNMI控制位,通过不可屏蔽中断事件可以停止D

33、MA传输;通过清除DMAEN位来停止突发块传输模式。6. DMA通道优先级默认的DMA通道优先级为DMA0DMA1DMA2,如果有多个DMA传输请求同时发生,有最高优先级的通道最先完成传输操作,然后是第二优先级的通道,再然后是第三优先级的通道。在传输的过程中,如果触发了更高优先级的通道,当前正在传输的通道也不会停止,等到当前传输操作结束后,具有较高优先级的通道才开始传输。DMA通道优先级可以通过ROUNDROBIN控制位来配置。当ROUNDROBIN=1时,DMA控制器工作在循环优先级模式下,正在进行传输的通道执行完毕之后,优先级降为最低,其他通道的优先级顺序保持不变,如表8.3.3所示。DM

34、A优先级正在进行传输的通道传输完成之后的优先级DMA0DMA1DMA2DMA1DMA2DMA0DMA1DMA2DMA0DMA1DMA2DMA0DMA1DMA2DMA0DMA1DMA2DMA0DMA1DMA2DMA0表8.3.3 DMA优先级8.3 DMA控制器7. DMA传输周期在各种DMA传输模式下,DMA开始传输之前都需要1个或2个MCLK时钟来实现同步,同步之后每个字节或字的传输仅需要2个MCLK时钟周期,每次传输结束都要有1个周期的等待时间。因为DMA使用的是MCLK,所以DMA的周期决定于MSP430单片机的工作模式和系统时钟设置。如果MCLK时钟源处于活动状态,而CPU关闭,则DM

35、A传输直接使用MCLK时钟源而无须重新激活CPU。如果MCLK时钟源也被关闭,那么DMA会临时用DCOCLK启动MCLK时钟源,传输结束后CPU仍处于关闭阶段,MCLK时钟源也将被关闭。在各种模式下,DMA传输最大周期如表8.3.4所示,其中额外的5ms是启动DCOCLK所用的时间。CPU工作模式时 钟 源DMA传输最大周期活动状态MCLK=DCOCLK4MCLK周期活动状态MCLK=LFXT1CLK低功耗模式LPM0/1MCLK=DCOCLK5MCLK周期低功耗模式LPM3/45MCLK+5ms低功耗模式LPM0/1MCLK=LFXT1CLK5MCLK低功耗模式LPM3低功耗模式LPM45M

36、CLK+5ms表8.3.4 DMA传输最大周期表8.3 DMA控制器8. DMA与中断(1)DMA与系统中断系统中断不能打断DMA传输,系统中断直到DMA传输结束后才能被响应。如果ENNMI置位,NMI中断可以打断DMA传输。DMA事件可以打断中断处理程序。如果中断处理程序或其他程序不希望被中途打断,应该将DMA控制器关闭,这样才能得到优先响应。(2)DMA控制器中断每个DMA通道都有自己的中断标志位DMAIFG。在任何传输模式下,只要DMAxSZ寄存器减计数到零,则相应通道的中断标志位就被置位。如果与之对应的DMAIE和GIE置位,则可以产生中断请求。9. ADC12模块使用DMA控制器内部

37、集成了DMA控制器的MSP430单片机能够自动地将ADC12MEMx寄存器的数据传输到其他地方。DMA传输不需要CPU参与,独立于任何低功耗模式。DMA控制器增加了ADC12模块的吞吐量,在数据传输过程中CPU也能继续保持低功耗模式。DMA传输能够被任何ADC12IFGx标志位触发。当CONSEQx=0,2时,ADC12MEMx对应的ADC12IFGx标志位能够触发DMA传输。当CONSEQx=1,3时,序列中最后一个ADC12MEMx对应的ADC12IFGx标志位触发DMA传输。当DMA控制器访问相应的ADC12MEMx时,ADC12IFGx标志位会自动清除。8.3 DMA控制器8.3.3

38、DMA控制器寄存器3通道DMA控制器共有16个寄存器,包括3个DMA控制寄存器、每个通道有4个控制寄存器和1个中断向量寄存器。8.3.4 DMA控制器应用举例【例8.3.1】 利用DMA0通道采用重复块传输模式将大小为16字的数据块从1C00h1C1Fh单元传输到1C20h1C3Fh。程序中每次传输时P1.0都为高电平,之后通过置位DMAREQ控制位启动DMA块传输,传输完毕后将P1.0设置为低电平,程序代码如下:#include void main(void) WDTCTL = WDTPW+WDTHOLD; / 关闭看门狗 P1DIR |= 0 x01; / 将P1.0设为输出 _ _dat

39、a16_write_addr(unsigned short) &DMA0SA,(unsigned long) 0 x1C00); / 设置源地址8.3 DMA控制器 _ _data16_write_addr(unsigned short) &DMA0DA,(unsigned long) 0 x1C20); / 设置目标地址 DMA0SZ = 16; / 设置传输块大小 DMA0CTL = DMADT_5+DMASRCINCR_3+DMADSTINCR_3; / 重复块传输、源地址和目标地址自动增计数模式 DMA0CTL |= DMAEN; / 使能DMA通道0 while(1) P1OUT |

40、= 0 x01; / 置位P1.0 DMA0CTL |= DMAREQ; / 启动块传输 P1OUT &= 0 x01; / 拉低P10 【例8.3.2】 利用DMA0通道采用重复单次传输模式将ADC12的A0通道采样的数据保存到全局变量中。ADC12采样触发信号由TB0定时器定时产生,ADC12IFG0标志位触发DMA传输,程序代码如下:#include unsigned int DMA_DST; / 定义全局变量用于存储A0采样结果void main(void) WDTCTL = WDTPW+WDTHOLD; / 关闭看门狗 P1DIR |= BIT0; / P1.0设为输出 P1OUT

41、&= BIT0; / P1.0输出低电平 P5SEL |= BIT7; / P5.7设为定时器TB输出功能 P5DIR |= BIT7; / P5.7设为输出8.3 DMA控制器 P6SEL |= BIT0; / 使能A0输入通道 TBCCR0 = 0 xFFFE; TBCCR1 = 0 x8000; TBCCTL1 = OUTMOD_3; / CCR1工作在置位/复位模式 TBCTL = TBSSEL_2+MC_1+TBCLR; / 参考时钟为SMCLK,TB工作在增/减计数模式下 ADC12CTL0 = ADC12SHT0_15+ADC12MSC+ADC12ON;/ 打开ADC,设置采样时

42、间 ADC12CTL1 = ADC12SHS_3+ADC12CONSEQ_2; / TBOUT作为采样触发信号,单通道多次采样 ADC12MCTL0 = ADC12SREF_0+ADC12INCH_0; / V+=AVcc V-=AVss, ADC12CTL0 |= ADC12ENC; DMACTL0 = DMA0TSEL_24; / DMA触发事件选择ADC12IFGx DMACTL4 = DMARMWDIS; DMA0CTL &= DMAIFG; DMA0CTL = DMADT_4+DMAEN+DMADSTINCR_3+DMAIE; / DMA工作在重复单次传输模式,使能DMA传输,目标地

43、址自动增,使能DMA中断 DMA0SZ = 1; / 传输大小为1个字 _ _data16_write_addr(unsigned short) &DMA0SA,(unsigned long) &ADC12MEM0); / 设置源地址8.3 DMA控制器 _ _data16_write_addr(unsigned short) &DMA0DA,(unsigned long) &DMA_DST); / 设置目标地址 _ _bis_SR_register(LPM0_bits + GIE); / 进LPM0并使能全局中断#pragma vector=DMA_VECTOR / DMA中断服务程序_ _

44、interrupt void DMA_ISR(void) switch(_ _even_in_range(DMAIV,16) case 0: break; case 2: / DMA0IFG = DMA Channel 0 P1OUT = BIT0; / 可在此处设置断点,查看ADC采样的数据和DMA_DST变量的值 break; case 4: break; / DMA1IFG = DMA Channel 1 default: break; 8.3 DMA控制器8.4 硬件乘法控制器8.4.1 硬件乘法控制器概述1. 硬件乘法控制器支持的运算 无符号数乘法; 有符号数乘法; 无符号数乘加;

45、有符号数乘加; 8位、16位、24位和32位操作数; 饱和模式; 小数模式; 与16位硬件乘法控制器兼容的8位和16位操作; 不需要符号扩展指令的8位和24位乘法操作。2. 32位硬件乘法控制器的结构框图32位硬件乘法控制器的结构框图如图8.4.1所示。硬件乘法控制器的结构可分为4个部分:操作数输入模块(图中)、乘加运算模块(图中)、运算结果输出模块(图中)及控制寄存器模块(图中)。图8.4.1 硬件乘法控制器的结构框图8.4 硬件乘法控制器8.4.2 硬件乘法控制器操作硬件乘法控制器支持8位、16位、24位、32位的无符号数乘法、无符号数乘加、有符号数乘法、有符号数乘加操作。操作数的大小由写

46、入操作数地址的数据确定,操作类型则由第一个写入的操作数类型决定。1. 操作数寄存器硬件乘法控制器有两个32位操作数寄存器,如图8.4.1中所示,分别为操作数OP1和OP2。操作数OP1定义了12个寄存器,详细介绍如表8.4.1所示,通过操作数寄存器可将数据载入乘法器中并选择乘法器的工作模式。当对给定地址写入第一个低字操作数(前16位数据)时,就选择了乘法运算的类型,但是,并不开始任何操作。当向后缀为32H的高字寄存器写入第二个字时,乘法器就认为OP1是32位,否则就认为是16位。在写入OP2之前写入的最后一个地址定义了第一个操作数的长度。OP2寄存器代表第二个寄存器,当第二个寄存器写入完毕,乘

47、法运算就开始。一般在取出结果之前需插入12条指令,以确保运算的完成。8.4 硬件乘法控制器2. 结果寄存器乘法操作的结果存储在64位结果寄存器中,如图8.4.1中所示,分别为RES0、RES1、RES2和RES3。为了兼容1616的硬件乘法控制器,可以通过RESLO、RESHI和SUMEXT这3个寄存器访问8位或16位操作的32位结果。RESLO寄存器保存计算结果的低16位,RESHI寄存器保存高16位,在使用和访问计算结果方面,RES0、RES1分别与RESLO和RESHI相同。结果扩展寄存器SUMEXT的内容取决于乘法器的操作模式,具体描述如表8.4.2所示。MPYC标志位反映了乘法器的进

48、位,如果没有选择小数模式或饱和模式,则该位可以作为乘法运算结果的第33位或第65位,详细说明见表8.4.2。乘法器模式SUMEXT内容及含义MPYC内容及含义MPYSUMEXT总是为0000hMPYC总是为0MPYS0000h:运算结果为正或零0:运算结果为正或零0FFFFh:运算结果为负1:运算结果为负MAC0000h:运算结果没有进位0:运算结果没有进位0001h:运算结果有进位1:运算结果有进位MACS0000h:运算结果为正或零0:运算结果没有进位0FFFFh:运算结果为负1:运算结果有进位表8.4.2 SUMEXT及MPYC内容及含义列表8.4 硬件乘法控制器3. 小数模式硬件乘法控

49、制器支持“小数”相乘运算。首先介绍硬件乘法控制器所支持的“小数”表示方法:Q格式。图8.4.2表示的为Q15格式,其表示的为有符号16位数据格式,最高有效位是符号位,小数点后第一位为1/2,之后每一位比前一位的值减小一半。最小的负数为08000h,最大的正数是07FFFh。因此,16位有符号的Q15格式可以表示从-1.00.999969482的数。可以通过如图8.4.3所示的右移小数点法来增大小数表示的范围。16位有符号的Q14格式可以表示-2.01.999938965的数。当MPY32CTL0控制寄存器中的MPYFRAC控制位为1时,硬件乘法控制器小数模式使能。两个16位Q15格式数据相乘,

50、结果以16位Q15格式存储在RES1结果寄存器中,这个结果并不是最终的小数相乘运算结果,最终的运算结果需要将RES1寄存器左移一位;两个32位Q31格式的数据相乘,其结果可以通过读取RES2和RES3结果寄存器获得。图8.4.2 Q15格式表示图图8.4.3 Q14格式标示图8.4 硬件乘法控制器4. 饱和模式在一般有符号数运算模式下,硬件乘法控制器不会自动检测上溢和下溢的发生。当两个负数的和产生正数范围内的结果时,发生下溢;当两个正数的和产生负数范围内的结果时,产生上溢。但是,在饱和模式下,硬件乘法控制器可以防止有符号数操作结果的上溢或下溢。若控制寄存器MPY32CTL0中的MPYSAT控制

51、位被置位,将使能饱和模式。如果发生上溢,运算结果将被设置成正的最大有效值;如果发生下溢,运算结果将被设置成负的最大有效值。15141312111098保留MPYDLY32MPYDLYWRTEN76543210MPYOP2_32MPYOP1_32MPYMxMPYSATMPYFRAC保留MPYC5. 硬件乘法控制器控制寄存器硬件乘法控制器具有一个控制寄存器MPY32CTL0,其在硬件乘法控制器结构框图中的位置如图8.4.1中所示。下面将详细介绍硬件乘法控制器控制寄存器各控制位的含义。8.4 硬件乘法控制器 MPYDLY32:第9位,写操作延迟控制位。 0:写操作延迟直到64位运算结果(RES0RE

52、S3)可用; 1:写操作延迟直到32位运算结果(RES0RES1)可用。 MPYDLYWRTEN:第8位,延迟写操作控制位。若给控制位置位,所有对MPY32寄存器的写操作都要延迟到64位(MPYDLY32=0)或32位(MPYDLY32=1)运算结果完成之后。 0:写操作不延迟; 1:写操作延迟。 MPYOP2_32:第7位,硬件乘法控制器操作数2的宽度控制位。 0:16位; 1:32位。 MPYOP1_32:第6位,硬件乘法控制器操作数1的宽度控制位。 0:16位; 1:32位。 MPYMx:第45位,乘法器模式选择控制位。 00:MPY无符号数乘法; 01:MPYS有符号数乘法; 10:M

53、AC无符号数乘加; 11:MACS有符号数乘加。 MPYSAT:第3位,饱和模式使能控制位。 0:饱和模式禁止; 1:饱和模式使能。 MPYFRAC:第2位,小数模式使能控制位。 0:小数模式禁止; 1:小数模式使能。MPYC:第0位,硬件乘法控制器进位标志位。如果未选择饱和模式或小数模式,该标志位可作为乘法运算结果的第33位或第65位,因为当切换到饱和模式或小数模式时该标志位不变化。该标志位置位表示运算结果有进位,否则清零表示运算结果没有进位。8.4 硬件乘法控制器8.4.3 硬件乘法控制器程序举例【例8.4.1】 编程实现1616无符号乘法运算。#include void main(void) WDTCTL = WDTPW+WDTHOLD; / 关闭看门狗 MPY = 0 x1234; / 载入第一个无符号操作数 OP2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论