WINCE6.0+S3C6410 watchdog重新启动

发布者:Chunjie2022最新更新时间:2024-09-19 来源: cnblogs关键字:WINCE6  S3C6410  watchdog  重新启动 手机看文章 扫描二维码
随时随地手机看文章

// File: watchdog_sw_rst.c
//
// Samsung SMDK6410 SW_RST using watchdog timer support code.
//
#include
#include
#include
#include

// WTCON - control register, bit specifications
#define WTCON_PRESCALE(x) (((x)&0xff)<<8) // bit 15:8, prescale value, 0 <= (x) <= 27
#define WTCON_ENABLE (1<<5) // bit 5, enable watchdog timer
#define WTCON_CLK_DIV16 (0<<3)
#define WTCON_CLK_DIV32 (1<<3)
#define WTCON_CLK_DIV64 (2<<3)
#define WTCON_CLK_DIV128 (3<<3)
#define WTCON_INT_ENABLE (1<<2)
#define WTCON_RESET (1<<0)

// WTCNT - watchdog counter register
#define WTCNT_CNT(x) ((x)&0xffff)

// WTDAT - watchdog reload value register
#define WTDAT_CNT(x) ((x)&0xffff)

// WTCLRINT - watchdog interrupt clear register
#define WTCLRINT_CLEAR (1<<0)

// Watchdog Clock
// PCLK : 66MHz
// PCLK/PRESCALER : 66/66 = 1MHz
// PCLK/PRESCALER/DIVIDER : 1MHz/128 = 7.812 KHz
// MAX Counter = 0xffff = 65535
// Period = 65535/7812 =~ 8.4 sec
#define WD_PRESCALER (66-1)

//------------------------------------------------------------------------------
//
// Function: _OEMSWReset
//
// This is the function to reset S3C6410 using watchdog timer.
//
void _OEMSWReset(void)
{
  volatile S3C6410_WATCHDOG_REG *pWTDogReg = NULL; // VA for Watchdog base
  pWTDogReg = (S3C6410_WATCHDOG_REG *)OALPAtoVA(S3C6410_BASE_REG_PA_WATCHDOG, FALSE);
  if (!pWTDogReg)
  {
  OALMSG (OAL_ERROR, (L'Address of Watch Dog Base Not Defined, WatchDog not enabled!/r/n'));
  }
  else
  {
  pWTDogReg->WTCON = WTCON_PRESCALE(WD_PRESCALER) | WTCON_CLK_DIV128 | WTCON_RESET;
  pWTDogReg->WTDAT = WTDAT_CNT(0x1);
  pWTDogReg->WTCNT = WTCNT_CNT(0x1);
  pWTDogReg->WTCON |= WTCON_ENABLE;
  }
}

关键字:WINCE6  S3C6410  watchdog  重新启动 引用地址:WINCE6.0+S3C6410 watchdog重新启动

上一篇:第五章 搭建S3C6410开发板的测试环境
下一篇:S3C6410串口平台设备注册流程分析

推荐阅读最新更新时间:2026-03-25 11:38

Tiny6410裸机编程-----WatchDog
WatchDog (看门狗) 本质上是一个定时计数器,当该计数器递减到0时会产生一个通知(中断或复位),主要用于解决嵌入式系统意外跑飞等运行不正常的问题。开发板一般在默认的情况下都会开启WatchDog, 这样当计数器递减到0时系统就会复位。因为出现异常的可能性几乎可以忽略,所以bootloader在开始执行时就会关掉开门狗。所以,对WatchDog的最经典操作就是:关闭。 2. Principle (1) WatchDog只使用PCLK时钟 (Tiny6410在没有初始化时钟时,整个开发板由一个12MHz的外部晶振提供频率,PCLK工作频率也是12MHz); (2) PCLK 再经过一个8位分频器Prescaler, 相
[单片机]
Tiny6410裸机编程-----<font color='red'>WatchDog</font>
N76E003配置看门狗watchdog
说明 本例子只做软件异常时重置系统用,不需要用作定时器或唤醒用,所以不用打开watchdog中断。需要注意的是:如果上次启动开启过watchdog reset,想要关闭,下次启动必须清除CONFIG4内的WDT配置,否则watchdog还是启动的。 主要代码只是在CONFIG4寄存器对看门狗定时器WDT做使能关闭的配置( ,0xF0关闭重置只做定时器,0x50和其他任意值开启重置,但0x50在空闲或掉电模式下停止运行),由于是页擦除,所以先保存CONFIG0到CONFIG4的值再写入。 在操作前要执行TA时效访问保护。 参考代码 #include N76E003.h #include SFR_Macro.h #in
[单片机]
N76E003配置看门狗<font color='red'>watchdog</font>
wince6中用硬解码替换IIMAGING中的解码器
一直想用6410的jpg解码器替换wince的解码器,这几天终于有时间,弄了一下。过程不是太复杂,大致如下: 1.从wince自带的decoder例子开始,主要是修改renderImage部分。 2.注册表的配置,因为wince的例子没有注册表配置,所以这部分花了不少时间。 _LastCookie =dword:00000001 MIME Type = image/jpeg Filename Extension = *.jpg File Type Description = JPEG file DLLNAME = imgcodec Signature Mask =hex: ff,ff ;SigMask
[单片机]
WINCE6开机进度条
大致思路,在NBoot或EBoot加开机进度条,由于WINCE启动主要时间都花在读取NK,因此每读取一定的页,就在屏上画一条固定高度的线,并记录画线的位置,下次接着画,直到读取完NK,这样就产生的进度条的效果。 参考Mini2440 Nboot。 先定义进度条颜色、位置及长宽,关键代码如下: 1 #define PROGRESS_BAR_R 0x00 2 #define PROGRESS_BAR_G 0xFF 3 #define PROGRESS_BAR_B 0x00 4 5 //设置启动条的位置和长宽 6 #define PROGRESS_BAR_TOP 225 7 #define P
[单片机]
S3C2440 WINCE6将USB DEVICE改成USB HOST,实现两个USB HOST
S3C2440一般默认的是一个USB DEVICE,一个USB HOST,即一个主口,一个从口,先来看看USB Device与USB Host相关知识。 USB Host: 最底层就是USB Host控制器了,上层是USB Host Controller Driver,该驱动负责和硬件通讯来传输数据,在WinCE中支持UHCI,OHCI和EHCI。Host Core Driver & Hub Driver是独立于硬件的USB协议栈,支持USB Host协议及USB Hub功能。最上层就是USB Host Class driver是USB Host的应用协议,目前在WinCE中,支持RNDIS,Print,Mass Storag
[单片机]
Linux 下使用s3c6410的post处理器的进行硬件缩放
在嵌入式下,在移植软件时经常会碰到这样的问题,就是显示分辩率的变化.一般软件往往针对桌面机的环境编译没有太多问题,但是在嵌入式环境下,受限的LCD显示有着很大的问题. 这种情况下,一种方法是修改代码,让其在嵌入式的LCD上显示.另外一种是使用软件进行显示缩放. 这两个方法只在部分条件有效,而且修改的工作量极大,更多情况是无法修改,比如SDL下的Dosbox是针对 640*480,修改源码的分辩率成 480*272 后,基本屏幕显示完全错位.软件无法正常运行. 这里有一种思路是使用s3c6410的post process.它是一个硬件进行图像和视频缩放的的模块.用POST后,只需要简单调整frame buffer显示库代码,即可
[单片机]
charishi thttpd 在S3C6410的移植-web服务程序的应用
1. 在VMWare 虚拟机上将arm-linux-gcc 4.3.1配置好; 2. 下载thttpd软件包并解压; 3. 在thttpd根目录下运行: ./configure; 4. 修改 Makefile文件 CC = gcc 替换为 CC = arm-linux-gcc,共3处,压缩根目录包1个,cgi-src目录1个,extras目录1个; 5. 执行make命令; 6. 将生成的 thttpd 复制到目标板 /usr/sbin 目录,contrib/redhat-rpm/thttpd.conf 复制到目标板 /etc 目录,并添加 thttpd 为可执行 chmod 777 thttpd; 7. 使用 vi
[单片机]
linux内核中S3C6410 timer相关代码理解
本文描述基于mini6410平台的time.c中的相关代码,主要描述下对部分代码的理解。 先贴上代码: 1 /* we use the shifted arithmetic to work out the ratio of timer ticks 2 * to usecs, as often the peripheral clock is not a nice even multiple 3 * of 1MHz. 4 * 5 * shift of 14 and 15 are too low for the 12MHz, 16 seems to be ok 6 * for the current HZ value
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved