223使用备用模式.docx

上传人:b****4 文档编号:3538052 上传时间:2022-11-23 格式:DOCX 页数:79 大小:410.89KB
下载 相关 举报
223使用备用模式.docx_第1页
第1页 / 共79页
223使用备用模式.docx_第2页
第2页 / 共79页
223使用备用模式.docx_第3页
第3页 / 共79页
223使用备用模式.docx_第4页
第4页 / 共79页
223使用备用模式.docx_第5页
第5页 / 共79页
点击查看更多>>
下载资源
资源描述

223使用备用模式.docx

《223使用备用模式.docx》由会员分享,可在线阅读,更多相关《223使用备用模式.docx(79页珍藏版)》请在冰豆网上搜索。

223使用备用模式.docx

223使用备用模式

2。

23使用备用模式

功能:

备用模式(低功耗模式)

2。

23。

1特性

在这个示例程序中,将进入备用模式。

在这个示例程序中,通过闭合连接到IRQ1管脚的开关产生一个IRQ1中断,使系统从正常模式进入备用模式。

当IRQ1中断处理程序执行完后,执行一条SLEEP指令。

在正常模式下,发光二极管LED不断闪烁,当进入备用模式后,点亮发光二极管LED。

(在备用模式下,P74输出管脚进入高阻抗状态。

在这个示例程序中,通过闭合连接到IRQ0管脚的开关产生一个IRQ0中断,从而清除备用模式进入正常模式。

进入正常模式后,发光二极管LED再次不断闪烁。

发光二极管LED连接到端口7的P74输出管脚。

图2.105是将开关连接到IRQ1和IRQ0输入管脚的示意图。

图2.105进入备用模式程序中开关连接的示意图

2。

23。

2所用功能说明

在这个示例程序中,系统进入备用模式,一种低功耗模式。

图2.106是备用模式的方块图。

下面详细说明备用模式的功能。

●当SYSCR1中的SSBY位的值为1,DTON位的值为0,SYSCR2中的SMSEL和LSON位的值为X(0或1均可)时,当执行完一条SLEEP指令后,系统将从正常模式进入备用模式。

●在备用模式中,时钟脉冲发生器停止工作,所以CPU和其他片上模块停止工作。

但是,只要提供一定的电压,CPU内部寄存器的值,片上的RAM区,及其他片上功能模块的寄存器的值仍能保留。

只要能够提供RAM数据保持电压,RAM区中的内容就能被保留下来。

输入/输出端口进入高阻抗状态。

●通过一个IRQ3到IRQ0的中断,WKP5到WKP0的中断,或一个RES管脚的输入就能清除备用模式。

●在使用中断清除备用模式的情况下,当产生一个中断申请时,系统时钟脉冲产生起开始工作。

经过系统控制寄存器SYSCR1中STS2到STS0位的值设定的时间后,将给整个系统提供一个稳定的系统时钟信号,备用模式被清除,开始执行中断处理程序。

但是,如果状态码寄存器CCR中I位的值为1或相应的中断使能寄存器被禁止,则这些中断不能清除备用模式。

●在使用RES管脚清除备用模式的情况下,如果RES管脚变成低电平,则系统时钟脉冲发生器将开始工作。

当脉冲发生器输出稳定后,如果RES管脚变为高电平驱动,CPU将进行异常复位处理。

由于系统时钟脉冲发生器一开始工作,系统时钟就给整个系统提供时钟,因此在脉冲发生器稳定前,RES管脚必须保持为低电平。

●清除备用模式后脉冲发生器达到稳定输出所需要的时间由系统控制寄存器SYSCR1中的STS2,STS1和STS0位的值确定。

●在这个示例程序中,通过IRQ0中断清除备用模式。

●在这个示例程序中,运行频率为16MHz,等待时间为131.072states。

(脉冲发生器达到稳定输出所需要的时间为8.2毫秒。

图中英文翻译:

SELLPinstruction:

SLEEP指令。

Activemode:

正常模式

Standbymode:

备用模式programexecutionstate:

程序执行状态

programhaltstate:

程序停止状态

图2.106转换到备用模式

表2.104中列出了这个示例程序的功能配置。

通过配置表2.104中的功能就能实现到备用模式的转换。

功能

描述

SYSCR1

控制低功耗模式

SYSCR2

控制低功耗模式

PCR7

设置P74管脚作为输出管脚使用

PDR7

存储P74管脚的输出数据

P74

发光二极管LED输出管脚

IRQ1

开关1的输入管脚

IRQ0

开关2的输入管脚

2。

23。

3运行说明

图2.107表示出了这个示例程序的运行原理。

图2.107中的软件和硬件处理表示出了到备用模式的转换操作。

图2。

107运行原理:

转换到备用模式

1)2)3)4)

图中英文翻译:

1)硬件处理无软件处理初始化设置1。

设置IRQ1中断2。

设置IRQ0中断3。

设置定时器A4。

设置端口745。

允许中断

2)硬件处理IRR11置1软件处理1。

开始IRQ1中断处理2。

IRQ11清零3。

禁止IRQ1中断申请4。

禁止定时器A中断申请

3)硬件处理:

无软件处理执行一条SLEEP指令

4)硬件处理:

IRR10置1软件处理:

1。

开始IRQ)中断处理2。

Irq10清零3。

禁止irq0中断申请4。

允许定时器A中断申请

Immediatelyafterreset:

复位后状态Switch1on:

开关1闭合

ExecutioofSLEEPinstruction执行SLEEP指令switch2on:

开关2闭合

Activemode正常模式standbymode备用模式

Stabilizationtimeforpulsegeneratoroutput脉冲发生器达到稳定输出所需时间

2。

23。

4编程说明

程序模块说明:

表2.105列出了这个示例程序中使用的程序模块。

表2.105程序模块说明

程序模块名称

标号名称

功能

主程序模块

main

设置IRQ0中断和端口7功能,允许中断,控制发光二极管LED,设置定时器A中断,转换到备用模式。

开关1接通模块

IRQ1

在IRQ1中断处理过程中,将SWONF置1,禁止IRQ1和定时器A中断。

清除备用模式模块

IRQ0

在IRQ0中断处理过程中,禁止IRQ0中断,允许定时器A中断。

发光二极管LED控制模块

taint

在定时器A中断处理过程中,控制发光二极管LED。

参数说明:

在这个示例程序中,没有使用输入/输出参数。

内部寄存器说明:

表2.106中列出了这个示例程序中使用的内部寄存器。

表2.106内部寄存器说明

寄存器名称

功能

地址

设置值

TMA

定时器模式寄存器A:

当TAM=H’12时,定时器A使用内部时钟功能,并且设置Φ/2048(Φ为系统时钟)作为TCA的计数时钟。

H’FFA6

PDR7

P74

端口数据寄存器7:

端口数据寄存器7第4位:

当P74=0时,P74管脚的输出电平为低电平。

当P74=1时,P74管脚的输出电平为高电平。

H’FFDA

Bit4

0

PCR7

PCR74

端口控制寄存器7:

端口控制寄存器7第4位:

当PCR74=1时,P74管脚作为输出管脚使用。

H’FFEA

Bit4

1

SYSCR1

SSBY

 

STS2

STS1

STS0

系统控制寄存器1:

备用模式:

当SSBY=1时,在正常模式下,当执行完SLEEP指令后,将转换到备用模式。

备用时钟选择2to0:

当STS2=1,STS1=0,STS0=0时,等待时间为131.072states。

H’FFF0

Bit7

 

Bit6

Bit5

Bit4

0

 

1

0

0

SYSCR2

SMSEL

 

LSON

 

DTON

 

MA2

MA1

MA0

SA1

SA0

系统控制寄存器2:

睡眠模式选择:

当SMSEL=X(X为0或1)时,当执行完SLEEP指令后,将转换到备用模式,亚睡眠模式或亚正常模式。

低速模式标志:

当LSON=X(0或1)时,当执行完SLEEP指令后,系统将转换到备用模式,亚睡眠模式或亚正常模式。

直接转换标志:

当DTON=0时,当执行完SLEEP指令后,系统将转换到睡眠模式,亚睡眠模式或备用模式。

正常模式时钟选择2到0:

当MA2=0,MA1=1,MA0=1时,选择Φ(振荡器频率)作为正常模式的时钟。

亚正常模式时钟选择1和0:

当SA1和SA0都被清零时,选择Φ/8作为在亚正常模式下CPU的运行时钟。

H’FFF1

Bit7

 

Bit6

 

Bit5

 

Bit4

Bit3

Bit2

Bit1

Bit0

0

 

1

 

0

 

0

1

1

0

0

PMR1

IRQ1

 

IRQ0

端口模式寄存器1:

P15/IRQ1功能选择:

当IRQ1被清零时,P15/IRQ1管脚作为P15输入/输出管脚使用。

当IRQ1被置1时,P15/IRQ1管脚作为IRQ1输入管脚使用。

P14/IRQ0功能选择:

当IRQ0被清零时,P14/IRQ0管脚作为P14输入/输出管脚使用。

当IRQ0被置1时,P14/IRQ0管脚作为IRQ0输入管脚使用。

H’FFE0

Bit1

 

Bit0

1

 

1

IEGR1

IEG1

 

IEG0

中断沿选择寄存器1:

IRQ1沿选择:

当IEG1=0时,选择下降沿作为IRQ1的中断源。

当IEG1=1时,选择上升沿作为IRQ1的中断源。

IRQ0沿选择:

当IEG0=0时,选择下降沿作为IRQ0的中断源。

当IEG0=1时,选择上升沿作为IRQ0的中断源。

H’FFF2

Bit1

 

Bit0

1

 

1

IENR1

IENTA

 

IEN1

 

IEN0

中断使能寄存器1:

定时器A中断使能:

当IENTA=0时,禁止定时器A中断申请。

当IENTA=1时,允许定时器A中断申请。

IRQ1中断使能:

当IEN1=0时,禁止IRQ1中断申请。

当IEN1=1时,允许IRQ1中断申请。

IRQ0中断使能:

当IEN0=0时,禁止IRQ0中断申请。

当IEN0=1时,允许IRQ0中断申请。

H’FFF4

Bit6

 

Bit1

 

Bit0

1

 

1

 

1

IRR1

IRRTA

 

IRR11

 

IRR10

中断请求寄存器1:

定时器A中断申请标志:

当IRRTA=0时,没有产生定时器A中断申请。

当IRRTA=1时,产生了一个定时器A中断申请。

IRQ1中断申请标志:

当IRR11=0时,没有产生IRQ1中断申请。

当IRR11=1时,产生一个IRQ1中断申请。

IRQ0中断申请标志:

当IRR10=0时,没有产生IRQ0中断申请。

当IRR10=1时,产生一个IRQ0中断申请。

H’FFF6

Bit6

 

Bit1

 

Bit0

0

 

0

 

0

RAM说明:

表2.107中列出了这个程序中使用的RAM。

表2.107RAM说明

标号名称

功能

地址

所在模块名称

USRF

SWONF

 

LDONF

表明开关1闭合或断开的标志。

 

表明发光二极管LED发光或熄灭的标志

H’FB80

Bit0

 

Bit1

主程序模块

开关1接通模块

发光二极管LED控制模块

2。

23。

5流程图

图2.108主程序的流程图

英文译文:

主程序——I位置1以禁止中断——PMR1中的IRQ1位置1,设置IRQ1管脚作为IRQ1输入管脚使用——PMR1中的IRQ0位置1,设置IRQ0管脚作为IRQ0输入管脚使用——IEG1至1,设置上升沿作为IRQ1输入管脚的探测沿——IRR11清零——IEN1置1,允许IRQ1中断——IEG0置1,设置上升沿作为IRQ0输入管脚的探测沿——IRR10清零——IEN0清零,禁止IRQ0中断——设置TMA=H’12,选择定时器A的输入时钟,设置Φ/2048(Φ为系统时钟)作为TCA的计数时钟——IRRTA清零——IENTA置1,允许定时器A中断——1。

1——PCR7中的PCR74位置1,设置P74管脚作为输出管脚使用——P74置1,点亮发光二极管LED——LDONF清零——SWONF清零——I位清零,允许中断——SWONF=1?

——SWONF清零——SYSCR1中的SSBY和STS2位置1,STS1和STS0清零——SYSCR2中的SMSEL,LSON,DTON,MA2,SA1和SA0位清零,MA1和MA0置1——P74清零,熄灭发光二极管LED——IRR10清零——IEN0置1,允许IRQ0中断——执行SLEEP指令以转换到备用模式

图2.109IRQ0中断处理程序流程图

英文译文:

清除备用模式——IRR10清零——IEN0清零,禁止IRQ0中断——IENTA置1,允许定时器A中断——中断处理结束

图2.110IRQ1中断处理程序流程图

英文译文:

开关1闭合——IRR11=1?

——IRR11清零——SWONF置1——IEN1清零,禁止IRQ1中断——IENTA清零,禁止定时器A中断——中断处理结束

图2.111定时器A中断处理程序流程图

英文译文:

发光二极管控制LED控制——IRRTA清零——I位清零,允许中断——LDONF=1?

——PDR7中的P74置1(PDR7中的P74清零)——USRF中的LDONF位置1(USRF中的LDONF位置1)——中断处理结束

2。

23。

6源程序清单

 

INIT.SRC(程序清单)

.EXPORT_INIT

.IMPORT_MAIN

;

.SECTIONP,CODE

_INIT:

MOV.W#H'FF80,R7

LDC.B#B'10000000,CCR

JMP@_main

;

.END

 

/*H8/300HTiny系列和H8/3664系列使用说明书*/

/*转换到备用模式*/

/*功能*/

/*;低功耗模式;备用模式*/

/*外部时钟:

16MHZ,内部时钟:

16MHZ*/

/*子系统时钟:

32.768KHZ*/

#include

/*符号定义*/

structBIT{

unsignedcharb7:

1;/*第7位*/

unsignedcharb6:

1;/*第6位*/

unsignedcharb5:

1;/*第5位*/

unsignedcharb4:

1;/*第4位*/

unsignedcharb3:

1;/*第3位*/

unsignedcharb2:

1;/*第2位*/

unsignedcharb1:

1;/*第1位*/

unsignedcharb0:

1;/*第0位*/

};

#defineTMA*(volatileunsignedchar*)0xFFA6/*定时器模式寄存器A*/

#defineTMA_BIT(*(structBIT*)0xFFA6)/*定时器模式寄存器A*/

#defineTMA3TMA_BIT.b3/*时间间隔*/

#defineTCA*(volatileunsignedchar*)0xFFA7/*定时器计数器A*/

#definePDR7_BIT(*(structBIT*)0xFFDA)/*端口数据寄存器7*/

#defineP74PDR7_BIT.b4/*端口数据寄存器7第4位*/

#definePMR1_BIT(*(structBIT*)0xFFE0)/*端口模式寄存器1*/

#defineIRQ1_SETPMR1_BIT.b5/*端口模式寄存器1第5位*/

#defineIRQ0_SETPMR1_BIT.b4/*端口模式寄存器1第4位*/

#definePCR7_BIT(*(structBIT*)0xFFEA)/*端口控制寄存器7*/

#definePCR74PCR7_BIT.b4/*端口控制寄存器7第4位*/

#defineSYSCR1*(volatileunsignedchar*)0xFFF0/*系统控制寄存器1*/

#defineSYSCR1_BIT(*(structBIT*)0xFFF0)/*系统控制寄存器1*/

#defineSSBYSYSCR1_BIT.b7/*软件备用模式*/

#defineSTS2SYSCR1_BIT.b6/*备用模式时钟选择2*/

#defineSTS1SYSCR1_BIT.b5/*备用模式时钟选择1*/

#defineSTS0SYSCR1_BIT.b4/*备用模式时钟选择0*/

#defineNESELSYSCR1_BIT.b3/*噪音消除取样频率选择*/

#defineSYSCR2*(volatileunsignedchar*)0xFFF1/*系统控制寄存器2*/

#defineSYSCR2_BIT(*(structBIT*)0xFFF1)/*系统控制寄存器2*/

#defineLSONSYSCR2_BIT.b6/*低速模式标志*/

#defineDTONSYSCR2_BIT.b5/*直接转换标志*/

#defineMA1SYSCR2_BIT.b3/*正常模式时钟选择1*/

#defineMA0SYSCR2_BIT.b2/*正常模式时钟选择0*/

#defineSA1SYSCR2_BIT.b1/*亚正常模式时钟选择1*/

#defineSA0SYSCR2_BIT.b0/*亚正常模式时钟选择0*/

#defineIEGR1_BIT(*(structBIT*)0xFFF2)/*中断沿选择寄存器1*/

#defineIEG1IEGR1_BIT.b1/*IRQ1中断沿选择*/

#defineIEG0IEGR1_BIT.b0/*IRQ0中断沿选择*/

#defineIENR1_BIT(*(structBIT*)0xFFF4)/*中断使能寄存器1*/

#defineIENDTIENR1_BIT.b7/*直接转换中断使能*/

#defineIENTAIENR1_BIT.b6/*定时器A中断使能*/

#defineIEN1IENR1_BIT.b1/*IRQ1中断使能*/

#defineIEN0IENR1_BIT.b0/*IRQ0中断使能*/

#defineIRR1_BIT(*(structBIT*)0xFFF6)/*中断请求寄存器1*/

#defineIRRDTIRR1_BIT.b7/*直接转换中断申请标志*/

#defineIRRTAIRR1_BIT.b6/*定时器A中断申请标志*/

#defineIRRI1IRR1_BIT.b1/*IRQ1中断申请标志*/

#defineIRRI0IRR1_BIT.b0/*IRQ0中断申请标志*/

#pragmainterrupt(IRQ0)

#pragmainterrupt(IRQ1)

#pragmainterrupt(taint)

/********************************************************/

/*函数定义*/

/********************************************************/

externvoidINIT(void);/*设置堆栈指针*/

voidmain(void);

voidIRQ0(void);

voidIRQ1(void);

voidtaint(void);

voidsleep(void);

/********************************************************/

/*RAM定义*/

/********************************************************/

unsignedcharUSRF;/*用户标志*/

#defineUSRF_BIT(*(structBIT*)&USRF)

#defineLDONFUSRF_BIT.b1/*发光二极管LED点亮/熄灭标志*/

#defineSWONFUSRF_BIT.b0/*开关接通标志*/

/********************************************************/

/*向量地址*/

/********************************************************/

#pragmasectionV1/*段向量设置*/

void(*constVEC_TBL1[])(void)={

INIT/*00复位*/

};

#pragmasectionV2/*段向量设置*/

void(*constVEC_TBL2[])(void)={

IRQ0/*IRQ0中断处理函数*/

};

#pragmasectionV3/*段向量设置*/

void(*constVEC_TBL3[])(void)={

IRQ1/*IRQ1中断处理函数*/

};

#pragmasectionV4/*段向量设置*/

void(*constVEC_TBL4[])(void)={

taint/*定时器A中断处理函数*/

};

#pragmasection/*P*/

/********************************************************/

/*主程序*/

/********************************************************/

voidmain(void)

{

set_imask_ccr

(1);/*禁止中断*/

IRQ1_SET=1;/*初始化IRQ1终端输入*/

IRQ0_SET=1;/*初始化IRQ0终端输入*/

IEG0=1;/*设置IRQ0的终端输入为上升沿*/

IEG1=1;/*设置IRQ1的终端输入为上升沿*/

IRRI1=0;/*IRRI1清零*/

IEN1=1;/*允许IRQ1中断*/

IRRI0=0;/*IRRI0清零*/

IEN0=0;/*禁止IRQ0中断*/

TMA=0x12;/*初始化定时器A的功能*/

IRRTA=0;/*IRRTA清零*/

IENTA=1;/*允许定时器A中断*/

P74=0;/*初始化P74*/

PCR74=1;/*初始化P74输出端口*/

LDONF=0;/*初始化LDONF*/

SWONF=0;/*初始化SWONF*/

set_imask_ccr(0);/*允许中断*/

while(SWONF!

=1){/*SWONF的值是否为"1"?

*/

;

}

SWONF=0;/*初始化SWONF*/

SYSCR1=0xC0;/*初始化系统控制寄存器1*/

SYSCR2=0x0C;/*初始化系统控制寄存器2*/

P74=0;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 文化宗教

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

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