搜档网
当前位置:搜档网 › at91-看门狗驱动修改指南详解

at91-看门狗驱动修改指南详解

at91-看门狗驱动修改指南详解
at91-看门狗驱动修改指南详解

附录一、

驱动程序:at91sam9g20核心板的看门狗驱动

看门狗的驱动一般来说比较简单,只要做寄存器的设置实现开启、关闭、喂狗功能。本项目中我们使用的是at91sam920处理器,带有看门狗定时器。这个看门狗的驱动却比较复杂,应用层想用它的话,将涉及到boot引导设置,uboot配置及驱动,改写驱动程序。下面将逐步说明。

1、boot引导(bootstrap-v1.15)

由于该看门狗的MR寄存器只能写一次(Only a processor reset resets it.),而默认情况下看门狗在boot引导程序中被关闭了,所以在boot引导程序中我们要开启看门狗。在board/at91sam9g20ek/at91sam9g20ek.c文件的硬件初始化函数hw_init中注释掉下面的配置即可开启看门狗:

/* writel(AT91C_WDTC_WDDIS, AT91C_BASE_WDTC + WDTC_WDMR); */

为了功能设置:我们配置如下:

writel(AT91C_WDTC_WDV | AT91C_WDTC_WDD | AT91C_WDTC_WDRSTEN | AT91C_WDTC_WDFIEN, AT91C_BASE_WDTC + WDTC_WDMR);

2、uboot配置及驱动(uboot-v1.3.4):

默认情况下,看门狗在uboot中没有配置,需要手动添加配置,在文件include/configs/at91sam9g20ek.h中添加如下配置

#define CONFIG_HW_WA TCHDOG 1

#define CONFIG_AT91SAM9_WA TCHDOG 1

此时编译uboot,会提示你找不到hw_watchdog_reset复位函数,这是因为虽然我们配置看门狗,但看门狗的uboot驱动并不存在,下面就来添加uboot下的看门狗驱动。

1)添加include/asm-arm/arch-at91sam9/at91_wdt.h,内容如下

/*

* [origin: Linux kernel arch/arm/mach-at91/include/mach/at91_wdt.h]

*

* Copyright (C) 2008 Jean-Christophe PLAGNIOL-VILLARD

* Copyright (C) 2007 Andrew Victor

* Copyright (C) 2007 Atmel Corporation.

*

* Watchdog Timer (WDT) - System peripherals regsters.

* Based on AT91SAM9261 datasheet revision D.

*

* This program is free software; you can redistribute it and/or modify

* it under the terms of the GNU General Public License as published by

* the Free Software Foundation; either version 2 of the License, or

* (at your option) any later version.

*/

#ifndef AT91_WDT_H

#define AT91_WDT_H

#define AT91_WDT_CR (AT91_WDT + 0x00) /* Watchdog Control Register */ #define AT91_WDT_WDRSTT (1<<0) /* Restart */

#define AT91_WDT_KEY (0xa5 << 24) /* KEY Password */

#define AT91_WDT_MR (AT91_WDT + 0x04) /* Watchdog Mode Register */ #define AT91_WDT_WDV (0xfff << 0) /* Counter Value */

#define AT91_WDT_WDFIEN (1 << 12) /* Fault Interrupt Enable */

#define AT91_WDT_WDRSTEN (1 << 13) /* Reset Processor */

#define AT91_WDT_WDRPROC (1 << 14) /* Timer Restart */

#define AT91_WDT_WDDIS (1<< 15) /* Watchdog Disable */

#define AT91_WDT_WDD (0xfff << 16) /* Delta Value */

#define AT91_WDT_WDDBGHLT (1 << 28) /* Debug Halt */

#define AT91_WDT_WDIDLEHLT (1 << 29) /* Idle Halt */

#define AT91_WDT_SR (AT91_WDT + 0x08) /* Watchdog Status Register */

#define AT91_WDT_WDUNF (1 << 0) /* Watchdog Underflow */

#define AT91_WDT_WDERR (1 << 1) /* Watchdog Error */

#endif

2)添加drivers/watchdog/at91sam9_wdt.c,内容如下

/*

* [origin: Linux kernel drivers/watchdog/at91sam9_wdt.c]

*

* Watchdog driver for Atmel AT91SAM9x processors.

*

* Copyright (C) 2008 Jean-Christophe PLAGNIOL-VILLARD * Copyright (C) 2008 Renaud CERRATO r.cerrato at til-technologies.fr

*

* This program is free software; you can redistribute it and/or

* modify it under the terms of the GNU General Public License

* as published by the Free Software Foundation; either version

* 2 of the License, or (at your option) any later version.

*/

/*

* The Watchdog Timer Mode Register can be only written to once. If the * timeout need to be set from U-Boot, be sure that the bootstrap doesn't * write to this register. Inform Linux to it too

*/

#include

#include

#include

#include

#include

//#include

#define ms_to_ticks(t) (((t << 8) / 1000) - 1)

#define ticks_to_ms(t) (((t + 1) * 1000) >> 8)

/* Hardware timeout in seconds */

#define WDT_HW_TIMEOUT 2

/*

* Set the watchdog time interval in 1/256Hz (write-once)

* Counter is 12 bit.

*/

static int at91_wdt_settimeout(unsigned int timeout)

{

unsigned int reg;

unsigned int mr;

/* Check if disabled */

mr = at91_sys_read(AT91_WDT_MR);

if (mr & AT91_WDT_WDDIS)

{

printf("sorry, watchdog is disabled/n");

return -1;

}

/*

* All counting occurs at SLOW_CLOCK / 128 = 256 Hz

*

* Since WDV is a 12-bit counter, the maximum period is

* 4096 / 256 = 16 seconds.

*/

reg = AT91_WDT_WDRSTEN /* causes watchdog reset */

/* | AT91_WDT_WDRPROC causes processor reset only */

| AT91_WDT_WDDBGHLT /* disabled in debug mode */

| AT91_WDT_WDD /* restart at any time */

| (timeout & AT91_WDT_WDV); /* timer value */

at91_sys_write(AT91_WDT_MR, reg);

return 0;

}

void hw_watchdog_reset(void)

{

at91_sys_write(AT91_WDT_CR,A T91_WDT_KEY | AT91_WDT_WDRSTT); }

void hw_watchdog_init(void)

{

/* 16 seconds timer, resets enabled */

at91_wdt_settimeout(ms_to_ticks(WDT_HW_TIMEOUT * 1000));

}

3)添加drivers/watchdog/Makefile

#

# (C) Copyright 2008

# Wolfgang Denk, DENX Software Engineering, wd at denx.de.

#

# See file CREDITS for list of people who contributed to this

# project.

#

# This program is free software; you can redistribute it and/or

# modify it under the terms of the GNU General Public License as

# published by the Free Software Foundation; either version 2 of

# the License, or (at your option) any later version.

#

# This program is distributed in the hope that it will be useful,

# but WITHOUT ANY W ARRANTY; without even the implied warranty of

# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details.

#

# You should have received a copy of the GNU General Public License

# along with this program; if not, write to the Free Software

# Foundation, Inc., 59 Temple Place, Suite 330, Boston,

# MA 02111-1307 USA

#

include $(TOPDIR)/config.mk

LIB := $(obj)libwatchdog.a

COBJS-$(CONFIG_AT91SAM9_WATCHDOG) += at91sam9_wdt.o

COBJS := $(COBJS-y)

SRCS := $(COBJS:.o=.c)

OBJS := $(addprefix $(obj),$(COBJS))

all: $(LIB)

$(LIB): $(obj).depend $(OBJS)

$(AR) $(ARFLAGS) $@ $(OBJS)

######################################################################### # defines $(obj).depend target

include $(SRCTREE)/rules.mk

sinclude $(obj).depend

######################################################################### 4)修改uboot的Makefile,主要是把watchdog编辑到工程里

修改1:

LIBS += drivers/video/libvideo.a

+LIBS += drivers/watchdog/libwatchdog.a(添加)

LIBS += common/libcommon.a

修改2:

TAG_SUBDIRS += drivers/usb

TAG_SUBDIRS += drivers/video

+TAG_SUBDIRS += drivers/watchdog (添加)

5)另外,为了在其它地方调用WA TCHDOG_RESET函数,可以将watchdog.h添加包含到include/common.h文件中:

#if defined (CONFIG_HW_WATCHDOG)

#include

#endif

6)修改串口驱动drivers/serial/atmel_usart.c,主要是在串口读的时候复位看门狗,防止系统重启

int serial_getc(void)

{

- while (!(usart3_readl(CSR) & USART3_BIT(RXRDY))) ; (删除)

+ while (!(usart3_readl(CSR) & USART3_BIT(RXRDY))) (添加)

+ WATCHDOG_RESET(); (添加)

return usart3_readl(RHR);

}

3、改写驱动程序(linux2.6.30内核)

1、配置内核

在默认情况,系统并不加载看门狗驱动,需要配置内核:make menuconfig

Device drivers-->Watchdog Timer Support-->AT91SAM9X / A T91CAP9 watchdog 然后编译,重新烧写uImage文件到板子上。

正常启动,系统/dev目录下有watchdog设备

2、修改驱动(以下部分并不是必须的,当用户需要时再添加)

由于,该系统看门狗在处理器复位时才可以设置模式寄存器(MR),所以看门狗一旦开

启,就不能关闭。

查看看门狗驱动(drivers/watchdog/at91sam9_wdt.c),我们发现驱动在平台驱动注册的时候at91wdt_driver函数中调用了:

setup_timer(&at91wdt_private.timer, at91_ping, 0);

mod_timer(&at91wdt_private.timer, jiffies + WDT_TIMEOUT);

调用内核定时器定时复位看门狗。当应用程序要使用看门狗时,可以从内核定时器列表中删除看门狗定时器,然后手动定时复位看门狗;当应用程序不使用时,再将看门狗定时器添加到内核定时器中。

这些操作我们放在IOCTL中,代码如下(at91_wdt_ioctl函数):

switch(cmd) {

case WDIOC_SETON: //"开启"看门狗自动定时复位

setup_timer(&at91wdt_private.timer, at91_ping, 0);

mod_timer(&at91wdt_private.timer, jiffies + WDT_TIMEOUT);

return 0;

case WDIOC_SETOFF: //"关闭"看门狗自动定时复位,变位手动复位

del_timer(&at91wdt_private.timer);

return 0;

case WDIOC_KEEPALIVE:

//at91wdt_private.next_heartbeat = jiffies + heartbeat * HZ;

at91_wdt_reset();

return 0;

.....

至此,全部结束,虽然该驱动并不涉及复杂的时序操作、中断处理,连寄存器就仅有3个(控制、模式、状态各一个),但是这个驱动涉及了uboot+linux启动的各个过程,对于第一个驱动能有这样的机会,对于系统的理解有莫大的好处。

_看门狗_芯片的选择及软件控制

电子世界2004年1 期 26??单片机与可编程器件 “看门狗”芯片的选择 及软件控制 ?吉林化工学院自动化系 梁 伟 ?

电子世界2004年1期 27??单片机与可编程器件 个问题的方法就是做一个看门狗清除脉冲子程序,在延时等循环的圈内中加入它,可以保证万无一失。 2. 使用其它软件方法配合看门狗除了保证对看门狗的合理控制外,还要考虑使用其它软件方法配合看门狗,才能够保证MCU可靠运行。许多书籍在分析MCU失控后的情况时,几乎都假定一般是PC错位,进入未知区域,并不再进入正常程序代码段。但实际并非如此,以下就两种情况做具体分析,并给出解决方法。(1)干扰造成PC出错,但出错后进入了正常代码段,并在错误的情况下继续运行,看门狗没有起作用,但系统实际上已经瘫痪。解决这个问题可以使用软件路标法,几乎所有软件的主程序都是在一个大循环里工作,可以在循环中设置一些断点,断点处设置路标,程序运行 时随时检查路标,这样就可以判断程序是否有非法进入的可能。具体的路标可以是一个计数器,每个断点加1,在终点清除。因为断点数固定,因此每个断点处路标值固定,只需要检测路标值就可以进行对非法进入的判断。余下的问题就是发现错误后如何处理,正常的处理就是设置死循环,等待看门狗复位。对于PHILIPS的LPC系列MCU也可以置位AUXR1寄存器的SRST位立即进行软件复位。(2)干扰导致内部寄存器及RAM出错,但PC未错,因为错误的数据和标志导致程序在错误状态下运行。解决这种问题可以采用RAM校验的方法,具体是在MCU的内部RAM中开辟几个校验区,复位时写入固定代码,如55H或者AAH,并编制校验子程序,运行时随时调用校验,发现错误马上处理,处理方法同(1)。 考虑到可靠性,应该多设置几个校验区, 但要付出RAM资源代价,应酌情处理。此方法如果与(1)方法同时使用,则会获得更好的效果。 结束语 以上对看门狗的芯片选择和软件控制做了一些介绍,笔者通过合理运用,成功地设计出了许多应用系统,这些系统在恶劣的环境下都能够正常工作。但设计看门狗的初衷是防止系统万一死机的弥补措施,设计者本身是希望它永远也不要启动的。因此对于设计MCU系统,不应该过分依靠看门狗,而应该在电源及抗干扰措施上下足功夫,同时合理选择MCU芯片,尽可能选择那些抗干扰能力强,同时低EMI的品种。只有在各个环节都精心设计,才能够保证最终系统的可靠性。◆ Protel 99SE是基于Windows环境下的EDA电子辅助设计软件。一般来讲,利用Protel软件设计工程最基本的完整过程可以分为四大步骤:(1)查找资料,确定方案;(2)电路原理图的设计;(3)产生网络表;(4)印刷电路板的设计。 本文按照实际的设计流程顺序,来谈一谈如何使用Protel 99SE软件准确、高效地设计出电路原理图和设计印刷电路板的一些技巧。 电路原理图的设计 在电路原理图的设计过程中主要应 注意以下方面: 1.设置图纸 在设计开始之前首先要选择好图纸的大小,否则在打印时,若需将图纸由大号改为小号,而电路原理图不会跟着缩小,就存在部分原理图超出图纸范围打印不出来,从而返工的问题。通常的设计顺序为从左到右,从上到下。 2.放置元件 (1)利用元件库浏览器放置元件,对于元件库内未包括的元件要自己创建。创建的元件其引脚没有必要和实物一致, Protel 99SE 软件的实用技巧 ?上海海运学院商船学院轮机工程系 黄志坚 胡以怀? 可将功能相近或相同的引脚放到一起,以方便布线。(2)自创建元件时,还要注意,一定要在工作区的中央(0,0)处 (即“十”字形的中心) 绘制库元件,否则可能会出现在原理图中放置(place)制作的元件时,鼠标指针总是与要放置的元件相隔很远的现象。 (3) 在画原理图时,有时一不小心,使元件(或导线)掉到了图纸外面,却怎么也清除不了。这是由于Protel在原理图编辑状态下,不能同时用鼠标选中工作面内外的元件。要清除图纸外的元件,可点击 【Edit】/【Select】/【Outside Area】,然后框选整张图纸,再点击【Edit】/【Cut】即可。 元件放置好后,最好及时设置好其属性(Attributes),若找不到其相应的封装形式,也要及时为其创建适当的封装形式。 3.原理图布线 (1)根据设计目标进行布线。布线应该用原理图工具栏上的(Wiring Tools)工具,不要误用了(Drawing Tools)工具。(Wiring Tools)工具包含有电气特性,而(Drawing Tools)工具不具备电气特性,会导致原理图出错。 (2) 利用网络标号(Net Label)。网络标号表示一个电气连接点,具有相同网络标号的电气接线表明是连接在一起的。虽然网络标号主要用于层次式电路或多重式电路中各模块电路之间的连接,但若在同一张普通的原理图中也使用网络 标号,则可通过命名相同的网络标号使它们在电气上属于同一网络(即连接在一起),从而不用电气接线就实现了各引脚之间的互连,使原理图简洁明了,不易出错,不但简化了设计,还提高了设计速度。 4.编辑和调整编辑和调整是保证原理图设计成功很重要的一步。 (1)当电路较复杂、或是元器件的数目较多时,用手动编号的方法不仅慢,而且容易出现重号或跳号。重号的错误会在PCB编辑器中载入网络表时表现出来,跳号也会导致管理不便,所以Protel提供了很好的元件自动编号功能,应该好好地利用,即【Tools】/【Annotate...】。 (2)在原理图画好后,许多细节之处

看门狗程序

TMS320F2812 Watchdog范例程序 FILE: Example_28xWatchdog.c // // TITLE: DSP28 Watchdog interrupt test program. // // ASSUMPTIONS: // // This program requires the DSP28 header files. To compile the // program as is, it should reside in the DSP28/examples/watchdog // sub-directory. // // As supplied, this project is configured for "boot to H0" operation. // // DESCRIPTION: // This program exercises the watchdog on the F2812/F2810 parts. // // First the watchdog is connected to the WAKEINT interrupt of the // PIE block. The code is then put into an infinite loop. // // The user can select to feed the watchdog key register or not // by commenting one line of code in the infinite loop. // // If the watchdog key register is fed by the KickDog function // then the WAKEINT interrupt is not taken. If the key register // is not fed by the KickDog function then WAKEINT will be taken. // // Watch Variables: // LoopCount for the number of times through the infinite loop // WakeCount for the number of times through WAKEINT // //########################################################################### // // Ver | dd mmm yyyy | Who | Description of changes // =====|=============|======|=============================================== // 0.57| 29 May 2002 | L.H. | Initial Release //########################################################################### // Step 0. Include required header files // DSP28_Device.h: device specific definitions #include statements for // all of the peripheral .h definition files. // DSP28_Example.h is specific for the given example. #include "DSP28_Device.h"

飞思卡尔锁相环

备战飞思卡尔智能车大赛.开始模块总结. 锁相环设置. 公式: PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1), fbus=PLLCLK/2 void INIT_PLL(void) { CLKSEL &= 0x7f; //选用外部时钟.准备设置锁相环 PLLCTL &= 0x8F; //禁止锁相环 SYNR = 0xc9; //设置SYNR REFDV = 0x81; //设置REFDV PLLCTL |=0x70; //锁相环使能 asm NOP; asm NOP; //两个机器周期缓冲时间 while(!(CRGFLG&0x08)); //等待锁相环锁定 CLKSEL |= 0x80; //设置锁相环为时钟源 } 飞思卡尔XS128的PLL锁相环详细设置说明——关于如何提高总线工作频率PLL锁相环就相当于超频 单片机超频的原因和PC机是个一道理。分频的主要原因是外设需要的工作频率往往远低于CPU/MEMORY 这也和PC机南北桥的原理类似。总线频率设置过程 1、禁止总中断 2、寄存器CLKSEL(时钟选择寄存器)的第七位置0 即CLKSEL_PLLSEL=0。选择时钟源为外部晶振OSCCLK(外接晶振频率) 在PLL(锁相环)程序执行前 内部总线频率为OSCCLK/2 3. PLLCTL_PLLON=1 打开PLL 4.设置SYNR 时钟合成寄存器 、REFDV 时钟分频寄存器 、POSTDIV三个寄存器的参数 5、_asm(nop) _asm(nop);加入两条空指令 使锁相环稳定 6、while(!(CRGFLG_LOCK==1));//时钟校正同步 7、CLKSEL_PLLSEL=1; 下面详细说一下频率的计算一、时钟合成寄存器SYNR寄存器结构 VCOFRQ[1:0]控制压控振动器VCO的增益 默认值为00 VCO的频率与VCOFRQ[1:0]对应表

看门狗电路及原理

看门狗电路。在单片机中,为了能使得程序能够正常的运行。设定的及时根据程序所返回的值检测程序运行情况的定时电路。 在主程序中设定一定的值,把这个值在看门狗定时电路数值益处之前定时赋给看门狗赋给定时电路,让看门狗定时器复位。主程序的赋值周期要小于看门狗定时电路的运行周期。 看门狗 百科名片 单片机"看门狗" 在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,俗称"看门狗"(watchdog) 目录[隐藏] 应用 基本原理 看门狗使用注意 看门狗运用 设计思路 [编辑本段]应用 看门狗电路的应用,使单片机可以在无人状态下实现连续工作,其工作原理是:看门狗芯片和单片机的一个I/O引脚相连,该I/O引脚通过程序控制它定时地往看门狗的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,写看门狗引脚的程序便不能被执行,这个时候,看门狗电路就会由于得不到单片机送来的信号,便在它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位,

即程序从程序存储器的起始位置开始执行,这样便实现了单片机的自动复位。 [编辑本段]基本原理 看门狗,又叫watchdog timer,是一个定时器电路, 一般有一个输入,叫喂狗(kicking the dog or service the dog),一个输出到MCU的RST端,MCU正常工作的时候,每隔一端时间输出一个信号到喂狗端,给WDT 清零,如果超过规定的时间不喂狗,(一般在程序跑飞时),WDT 定时超过,就会给出一个复位信号到MCU,使MCU复位. 防止MCU死机. 看门狗的作用就是防止程序发生死循环,或者说程序跑飞。工作原理:在系统运行以后也就启动了看门狗的计数器,看门狗就开始自动计数,如果到了一定的时间还不去清看门狗,那么看门狗计数器就会溢出从而引起看门狗中断,造成系统复位。所以在使用有看门狗的芯片时要注意清看门狗。硬件看门狗是利用了一个定时器,来监控主程序的运行,也就是说在主程序的运行过程中,我们要在定时时间到之前对定时器进行复位如果出现死循环,或者说PC指针不能回来。那么定时时间到后就会使单片机复位。常用的WDT芯片如MAX813 ,5045, IMP 813等,价格4~10元不等. 软件看门狗技术的原理和这差不多,只不过是用软件的方法实现,我们还是以51系列来讲,我们知道在51单片机中有两个定时器,我们就可以用这两个定时器来对主程序的运行进行监控。我们可以对T0设定一定的定时时间,当产生定时中断的时候对一个变量进行赋值,而这个变量在主程序运行的开始已经有了一个初值,在这里我们要设定的定时值要小于主程序的运行时间,这样在主程序的尾部对变量的值进行判断,如果值发生了预期的变化,就说明T0中断正常,如果没有发生变化则使程序复位。对于T1我们用来监控主程序的运行,我们给T1设定一定的定时时间,在主程序中对其进行复位,如果不能在一定的时间里对其进行复位,T1 的定时中断就会使单片机复位。在这里T1的定时时间要设的大于主程序的运行时间,给主程序留有一定的的裕量。而T1的中断正常与否我们再由T0定时中断子程序来监视。这样就够成了一个循环,T0监视T1,T1监视主程序,主程序又来监视T0,从而保证系统的稳定运行。51 系列有专门的看门狗定时器,对系统频率进行分频计数,定时器溢出时,将引起复位.看门狗可设定溢出率,也可单独用来作为定时器使用。凌阳61的看门狗比较单一,一个是时间单一,第二是功能在实际的使用中只需在循环当中加入清狗的指令就OK了。AVR系列中,avr-libc 提供三个API 支持对器件内部Watchdog 的操作,它们分别是:wdt_reset() // Watchdog 复位wdt_enable(timeout) // Watchdog 使能wdt_disable() // Watchdog 禁止C8051Fxxx单片机内部也有一个21位的使用系统时钟的定时器,该定时器检测对其控制寄存器的两次特定写操作的时间间隔。如果这个时间间隔超过了编程的极限值,将产生一个WDT复位。-------------------------------------------------------------------------------- [编辑本段]看门狗使用注意

软件看门狗和硬件看门狗

看门狗分硬件看门狗和软件看门狗。硬件看门狗是利用一个定时器电路,其定时输出连接到电路的复位端,程序在一定时间范围内对定时器清零(俗称“喂狗”),因此程序正常工作时,定时器总不能溢出,也就不能产生复位信号。如果程序出现故障,不在定时周期内复位看门狗,就使得看门狗定时器溢出产生复位信号并重启系统。软件看门狗原理上一样,只是将硬件电路上的定时器用处理器的内部定时器代替,这样可以简化硬件电路设计,但在可靠性方面不如硬件定时器,比如系统内部定时器自身发生故障就无法检测到。当然也有通过双定时器相互监视,这不仅加大系统开销,也不能解决全部问题,比如中断系统故障导致定时器中断失效。 看门狗本身不是用来解决系统出现的问题,在调试过程中发现的故障应该要查改设计本身的错误。加入看门狗目的是对一些程序潜在错误和恶劣环境干扰等因素导致系统死机而在无人干预情况下自动恢复系统正常工作状态。看门狗也不能完全避免故障造成的损失,毕竟从发现故障到系统复位恢复正常这段时间内怠工。同时一些系统也需要复位前保护现场数据,重启后恢复现场数据,这可能也需要一笔软硬件的开销。 图1:(a) 多任务系统看门狗示意图;(b) 相应的看门狗复位逻辑图。 在单任务系统中看门狗工作原理如上所述,容易实现。在多任务系统中情况稍为复杂。假如每个任务都像单任务系统那么做,如图1(a)所示,只要有一个任务正常工作并定期“喂狗”,看门狗定时器就不会溢出。除非所有的任务都故障,才能使得看门狗定时器溢出而复位,如图1(b)。 而往往我们需要的是只要有一个任务故障,系统就要求复位。或者选择几个关键的任务接受监视,只要一个任务出问题系统就要求复位,如图2(a)所示,相应的看门狗复位逻辑如图2(b)所示。 在多任务系统中通过创建一个监视任务TaskMonitor,它的优先级高于被监视的任务群Task1、Task2...Taskn。TaskMonitor在Task1~Taskn正常工作情况下,一定时间内对硬件看门狗定时器清零。如果被监视任务群有一个Task_x出现故障,TaskMonitor就不对看门狗定时器清零,也就达到被监视任务出现故障时系统自动重启的目的。另外任务TaskMonitor自身出故障时,也不能及时对看门狗定时器清零,看门狗也能自动复位重启。

飞思卡尔智能车比赛细则

2016

目录

第十一届竞赛规则导读 参加过往届比赛的队员可以通过下面内容了解第十一届规则主要变化。如果第一次参加比赛,则建议对于本文进行全文阅读。 相对于前几届比赛规则,本届的规则主要变化包括有以下内容: 1.本届比赛新增了比赛组别,详细请参见正文中的图1和第四章的“比赛任务” 中的描述; 2.第十届电磁双车组对应今年的A1组:双车追逐组。其它组别与新组别的对应 关系请参见图2; 3.为了提高车模出界判罚的客观性,规则提出了两种方法:路肩法和感应铁丝 法,详细请见赛道边界判定”; 4.改变了原有的光电计时系统,所有赛题组均采用磁感应方法计时,详细请参 见“计时裁判系统”; 5.取消了第十届的发车灯塔控制的方式; 6.赛道元素进行了简化,详细请参见“赛道元素”; 7.赛道材质仍然为PVC耐磨塑胶地板,但赛题组A2不再需要赛道。 8.对于车模所使用的飞思卡尔公司MCU的种类、数量不再限制。 9.比赛时,每支参赛队伍的赛前准备时间仍然为20分钟,没有现场修车环节。

一、前言 智能车竞赛是从2006开始,由教育部高等教育司委托高等学校自动化类教学指导委员会举办的旨在加强学生实践、创新能力和培养团队精神的一项创意性科技竞赛。至今已经成功举办了十届。在继承和总结前十届比赛实践的基础上,竞赛组委会努力拓展新的竞赛内涵,设计新的竞赛内容,创造新的比赛模式,使得围绕该比赛所产生的竞赛生态环境得到进一步的发展。 为了实现竞赛的“立足培养、重在参与、鼓励探索、追求卓越”的指导思想,竞赛内容设置需要能够面向大学本科阶段的学生和教学内容,同时又能够兼顾当今时代科技发展的新趋势。 第十一届比赛的题目在沿用原来根据车模识别赛道传感器种类进行划分的基础类组别之上,同时增加了以竞赛内容进行划分的提高类组别,并按照“分赛区普及,全国总决赛提高”的方式,将其中一个类别拓展出创意类组别。第十一届比赛的题目各组别分别如下: ●基础类包括B1光电组、B2摄像头组、B3电磁直立组、B4电轨组; ●提高类包括A1双车追逐组、A2信标越野组; ●创意类包括I1 电轨节能组。 图 1 不同组别,不同挑战度 每个组别在选用的车模、赛道识别方法、完成任务等方面存在差别,对于参赛选手不同学科知识和能力要求也不同,制作的挑战度也有较大的区别。相比较而言,

飞思卡尔单片机LED控制例程详解

我的第一个LED程序 准备工作: 硬件:Freescale MC9S08JM60型单片机一块; 软件:集成开发环境codewarrior IDE; 开发板上有两个LED灯,如下图所示: 实验步骤: 1.首先,确保单片机集成开发环境及USBDM驱动正确安装。其中USBDM的安装步骤如下:?假设之前安装过单片机的集成开发环境6.3版本:CW_MCU_V6_3_SE; ?运行USBDM_4_7_0i_Win,这个程序会在c盘的程序文件夹下增加一个目录C:\Program Files\pgo\USBDM 4.7.0,在这个目录下: 1〉C:\ProgramFiles\pgo\USBDM 4.7.0\FlashImages\JMxx下的文件 USBDM_JMxxCLD_V4.sx是下载器的固件文件; 2〉C:\Program Files\pgo\USBDM 4.7.0\USBDM_Drivers\Drivers下有下载器的usb 驱动 所以在插入usb下载器,电脑提示发现新的usb硬件的时候,选择手动指定驱动 安装位置到以上目录即可。 ?运行USBDM_4_7_0i_Win之后,还会在目录: C:\Program Files\Freescale\CodeWarrior for Microcontrollers V6.3\prog\gdi 下增加一些文件,从修改时间上来看,增加了6个文件,这些文件是为了在codewarrior 集成开发环境下对usb下载器的调试、下载的支持。

2.新建一个工程,工程建立过程如下: ?运行单片机集成开发环境codewarrior IDE ?出现如下界面 ●Create New Project :创建一个新项目工程 ●Load Example Project :加载一个示例工程 ●Load Previous Project :加载以前创建过的工程 ●Run Getting started Tutorial:运行CodeWarrior软件帮助文档 ●Start Using CodeWarrior:立刻使用CodeWarrior ?点击Create New project按钮,以创建一个新的工程,出现选择CPU的界面 如下,请选择HCS08/HCS08JM Family/MC9S08JM60,在右边的Connection窗口

C51单片机看门狗电路及程序设计方案

C51单片机看门狗电路及 程序设计案 院系:信息工程学院 年级:2010级 电子一班禹豪 电子一班训虎 电子二班邓启新 一、引言 在由单片机构成的微型计算机系统中,程序的正常运行常常会因为来自外界的电磁场干扰等原因而被打断,从而造成程序的跑飞,而陷入死循环。由此导致单片机控制的系统无法继续工作,造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片或程序,俗称"看门狗"(watchdog) (1)看门狗电路基本原理 看门狗电路的应用,使单片机可以在无人状态下实现连续工作,其工作原理是:看门狗芯片和单片机的一个I/O引脚相连**,该I/O引脚通过程序控制它定时地往看门狗的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,写看门狗引脚的程序便不能被执行,这个时候,看门狗电路就会由于得不到单片机送来的信号,便在它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位,即程序从程序存储器的起始位置开始执行,这样便实现了单片机的自动复位。 *此处设计原理实际上为下文中硬件看门狗设计思路。

(2)看门狗电路一般设计式 “看门狗”电路一般分为硬件看门狗与软件看门狗两种设计式。 硬件看门狗是利用了一个定时器,来监控主程序的运行,也就是说在主程序的运行过程中,我们要在定时时间到之前对定时器进行复位。如果出现死循环,或者说PC指针不能回来,那么定时时间到后就会使单片机复位。常用的WDT芯片如MAX813,5045,IMP 813等,价格4~10元不等. 软件看门狗技术的原理和硬件看门狗类似,只不过是用软件的法实现(即利用单片机部定时器资源,通过编程模拟硬件看门狗工作式),以51系列为例:因在51单片机中有两个定时器,在利用部定时器资源来对主程序的运行进行监控时。可以对T1(或T0)设定一定的定时时间(设定的定时值要小于主程序的运行时间),当产生定时中断的时候对一个变量进行赋值(此变量在主程序运行的开始已有一个初值)。当主程序运行至最后时对此变量的值进行判断,如果值发生了预期的变化,就说明T0中断正常,如果没有发生变化则使程序复位。 考虑到设计要求,本设计采用软件看门狗设计思路。 二、看门狗电路整体设计思路 根据设计要求,本设计利用C51单片机部自带的定时器1进行编程,并配合少量电路实现“看门狗“电路功能。整个设计分为软件部分与硬件部分,如下: (1)软件部分设计原理: 软件设计分为三部分:“看门狗“定时器设置程序、溢出中断服务程序和喂狗代码。 1.1设计思路: 1)在主程序开头,“看门狗“定时器设置程序设置定时器1计时50ms。 2)当定时达50ms时,定时器1产生溢出中断,溢出中断服务程序开始工作,将看门狗标志num加1。当num的值等于100时,说明看门狗定时器已经计时5s,此时,单片机I/O端口P1.0输出高电平,对程序进行复位。 3)在此过程中,喂狗代码将被穿插于程序中循环体末尾。当循环体结束时,喂狗代码执行,关闭定时器1、清空num并重新初始化定时器设置。若循环体进入死循环,喂狗代码无法执行,num将一直累加至100,此时程序复位。 注:喂狗代码放置位置可根据num预计数值进行调整:当num门限值较小,即看门狗计数时间较短时,喂狗代码可放于程序中各循环体之后或均匀分布于整个主程序中。当num门限值较大,即看门狗计数时间较长时,喂狗代码可放于程序主循环体末尾。但是需注意看门狗计数时间必须长于正常工作时间,以免非正常复位。 1.2软件设计流程图:

飞思卡尔智能车竞赛新手入门建议

每年都会有很多新人怀着满腔热情来做智能车,但其中的很多人很快就被耗光了热情和耐心而放弃。很多新人都不知道如何入手,总有些有劲无处使的感觉,觉得自己什么都不会,却又不知道该干什么。新人中存在的主要问题我总结了以下几点: l缺乏自信,有畏难情绪 作为新人,一切都是新的。没有设计过电路,没有接触过单片机,几乎什么都不会。有些新人听了两次课,看了两篇技术报告,就发现无数不懂不会的东西,于是热情在消退,信心在减弱。这些都是放弃的前兆。殊不知,高手都是从新人过来的,没有谁天生什么都会做。一件事件,如果还没开始做,就自己否定自己,认为自己做不到,那么肯定是做不到的。 l习惯了被动接收知识,丧失了主动学习的能力。 现在的学生大多从小习惯了被灌输知识,只学老师教的,只学老师考的。殊不知一旦走向社会,将不再有老师来教,不再有应付不完的考试。做智能车和传统的教学不同,学生将从被动学习的地位转变为主动学习。就算有指导老师,有指导的学长,但也都处于被动地位,往往都不会主动来教。有的学生一开始就没有转变思想,还希望就像实验课一样,老师安排好步骤1,2,3……,然后自己按照老师安排好的步骤按部就班的完成。这样的学生,往往都丧失了提出问题和分析问题的能力,只是一个应付考试的机器。要知道,解决问题的第一步是提出问题,如果总等着别人来教,那么问题永远会挡在你面前。 l缺乏团队精神和合作意识 智能车比赛是以团队的形式参赛,只依靠个人能力单兵作战就能取得好成绩的是很少很少的。当今社会,任何人的成功都离不开身后的团队的支撑。智能车是一个很复杂的系统,电路、机械、传感器、单片机、底层驱动、控制算法……。如果所有的任务都是一个人去完成,固然锻炼了自己,但想做的很好却很不现实。很多新人,来到实验室,来到一个陌生的环境和团队,连向学长请教,和同学交流的勇气都没有,又如何融入团队呢。除了要主动融入团队,还要培养自己的团队意识。团队精神往往表现为一种责任感,如果团队遇到问题,每个人都只顾自己,出了错误,不想着解决问题,而是互相推诿埋怨。这样的团队,肯定是无法取得好成绩的。 l缺乏耐心和细心的精神 其实把一件事做好很简单,细心加上耐心。不细心就想不到,没有耐心,即使想到了也做不到。做事怕麻烦,将就,说白了就是惰性在作祟。明明可以把支架做的更轻更漂亮,明明可以把程序写的更简洁,明明可以把电路设计得更完善……。其实,每个人都有很大潜力,如果不逼自己一次,你永远不知道自己的潜力有多

STM32窗口看门狗程序

STM32窗口看门狗程序 窗口看门狗(WWDG)通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在T6位(WWDG->;CR的第六位)变成0前被刷新,看门狗电路在达到预置的时间周期时,会产生一个MCU复位。在递减计数器达到窗口配置寄存器(WWDG->;CFR)数值之前,如果7位的递减计数器数值(在控制寄存器中)被刷新,那么也将产生一个MCU复位。这表明递减计数器需要在一个有限的时间窗口中被刷新。

图 3.6.1.1中,T[6:0]就是WWDG_CR的低七位,W[6:0]即是WWDG->;CFR的低七位。T[6:0]就是窗口看门狗的计数器,而W[6:0]则是窗口看门狗的上窗口,下窗口值是固定的(0X40)。当窗口看门狗的计数器在上窗口值之外被刷新,或者低于下窗口值都会产生复位。 上窗口值(W[6:0])是由用户自己设定的,根据实际要求来设计窗口值,但是一定要确保窗口值大于0X40,否则窗口就不存在了。 窗口看门狗的超时公式如下: Twwdg=(4096×2^WDGTB×(T[5:0]+1)) /Fpclk1; 其中: Twwdg:WWDG超时时间(单位为ms) Fpclk1:APB1的时钟频率(单位为Khz) WDGTB:WWDG的预分频系数 T[5:0]:窗口看门狗的计数器低6位 窗口看门狗寄存器介绍:

如何使用窗口看门狗: 1)使能WWDG时钟 2)设置WWDG_CFR和WWDG_CR两个寄存器 在时钟使能完后,我们设置WWDG的CFR和CR两个寄存器,对WWDG进行配置。包括使能窗口看门狗、开启中断、设置计数器的初始值、设置窗口值并设置分频数WDGTB 3)开启WWDG中断并分组 4)编写中断服务函数 软件例程: //---------------------------wdg.c----------------------- #include "wdg.h" #include "led.h" u8 wwdg_cnt=0x7f; //窗口看门狗计数器初值 void wwdg_init(u8 tr,u8 wr,u8 fprer) { RCC->;APB1ENR|=1;CFR|=fprer;CFR|=1;CFR&=0xff80; //窗口值清零 WWDG->;CFR|=wr; //设定窗口值 WWDG->;CR|=(wwdg_cnt|1;CR|=(cnt&0x7f); //喂狗值 } void WWDG_IRQHandler(void)

飞思卡尔杯智能车竞赛报告总结

1.1. 系统分析 智能车竞赛要求设计一辆以组委会提供车模为主体的可以自主寻线的模型车,最后成绩取决于单圈最快时间。因此智能车主要由三大系统组成:检测系统,控制系统,执行系统。其中检测系统用于检测道路信息及小车的运行状况。控制系统采用大赛组委会提供的16位单片机MC9S12XS128作为主控芯片,根据检测系统反馈的信息新局决定各控制量——速度与转角,执行系统根据单片机的命令控制舵机的转角和直流电机的转速。整体的流程如图1.1,检测系统采集路径信息,经过控制决策系统分析和判断,由执行系统控制直流电机给出合适的转速,同时控制舵机给出合适的转角,从而控制智能车稳定、快速地行驶。 图2.1 1.2. 系统设计 参赛小车将电感采集到的电压信号,经滤波,整流后输入到XS128单片机,用光电编码器获得实时车速,反馈到单片机,实现完全闭环控制。速度电机采用模糊控制,舵机采用PD控制,具体的参数由多次调试中获得。考滤到小车设计的综合性很强,涵盖了控制、传感、电子、电气、计算机和机械等多个学科领域,因此我们采用了模块化设计方法,小车的系统框图如图2.2。

第五届全国大学生智能汽车竞赛技术报告 图2.2 1.3. 整车外观 图2.3

1.4. 赛车的基本参数 智能车竞赛所使用的车模是东莞市博思公司生产的G768型车模,由大赛组委会统一提供,是一款带有摩擦式差速器后轮驱动的电动模型车。车模外观如图3.1。车模基本参数如表3.1。 图3.1 表3.1车模基本参数 1.5. 赛车前轮定位参数的选定

第五届全国大学生智能汽车竞赛技术报告 现代汽车在正常行驶过程中,为了使汽车直线行驶稳定,转向轻便,转向后能自动回正,减少轮胎和转向系零件的磨损等,在转向轮、转向节和前轴之间须形成一定的相对安装位置,叫车轮定位,其主要的参数有:主销后倾、主销内倾、车轮外倾和前束。模型车的前轮定位参数都允许作适当调整,故此我们将自身专业课所学的理论知识与实际调车中的赛车状况相结合,最终得出赛车匹配后的前轮参数[6]。 1.5.1. 主销后倾角 主销后倾角是指在纵向平面内主销轴线与地面垂直线之间的夹角γ,如图3-2。模型车的主销后倾角可以设置为0、 2°?3°、 4°?6°,可以通过改变上横臂轴上的黄色垫片来调整,一共有四个垫片,前二后二时为0°,前一后三为2°?3°,四个全装后面时为4°?6°。 由于主销后倾角过大时会引起转向沉重,又因为比赛所用舵机特性偏软,所以不宜采用大的主销后倾角,以接近0°为好,即垫片宜安装采用前二后二的方式,以便增加其转向的灵活性。如图3.3。 图3.2 图3.3 1.5. 2. 主销内倾角 主销内倾角是指在横向平面内主销轴线与地面垂直线之间的夹角β,如图3.4,它的作用也是使前轮自动回正。对于模型车,通过调整前桥的螺杆的长度可以改变主销内倾角的大小,由于前轴与主销近似垂直的关系,故主销内倾角

飞思卡尔第一张

3.1 实验一 I/O口输入输出实验 4.实验原理 如图3-1所示,将PTB6设置为输出端口后,若向PTB6写高电平时,LED灯不亮,若写低电平,则LED亮。PTA2设置为输入端口后,在按键SW未按下时,读PTA2始终为高电平,只有在按键SW按下时,读PTA2时才得到低电平。 图3-1 LED灯与按键控制电路原理图 5.实验内容 ⑴结合开发板电路图,用跳线夹连接对应LED引脚。即LED1、LED2分别与PTB6、PTB7相连接。将PTB 口定义为输出接口。对端口写0即可点亮LED灯。单步运行观察实验现象。 ⑵结合开发板电路图,用跳线夹再将开发板上的按键SW1、SW2连到PTA2。将PTA口定义为输入口,将PTB口定义为输出口。按下SW1时点亮LED1、LED2。按下SW2时熄灭LED1、LED2。 6.参考程序 ⑴直接点亮LED灯,其参考程序如下。 C语言程序: #include #include "derivative.h" /* 头文件 */ void main(void) { PTBDD=0xff; /*定义PTB口为输出口 */ PTBD=0xff; /*输出高电平,LED灯灭*/ PTBD=0x00; /*PTB口输出低电平,即PTB6、PTB7输出低电平 */

for(;;) { __RESET_WATCHDOG(); /* 清看门狗 */ } /* 死循环 */ } 汇编程序(加粗部分为所需添加的程序代码): ;******************************************************************* ;* This stationery serves as the framework for a user application. * ;* For a more comprehensive program that demonstrates the more * ;* advanced functionality of this processor, please see the * ;* demonstration applications, located in the examples * ;* subdirectory of the "Freescale CodeWarrior for HC08" program * ;* directory. * ;******************************************************************* ; Include derivative-specific definitions INCLUDE 'derivative.inc' ; ; export symbols ; XDEF _Startup ABSENTRY _Startup ; ; variable/data section ; ORG RAMStart ; Insert your data definition here ExampleVar: DS.B 1 ; ; code section ; ORG ROMStart _Startup: LDHX #RAMEnd+1 ; initialize the stack pointer TXS CLI ; enable interrupts mainLoop: ; Insert your code here MOV #$FF,PTBDD; 端口方向寄存器初始化为输出 MOV #$FF,PTBD; 输出高点平,LED灯灭 MOV #$00,PTBD; 输出低电平,LED灯亮 NOP

用CD4060制作看门狗报警电路

用CD4060制作看门狗报警电路 看门狗定时器(WDT,Watch Dog Timer)是单片机的一个组成部分,它实际上是一个计数器,一般给看门狗一个大数,程序开始运行后看门狗开始倒计数。如果程序运行正常,过一段时间CPU应发出指令让看门狗,重新开始倒计数。如果看门狗减到0就认为程序没有正常工作,强制整个系统复位。 原理图: CD4060芯片特性 1) 电压范围宽,应该可以工作在3V~15V,输入阻抗高,驱动能力差外,跟74系列的功能基本没有区别; 2) 输入时,1/2工作电压以下为0,1/2工作电压以上为1; 3) 输出时,1=工作电压;0=0V; 4) 驱动能力奇差,在设计时最多只能带1个TTL负载; 5) 如果加上拉电阻的话,至少要100K电阻; 6) 唯一现在使用的可能就是计数器,CD4060的计数器可以到14级二进制串行计数。 以AT89C51为例: 看门狗电路由14位二进制计数器CD4060和三极管VT1、VT2等组成。

Vout接单片机AT89C51的引脚输出口P1.7,由单片机的CPU向看门狗电路发送喂狗信号——正脉冲,在两个正脉冲间隔内,P1.7保持为低电平(此功能要结合软件才能实现,相应的软件设计在下面介绍)。我们知道,单片机AT89C51的I/O口带灌电流负载的能力比较大,每个引脚低电平时的吸入电流为20 mA,带拉电流负载的能力却很小,实测情况是,每个引脚高电平时的输出电流仅25μA,现在P1.7口被设计成带拉电流负载的方式,为了提高P1.7口带拉电流负载的能力,所以,电路中设置了上拉电阻R3。 14位二进制计数器CD4060的计数脉冲由其内部振荡器和外接阻容元件R1、R2、C1组成的电路产生,振荡周期为 T0SC=2.2×R1×C1=0.22 ms 振荡器产生的计数脉冲(矩形波)可以直接引出,同时还可以从CD4060的10个输出端Q4~Q10和Q12~Q14得到不同分频系数的方波输出,各方波输出信号的周期如表1所示。这样,如果CD4060得不到CPU通过P1.7口发送来的喂狗信号——正脉冲,则CD4060的输出端Q14在1.8S内将产生一个完整周期的方波信号,而且低电平在前,高电平在后,其高电平经三极管VT1、VT2处理后形成单片机AT89C51的复位信号,使单片机AT89C51复位。由此可见,单片机AT89C51正常工作时,只要在0.9S内从P1.7口送出一个正脉冲,便可及时清零看门狗,输出端Q14就不会产生定时溢出信号,从而使看门狗电路对单片机系统不起作用。并且,从CD4060的10个输出端Q4~Q10和Q12~Q14可以得到不同周期的方波信号,经三极管VT1、VT2处理后形成单片机系统的复位信号,可以适应不同用户应用程序,从而该硬件看门狗电路可以适应不同的单片机应用系统。 对MCS-51系列的单片机而言,它所需要的复位信号是高电平宽度大于2个机器周期的正脉冲,例如,单片机的时钟脉冲频率为12 MHz时,则所需要的复位信号高电平宽度为2μs以上就可以了,而由上面的分析可知,CD4060的Q14输出的是高电平宽度为0.9 s的方波,如果让它直接作为单片机的复位信号,则单片机的复位时间势必在0.9 s以上,这样尽管可以使程序跑飞的单片机复位,但是显然没有做到尽快地引导跑飞的程序到正确的轨道来,如果这样做的话,对于某些单片机应用系统而言可能带来非常严重的后果。图1中的三极管VT1、VT2及其周围阻容元件构成波形转换电路,把较宽的正脉冲变换为较窄的正脉冲,从而较好地解决了上述的问题。三极管VT1、VT2构成的2级直接耦合放大器作为缓冲器使用,它是CD4060的输出端Q14的灌电流负载,C2、R8是微分电路。 经分析后不难看出,电路中的R7、R8、C2还具有单片机上电复位的功能。 2 上电复位与看门狗信号复位的不同处理过程 由于程序跑飞很可能会造成一些随机破坏事件,对某些系统而言,希望尽可能从断点处恢复运行,因此,有必要妥善解决跑飞的程序回复后的处理。 单片机应用系统上电时,上电复位电路会使得单片机处于复位状态,这一般称为冷启动,这种情况下,单片机处于复位状态表现为: (1) 程序计数器PC的值为0000H。 (2) I/O口(P0、P1、P2、P3(1))为FFH状态,即准双向I/O口的输入状态。 (3) 堆栈指示器SP=07H,即堆栈底为片内RAM的07H单元。 (4) 除上述状态外,所有特殊功能寄存器SFR的有效位均为0。 (5) 上电复位时,由于是重新供电,RAM在断电时数据丢失,上电复位后为随机数。

飞思卡尔项目书

飞思卡尔智能车比赛项目 参赛时间:2011.7.16 — 2011.7.20 赛前准备时间:2010.7 ---2011.7 飞思卡尔智能车比赛简介: 为加强大学生实践、创新能力和团队精神的培养,促进高等教育教学改革,受教育部高等教育司委托(教高司函[2005]201号文,附件1),由教育部高等学校自动化专业教学指导分委员会(以下简称自动化分教指委)主办全国大学生智能汽车竞赛。该竞赛是以智能汽车为研究对象的创意性科技竞赛,是面向全国大学生的一种具有探索性工程实践活动,是教育部倡导的大学生科技竞赛之一。该竞赛以“立足培养,重在参与,鼓励探索,追求卓越”为指导思想,旨在促进高等学校素质教育,培养大学生的综合知识运用能力、基本工程实践能力和创新意识,激发大学生从事科学研究与探索的兴趣和潜能,倡导理论联系实际、求真务实的学风和团队协作的人文精神,为优秀人才的脱颖而出创造条件。 该竞赛由竞赛秘书处设计、规范标准硬软件技术平台,竞赛过程包括理论设计、实际制作、整车调试、现场比赛等环节,要求学生组成团队,协同工作,初步体会一个工程性的研究开发项目从设计到实现的全过程。该竞赛融科学性、趣味性和观赏性为一体,是以迅猛发展、前景广阔的汽车电子为背景,涵盖自动控制、模式识别、传感技术、电子、电气、计算机、机械与汽车等多学科专业的创意性比赛。该竞赛规则透明,评价标准客观,坚持公开、公平、公正的原则,力求向健康、普及、持续的方向发展。 该竞赛以飞思卡尔半导体公司为协办方,得到了教育部相关领导、飞思卡尔公司领导与各高校师生的高度评价,已发展成全国30个省市自治区近300所高校广泛参与的全国大学生智能汽车竞赛。2008年起被教育部批准列入国家教学质量与教学改革工程资助项目中科技人文竞赛之一(教高函[2007]30号文)。 全国大学生智能汽车竞赛原则上由全国有自动化专业的高等学校(包括港、澳地区的高校)参赛。竞赛首先在各个分赛区进行报名、预赛,各分赛区的优胜队将参加全国总决赛。每届比赛根据参赛队伍和队员情况,分别设立光电组、摄像头组、电磁组、创意组等多个赛题组别。每个学校可以根据竞赛规则选报不同组别的参赛队伍。全国大学生智能汽车竞赛组织运行模式贯彻“政府倡导、专家主办、学生主体、社会参与”的16字方针,充分调动各方面参与的积极性。 全国大学生智能汽车竞赛一般在每年的10月份公布次年竞赛的题目和组织方式,并开始接受报名,次年的3月份进行相关技术培训,7月份进行分赛区竞赛,8月份进行全国总决赛。 飞思卡尔智能车比赛技术要求:

相关主题