Add reset controller, watchdog and memory controller I/O register definitions.
authorbatt <batt@38d2e660-2303-0410-9eaa-f027e97ec537>
Mon, 15 Oct 2007 16:02:38 +0000 (16:02 +0000)
committerbatt <batt@38d2e660-2303-0410-9eaa-f027e97ec537>
Mon, 15 Oct 2007 16:02:38 +0000 (16:02 +0000)
git-svn-id: https://src.develer.com/svnoss/bertos/trunk@881 38d2e660-2303-0410-9eaa-f027e97ec537

cpu/arm/io/at91_mc.h [new file with mode: 0644]
cpu/arm/io/at91_pmc.h
cpu/arm/io/at91_rstc.h [new file with mode: 0644]
cpu/arm/io/at91_wdt.h [new file with mode: 0644]
cpu/arm/io/at91sam7s.h

diff --git a/cpu/arm/io/at91_mc.h b/cpu/arm/io/at91_mc.h
new file mode 100644 (file)
index 0000000..c613c8b
--- /dev/null
@@ -0,0 +1,153 @@
+/**
+ * \file
+ * <!--
+ * This file is part of BeRTOS.
+ *
+ * Bertos 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 WARRANTY; 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * As a special exception, you may use this file as part of a free software
+ * library without restriction.  Specifically, if other files instantiate
+ * templates or use macros or inline functions from this file, or you compile
+ * this file and link it with other files to produce an executable, this
+ * file does not by itself cause the resulting executable to be covered by
+ * the GNU General Public License.  This exception does not however
+ * invalidate any other reasons why the executable file might be covered by
+ * the GNU General Public License.
+ *
+ * Copyright 2007 Develer S.r.l. (http://www.develer.com/)
+ *
+ * -->
+ *
+ * \version $Id$
+ *
+ * \author Francesco Sacchi <batt@develer.com>
+ *
+ * AT91 Memory controller.
+ * This file is based on NUT/OS implementation. See license below.
+ */
+
+/*
+ * Copyright (C) 2005-2006 by egnite Software GmbH. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the copyright holders nor the names of
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY EGNITE SOFTWARE GMBH AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL EGNITE
+ * SOFTWARE GMBH OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+ * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * For additional information see http://www.ethernut.de/
+ */
+
+#ifndef AT91_MC_H
+#define AT91_MC_H
+
+#define MC_RCR_OFF              0x00000000      ///< MC remap control register offset.
+#define MC_RCR      (*((volatile uint32_t *)(MC_BASE + MC_RCR_OFF)))      ///< MC remap control register address.
+#define MC_RCB                           0      ///< Remap command.
+
+#define MC_ASR_OFF              0x00000004      ///< MC abort status register offset.
+#define MC_ASR      (*((volatile uint32_t *)(MC_BASE + MC_ASR_OFF)))      ///< MC abort status register address.
+#define MC_UNDADD                        0      ///< Undefined Addess Abort status.
+#define MC_MISADD                        1      ///< Misaligned Addess Abort status.
+#define MC_ABTSZ_MASK           0x00000300      ///< Abort size status mask.
+#define MC_ABTSZ_BYTE           0x00000000      ///< Byte size abort.
+#define MC_ABTSZ_HWORD          0x00000100      ///< Half-word size abort.
+#define MC_ABTSZ_WORD           0x00000200      ///< Word size abort.
+#define MC_ABTTYP_MASK          0x00000C00      ///< Abort type status mask.
+#define MC_ABTTYP_DATAR         0x00000000      ///< Data read abort.
+#define MC_ABTTYP_DATAW         0x00000400      ///< Data write abort.
+#define MC_ABTTYP_FETCH         0x00000800      ///< Code fetch abort.
+#define MC_MST_PDC              0x00020000      ///< PDC abort source.
+#define MC_MST_ARM              0x00040000      ///< ARM abort source.
+#define MC_SVMST_PDC            0x02000000      ///< Saved PDC abort source.
+#define MC_SVMST_ARM            0x04000000      ///< Saved ARM abort source.
+
+#define MC_AASR_OFF             0x00000008      ///< MC abort address status register offset.
+#define MC_AASR     (*((volatile uint32_t *)(MC_BASE + MC_AASR_OFF)))     ///< MC abort address status register address.
+
+#define MC_FMR_OFF              0x00000060      ///< MC flash mode register offset.
+#define MC_FMR      (*((volatile uint32_t *)(MC_BASE + MC_FMR_OFF)))      ///< MC flash mode register address.
+#define MC_FRDY                          0      ///< Flash ready.
+#define MC_LOCKE                         2      ///< Lock error.
+#define MC_PROGE                         3      ///< Programming error.
+#define MC_NEBP                          7      ///< No erase before programming.
+#define MC_FWS_MASK             0x00000300      ///< Flash wait state mask.
+#define MC_FWS_1R2W             0x00000000      ///< 1 cycle for read, 2 for write operations.
+#define MC_FWS_2R3W             0x00000100      ///< 2 cycles for read, 3 for write operations.
+#define MC_FWS_3R4W             0x00000200      ///< 3 cycles for read, 4 for write operations.
+#define MC_FWS_4R4W             0x00000300      ///< 4 cycles for read and write operations.
+#define MC_FMCN_MASK            0x00FF0000      ///< Flash microsecond cycle number mask.
+
+#define MC_FCR_OFF              0x00000064      ///< MC flash command register offset.
+#define MC_FCR      (*((volatile uint32_t *)(MC_BASE + MC_FCR_OFF)))      ///< MC flash command register address.
+#define MC_FCMD_MASK            0x0000000F      ///< Flash command mask.
+#define MC_FCMD_NOP             0x00000000      ///< No command.
+#define MC_FCMD_WP              0x00000001      ///< Write page.
+#define MC_FCMD_SLB             0x00000002      ///< Set lock bit.
+#define MC_FCMD_WPL             0x00000003      ///< Write page and lock.
+#define MC_FCMD_CLB             0x00000004      ///< Clear lock bit.
+#define MC_FCMD_EA              0x00000008      ///< Erase all.
+#define MC_FCMD_SGPB            0x0000000B      ///< Set general purpose NVM bit.
+#define MC_FCMD_CGPB            0x0000000D      ///< Clear general purpose NVM bit.
+#define MC_FCMD_SSB             0x0000000F      ///< Set security bit.
+#define MC_PAGEN_MASK           0x0003FF00      ///< Page number mask.
+#define MC_KEY                  0x5A000000      ///< Writing protect key.
+
+#define MC_FSR_OFF              0x00000068      ///< MC flash status register offset.
+#define MC_FSR      (*((volatile uint32_t *)(MC_BASE + MC_FSR_OFF)))      ///< MC flash status register address.
+#define MC_SECURITY                      4      ///< Security bit status.
+
+#define MC_GPNVM0                        8      ///< General purpose NVM bit 0.
+#define MC_GPNVM1                        9      ///< General purpose NVM bit 1.
+#define MC_GPNVM2                       10      ///< General purpose NVM bit 2.
+
+#define MC_LOCKS0                       16      ///< Lock region 0 lock status.
+#define MC_LOCKS1                       17      ///< Lock region 1 lock status.
+#define MC_LOCKS2                       18      ///< Lock region 2 lock status.
+#define MC_LOCKS3                       19      ///< Lock region 3 lock status.
+#define MC_LOCKS4                       20      ///< Lock region 4 lock status.
+#define MC_LOCKS5                       21      ///< Lock region 5 lock status.
+#define MC_LOCKS6                       22      ///< Lock region 6 lock status.
+#define MC_LOCKS7                       23      ///< Lock region 7 lock status.
+#define MC_LOCKS8                       24      ///< Lock region 8 lock status.
+#define MC_LOCKS9                       25      ///< Lock region 9 lock status.
+#define MC_LOCKS10                      26      ///< Lock region 10 lock status.
+#define MC_LOCKS11                      27      ///< Lock region 11 lock status.
+#define MC_LOCKS12                      28      ///< Lock region 12 lock status.
+#define MC_LOCKS13                      29      ///< Lock region 13 lock status.
+#define MC_LOCKS14                      30      ///< Lock region 14 lock status.
+#define MC_LOCKS15                      31      ///< Lock region 15 lock status.
+
+#endif /* AT91_MC_H */
index e2f5b8646f89fd277d83eef6fa0a82ab13d3c43f..35ecd766995fe32530d2836357afb2ebdbd1fb8d 100644 (file)
 /** System Clock Enable, Disable and Status Register */
 /*\{*/
 #define PMC_SCER_OFF                0x00000000  ///< System clock enable register offset.
-#define PMC_SCER    (PMC_BASE + PMC_SCER_OFF)   ///< System clock enable register address.
+#define PMC_SCER    (*((volatile uint32_t *)(PMC_BASE + PMC_SCER_OFF)))   ///< System clock enable register address.
 #define PMC_SCDR_OFF                0x00000004  ///< System clock disable register offset.
-#define PMC_SCDR    (PMC_BASE + PMC_SCDR_OFF)   ///< System clock disable register address.
+#define PMC_SCDR    (*((volatile uint32_t *)(PMC_BASE + PMC_SCDR_OFF)))   ///< System clock disable register address.
 #define PMC_SCSR_OFF                0x00000008  ///< System clock status register offset.
-#define PMC_SCSR    (PMC_BASE + PMC_SCSR_OFF)   ///< System clock status register address.
+#define PMC_SCSR    (*((volatile uint32_t *)(PMC_BASE + PMC_SCSR_OFF)))   ///< System clock status register address.
 
 #define PMC_PCK                              0  ///< Processor clock.
 #define PMC_UDP                              7  ///< USB device port clock.
 /** Peripheral Clock Enable, Disable and Status Register */
 /*\{*/
 #define PMC_PCER_OFF                0x00000010  ///< Peripheral clock enable register offset.
-#define PMC_PCER    (PMC_BASE + PMC_PCER_OFF)   ///< Peripheral clock enable register address.
+#define PMC_PCER    (*((volatile uint32_t *)(PMC_BASE + PMC_PCER_OFF)))   ///< Peripheral clock enable register address.
 #define PMC_PCDR_OFF                0x00000014  ///< Peripheral clock disable register offset.
-#define PMC_PCDR    (PMC_BASE + PMC_PCDR_OFF)   ///< Peripheral clock disable register address.
+#define PMC_PCDR    (*((volatile uint32_t *)(PMC_BASE + PMC_PCDR_OFF)))   ///< Peripheral clock disable register address.
 #define PMC_PCSR_OFF                0x00000018  ///< Peripheral clock status register offset.
-#define PMC_PCSR    (PMC_BASE + PMC_PCSR_OFF)   ///< Peripheral clock status register address.
+#define PMC_PCSR    (*((volatile uint32_t *)(PMC_BASE + PMC_PCSR_OFF)))   ///< Peripheral clock status register address.
 /*\}*/
 
 /** Clock Generator Main Oscillator Register */
 /*\{*/
 #define CKGR_MOR_OFF                0x00000020  ///< Main oscillator register offset.
-#define CKGR_MOR    (PMC_BASE + CKGR_MOR_OFF)   ///< Main oscillator register address.
+#define CKGR_MOR    (*((volatile uint32_t *)(PMC_BASE + CKGR_MOR_OFF)))   ///< Main oscillator register address.
 
 #define CKGR_MOSCEN                          0  ///< Main oscillator enable.
 #define CKGR_OSCBYPASS                       1  ///< Main oscillator bypass.
 /** Clock Generator Main Clock Frequency Register */
 /*\{*/
 #define CKGR_MCFR_OFF               0x00000024  ///< Main clock frequency register offset.
-#define CKGR_MCFR   (PMC_BASE + CKGR_MCFR_OFF)  ///< Main clock frequency register address.
+#define CKGR_MCFR   (*((volatile uint32_t *)(PMC_BASE + CKGR_MCFR_OFF)))  ///< Main clock frequency register address.
 
 #define CKGR_MAINF_MASK             0x0000FFFF  ///< Main clock frequency mask mask.
 #define CKGR_MAINRDY                        16  ///< Main clock ready.
 /** PLL Registers */
 /*\{*/
 #define CKGR_PLLR_OFF               0x0000002C  ///< Clock generator PLL register offset.
-#define CKGR_PLLR   (PMC_BASE + CKGR_PLLR_OFF)  ///< Clock generator PLL register address.
+#define CKGR_PLLR   (*((volatile uint32_t *)(PMC_BASE + CKGR_PLLR_OFF)))  ///< Clock generator PLL register address.
 
 #define CKGR_DIV_MASK               0x000000FF  ///< Divider.
 #define CKGR_DIV_SHIFT                       0  ///< Least significant bit of the divider.
 /** Master Clock Register */
 /*\{*/
 #define PMC_MCKR_OFF                0x00000030  ///< Master clock register offset.
-#define PMC_MCKR    (PMC_BASE + PMC_MCKR_OFF)   ///< Master clock register address.
+#define PMC_MCKR    (*((volatile uint32_t *)(PMC_BASE + PMC_MCKR_OFF)))   ///< Master clock register address.
 
 #define PMC_PCKR0_OFF               0x00000040  ///< Programmable clock 0 register offset.
-#define PMC_PCKR0   (PMC_BASE + PMC_PCKR0_OFF)  ///< Programmable clock 0 register address.
+#define PMC_PCKR0   (*((volatile uint32_t *)(PMC_BASE + PMC_PCKR0_OFF)))  ///< Programmable clock 0 register address.
 #define PMC_PCKR1_OFF               0x00000044  ///< Programmable clock 1 register offset.
-#define PMC_PCKR1   (PMC_BASE + PMC_PCKR1_OFF)  ///< Programmable clock 1 register address.
+#define PMC_PCKR1   (*((volatile uint32_t *)(PMC_BASE + PMC_PCKR1_OFF)))  ///< Programmable clock 1 register address.
 #define PMC_PCKR2_OFF               0x00000048  ///< Programmable clock 2 register offset.
-#define PMC_PCKR2   (PMC_BASE + PMC_PCKR2_OFF)  ///< Programmable clock 2 register address.
+#define PMC_PCKR2   (*((volatile uint32_t *)(PMC_BASE + PMC_PCKR2_OFF)))  ///< Programmable clock 2 register address.
 
 #define PMC_CSS_MASK                0x00000003  ///< Clock selection mask.
 #define PMC_CSS_SLOW_CLK            0x00000000  ///< Slow clock selected.
 /** Power Management Status and Interrupt Registers */
 /*\{*/
 #define PMC_IER_OFF                 0x00000060  ///< Interrupt enable register offset.
-#define PMC_IER     (PMC_BASE + PMC_IER_OFF)    ///< Interrupt enable register address.
+#define PMC_IER     (*((volatile uint32_t *)(PMC_BASE + PMC_IER_OFF)))    ///< Interrupt enable register address.
 #define PMC_IDR_OFF                 0x00000064  ///< Interrupt disable register offset.
-#define PMC_IDR     (PMC_BASE + PMC_IDR_OFF)    ///< Interrupt disable register address.
+#define PMC_IDR     (*((volatile uint32_t *)(PMC_BASE + PMC_IDR_OFF)))    ///< Interrupt disable register address.
 #define PMC_SR_OFF                  0x00000068  ///< Status register offset.
-#define PMC_SR      (PMC_BASE + PMC_SR_OFF)     ///< Status register address.
+#define PMC_SR      (*((volatile uint32_t *)(PMC_BASE + PMC_SR_OFF)))     ///< Status register address.
 #define PMC_IMR_OFF                 0x0000006C  ///< Interrupt mask register offset.
-#define PMC_IMR     (PMC_BASE + PMC_IMR_OFF)    ///< Interrupt mask register address.
+#define PMC_IMR     (*((volatile uint32_t *)(PMC_BASE + PMC_IMR_OFF)))    ///< Interrupt mask register address.
 
 #define PMC_MOSCS                            0  ///< Main oscillator.
 #define PMC_LOCK                             2  ///< PLL lock.
diff --git a/cpu/arm/io/at91_rstc.h b/cpu/arm/io/at91_rstc.h
new file mode 100644 (file)
index 0000000..7e4c1a7
--- /dev/null
@@ -0,0 +1,112 @@
+/**
+ * \file
+ * <!--
+ * This file is part of BeRTOS.
+ *
+ * Bertos 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 WARRANTY; 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * As a special exception, you may use this file as part of a free software
+ * library without restriction.  Specifically, if other files instantiate
+ * templates or use macros or inline functions from this file, or you compile
+ * this file and link it with other files to produce an executable, this
+ * file does not by itself cause the resulting executable to be covered by
+ * the GNU General Public License.  This exception does not however
+ * invalidate any other reasons why the executable file might be covered by
+ * the GNU General Public License.
+ *
+ * Copyright 2007 Develer S.r.l. (http://www.develer.com/)
+ *
+ * -->
+ *
+ * \version $Id$
+ *
+ * \author Francesco Sacchi <batt@develer.com>
+ *
+ * AT91 reset controller.
+ * This file is based on NUT/OS implementation. See license below.
+ */
+
+/*
+ * Copyright (C) 2005-2006 by egnite Software GmbH. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the copyright holders nor the names of
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY EGNITE SOFTWARE GMBH AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL EGNITE
+ * SOFTWARE GMBH OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+ * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * For additional information see http://www.ethernut.de/
+ */
+
+#ifndef AT91_RTSC_H
+#define AT91_RTSC_H
+
+/** Reset Controller Control Register */
+/*\{*/
+#define RSTC_CR         (*((volatile uint32_t *)(RSTC_BASE + 0x00)))      ///< Reset controller control register address.
+#define RSTC_PROCRST                     0  ///< Processor reset.
+#define RSTC_PERRST                      2  ///< Peripheral reset.
+#define RSTC_EXTRST                      3  ///< External reset.
+#define RSTC_KEY                0xA5000000  ///< Password.
+/*\}*/
+
+/** Reset Controller Status Register */
+/*\{*/
+#define RSTC_SR         (*((volatile uint32_t *)(RSTC_BASE + 0x04)))      ///< Reset controller status register address.
+#define RSTC_URSTS                       0  ///< User reset status.
+#define RSTC_BODSTS                      1  ///< Brownout detection status.
+#define RSTC_RSTTYP_MASK        0x00000700  ///< Reset type.
+#define RSTC_RSTTYP_POWERUP     0x00000000  ///< Power-up reset.
+//#define RSTC_RSTTYP_WAKEUP      0x00000100      ///< VDDCORE rising.
+#define RSTC_RSTTYP_WATCHDOG    0x00000200  ///< Watchdog reset.
+#define RSTC_RSTTYP_SOFTWARE    0x00000300  ///< Software reset.
+#define RSTC_RSTTYP_USER        0x00000400  ///< User reset.
+#define RSTC_RSTTYP_BROWNOUT    0x00000500  ///< Brownout reset.
+#define RSTC_NRSTL                      16  ///< NRST pin level.
+#define RSTC_SRCMP                      17  ///< Software reset command in progress.
+/*\}*/
+
+/** Reset Controller Mode Register */
+/*\{*/
+#define RSTC_MR         (*((volatile uint32_t *)(RSTC_BASE + 0x08)))      ///< Reset controller mode register address.
+#define RSTC_URSTEN                      0  ///< User reset enable.
+#define RSTC_URSTIEN                     4  ///< User reset interrupt enable.
+#define RSTC_ERSTL_MASK         0x00000F00  ///< External reset length.
+#define RSTC_ERSTL_SHIFT                 8  ///< Least significant bit of external reset length.
+#define RSTC_BODIEN                     16  ///< Brown-out detection interrupt enable.
+/*\}*/
+
+
+#endif /* AT91_RTSC_H */
diff --git a/cpu/arm/io/at91_wdt.h b/cpu/arm/io/at91_wdt.h
new file mode 100644 (file)
index 0000000..093e7a6
--- /dev/null
@@ -0,0 +1,111 @@
+/**
+ * \file
+ * <!--
+ * This file is part of BeRTOS.
+ *
+ * Bertos 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 WARRANTY; 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * As a special exception, you may use this file as part of a free software
+ * library without restriction.  Specifically, if other files instantiate
+ * templates or use macros or inline functions from this file, or you compile
+ * this file and link it with other files to produce an executable, this
+ * file does not by itself cause the resulting executable to be covered by
+ * the GNU General Public License.  This exception does not however
+ * invalidate any other reasons why the executable file might be covered by
+ * the GNU General Public License.
+ *
+ * Copyright 2007 Develer S.r.l. (http://www.develer.com/)
+ *
+ * -->
+ *
+ * \version $Id$
+ *
+ * \author Francesco Sacchi <batt@develer.com>
+ *
+ * AT91 Watchdog.
+ * This file is based on NUT/OS implementation. See license below.
+ */
+
+
+/*
+ * Copyright (C) 2005-2006 by egnite Software GmbH. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the copyright holders nor the names of
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY EGNITE SOFTWARE GMBH AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL EGNITE
+ * SOFTWARE GMBH OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+ * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * For additional information see http://www.ethernut.de/
+ */
+
+#ifndef AT91_WDT_H
+#define AT91_WDT_H
+
+
+/** Watch Dog Control Register */
+/*\{*/
+#define WDT_CR_OFF          0x00000000  ///< Watchdog control register offset.
+#define WDT_CR  (*((volatile uint32_t *)(WDT_BASE + WDT_CR_OFF))) ///< Watchdog control register address.
+#define WDT_WDRSTT                   0  ///< Watchdog restart.
+#define WDT_KEY             0xA5000000  ///< Watchdog password.
+/*\}*/
+
+/** Watch Dog Mode Register */
+/*\{*/
+#define WDT_MR_OFF          0x00000004  ///< Mode register offset.
+#define WDT_MR  (*((volatile uint32_t *)(WDT_BASE + WDT_MR_OFF))) ///< Mode register address.
+#define WDT_WDV_MASK        0x00000FFF  ///< Counter value mask.
+#define WDT_WDV_SHIFT                0  ///< Counter value LSB.
+#define WDT_WDFIEN                  12  ///< Fault interrupt enable.
+#define WDT_WDRSTEN                 13  ///< Reset enable.
+#define WDT_WDRPROC                 14  ///< Eset processor enable.
+#define WDT_WDDIS                   15  ///< Watchdog disable.
+#define WDT_WDD_MASK        0x0FFF0000  ///< Delta value mask.
+#define WDT_WDD_SHIFT               16  ///< Delta value LSB.
+#define WDT_WDDBGHLT                28  ///< Watchdog debug halt.
+#define WDT_WDIDLEHLT               29  ///< Watchdog idle halt.
+/*\}*/
+
+/** Watch Dog Status Register */
+/*\{*/
+#define WDT_SR_OFF          0x00000008  ///< Status register offset.
+#define WDT_SR  (*((volatile uint32_t *)(WDT_BASE + WDT_SR_OFF))) ///< Status register address.
+#define WDT_WDUNF                    0  ///< Watchdog underflow.
+#define WDT_WDERR                    1  ///< Watchdog error.
+/*\}*/
+
+
+#endif /* AT91_WDT_H */
index c3b93ca09ee0e9ed0789f90b89caadf0bc21016f..073ca075de11111211624eacfd7338f3599adc1b 100644 (file)
 #include "at91_aic.h"
 #include "at91_pit.h"
 #include "at91_pmc.h"
+#include "at91_mc.h"
+#include "at91_wdt.h"
+#include "at91_rstc.h"
 //TODO: add other peripherals
 
 /** Peripheral Identifiers and Interrupts */