summaryrefslogtreecommitdiff
path: root/nuttx/arch/arm/src/sam3u/chip/sam_pwm.h
diff options
context:
space:
mode:
Diffstat (limited to 'nuttx/arch/arm/src/sam3u/chip/sam_pwm.h')
-rw-r--r--nuttx/arch/arm/src/sam3u/chip/sam_pwm.h633
1 files changed, 633 insertions, 0 deletions
diff --git a/nuttx/arch/arm/src/sam3u/chip/sam_pwm.h b/nuttx/arch/arm/src/sam3u/chip/sam_pwm.h
new file mode 100644
index 000000000..d13677d56
--- /dev/null
+++ b/nuttx/arch/arm/src/sam3u/chip/sam_pwm.h
@@ -0,0 +1,633 @@
+/****************************************************************************************
+ * arch/arm/src/sam3u/chip/sam_pwm.h
+ *
+ * Copyright (C) 2009, 2013 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * 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 NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 THE
+ * COPYRIGHT OWNER 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.
+ *
+ ****************************************************************************************/
+
+#ifndef __ARCH_ARM_SRC_SAM3U_CHIP_SAM_PWM_H
+#define __ARCH_ARM_SRC_SAM3U_CHIP_SAM_PWM_H
+
+/****************************************************************************************
+ * Included Files
+ ****************************************************************************************/
+
+#include <nuttx/config.h>
+
+#include "chip.h"
+#include "chip/sam_memorymap.h"
+
+/****************************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************************/
+
+/* PWM register offsets *****************************************************************/
+
+#define SAM_PWM_CLK_OFFSET 0x000 /* PWM Clock Register */
+#define SAM_PWM_ENA_OFFSET 0x004 /* PWM Enable Register */
+#define SAM_PWM_DIS_OFFSET 0x008 /* PWM Disable Register */
+#define SAM_PWM_SR_OFFSET 0x00c /* PWM Status Register */
+#define SAM_PWM_IER1_OFFSET 0x010 /* PWM Interrupt Enable Register 1 */
+#define SAM_PWM_IDR1_OFFSET 0x014 /* PWM Interrupt Disable Register 1 */
+#define SAM_PWM_IMR1_OFFSET 0x018 /* PWM Interrupt Mask Register 1 */
+#define SAM_PWM_ISR1_OFFSET 0x01c /* PWM Interrupt Status Register 1 */
+#define SAM_PWM_SCM_OFFSET 0x020 /* PWM Sync Channels Mode Register */
+ /* 0x024: Reserved */
+#define SAM_PWM_SCUC_OFFSET 0x028 /* PWM Sync Channels Update Control Register */
+#define SAM_PWM_SCUP_OFFSET 0x02c /* PWM Sync Channels Update Period Register */
+#define SAM_PWM_SCUPUPD_OFFSET 0x030 /* PWM Sync Channels Update Period Update Register */
+#define SAM_PWM_IER2_OFFSET 0x034 /* PWM Interrupt Enable Register 2 */
+#define SAM_PWM_IDR2_OFFSET 0x038 /* PWM Interrupt Disable Register 2 */
+#define SAM_PWM_IMR2_OFFSET 0x03c /* PWM Interrupt Mask Register 2 */
+#define SAM_PWM_ISR2_OFFSET 0x040 /* PWM Interrupt Status Register 2 */
+#define SAM_PWM_OOV_OFFSET 0x044 /* PWM Output Override Value Register */
+#define SAM_PWM_OS_OFFSET 0x048 /* PWM Output Selection Register */
+#define SAM_PWM_OSS_OFFSET 0x04c /* PWM Output Selection Set Register */
+#define SAM_PWM_OSC_OFFSET 0x050 /* PWM Output Selection Clear Register */
+#define SAM_PWM_OSSUPD_OFFSET 0x054 /* PWM Output Selection Set Update Register */
+#define SAM_PWM_OSCUPD_OFFSET 0x058 /* PWM Output Selection Clear Update Register */
+#define SAM_PWM_FMR_OFFSET 0x05c /* PWM Fault Mode Register */
+#define SAM_PWM_FSR_OFFSET 0x060 /* PWM Fault Status Register */
+#define SAM_PWM_FCR_OFFSET 0x064 /* PWM Fault Clear Register */
+#define SAM_PWM_FPV_OFFSET 0x068 /* PWM Fault Protection Value Register */
+#define SAM_PWM_FPE_OFFSET 0x06c /* PWM Fault Protection Enable Register */
+ /* 0x070-0x078: Reserved */
+#define SAM_PWM_EL0MR_OFFSET 0x07c /* PWM Event Line 0 Mode Register */
+#define SAM_PWM_EL1MR_OFFSET 0x080 /* PWM Event Line 1 Mode Register */
+ /* 0x084-0x0ac: Reserved */
+ /* 0x0b4-0x0e0: Reserved */
+#define SAM_PWM_WPCR_OFFSET 0x0e4 /* PWM Write Protect Control Register */
+#define SAM_PWM_WPSR_OFFSET 0x0e8 /* PWM Write Protect Status Register */
+ /* 0x100-0x128: Reserved for PDC registers */
+ /* 0x12c: Reserved */
+/* PWM Comparison Registers */
+
+#define SAM_PWMCMP_OFFSET(n) (0x130+((n)<<4))
+#define SAM_PWMCMP_V_OFFSET 0x00 /* PWM Comparison Value Register */
+#define SAM_PWMCMP_VUPD_OFFSET 0x04 /* PWM Comparison Value Update Register */
+#define SAM_PWMCMP_M_OFFSET 0x08 /* PWM Comparison Mode Register */
+#define SAM_PWMCMP_MUPD_OFFSET 0x0c /* PWM Comparison Mode Update Register */
+
+#define SAM_PWMCMP0_V_OFFSET 0x130 /* PWM Comparison 0 Value Register */
+#define SAM_PWMCMP0_VUPD_OFFSET 0x134 /* PWM Comparison 0 Value Update Register */
+#define SAM_PWMCMP0_M_OFFSET 0x138 /* PWM Comparison 0 Mode Register */
+#define SAM_PWMCMP0_MUPD_OFFSET 0x13c /* PWM Comparison 0 Mode Update Register */
+
+#define SAM_PWMCMP1_V_OFFSET 0x140 /* PWM Comparison 1 Value Register */
+#define SAM_PWMCMP1_VUPD_OFFSET 0x144 /* PWM Comparison 1 Value Update Register */
+#define SAM_PWMCMP1_M_OFFSET 0x148 /* PWM Comparison 1 Mode Register */
+#define SAM_PWMCMP1_MUPD_OFFSET 0x14c /* PWM Comparison 1 Mode Update Register */
+
+#define SAM_PWMCMP2_V_OFFSET 0x150 /* PWM Comparison 2 Value Register */
+#define SAM_PWMCMP2_VUPD_OFFSET 0x154 /* PWM Comparison 2 Value Update Register */
+#define SAM_PWMCMP2_M_OFFSET 0x158 /* PWM Comparison 2 Mode Register */
+#define SAM_PWMCMP2_MUPD_OFFSET 0x15c /* PWM Comparison 2 Mode Update Register */
+
+#define SAM_PWMCMP3_V_OFFSET 0x160 /* PWM Comparison 3 Value Register */
+#define SAM_PWMCMP3_VUPD_OFFSET 0x164 /* PWM Comparison 3 Value Update Register */
+#define SAM_PWMCMP3_M_OFFSET 0x168 /* PWM Comparison 3 Mode Register */
+#define SAM_PWMCMP3_MUPD_OFFSET 0x16c /* PWM Comparison 3 Mode Update Register */
+
+#define SAM_PWMCMP4_V_OFFSET 0x170 /* PWM Comparison 4 Value Register */
+#define SAM_PWMCMP4_VUPD_OFFSET 0x174 /* PWM Comparison 4 Value Update Register */
+#define SAM_PWMCMP4_M_OFFSET 0x178 /* PWM Comparison 4 Mode Register */
+#define SAM_PWMCMP4_MUPD_OFFSET 0x17c /* PWM Comparison 4 Mode Update Register */
+
+#define SAM_PWMCMP5_V_OFFSET 0x180 /* PWM Comparison 5 Value Register */
+#define SAM_PWMCMP5_VUPD_OFFSET 0x184 /* PWM Comparison 5 Value Update Register */
+#define SAM_PWMCMP5_M_OFFSET 0x188 /* PWM Comparison 5 Mode Register */
+#define SAM_PWMCMP5_MUPD_OFFSET 0x18c /* PWM Comparison 5 Mode Update Register */
+
+#define SAM_PWMCMP6_V_OFFSET 0x190 /* PWM Comparison 6 Value Register */
+#define SAM_PWMCMP6_VUPD_OFFSET 0x194 /* PWM Comparison 6 Value Update Register */
+#define SAM_PWMCMP6_M_OFFSET 0x198 /* PWM Comparison 6 Mode Register */
+#define SAM_PWMCMP6_MUPD_OFFSET 0x19c /* PWM Comparison 6 Mode Update Register */
+
+#define SAM_PWMCMP7_V_OFFSET 0x1a0 /* PWM Comparison 7 Value Register */
+#define SAM_PWMCMP7_VUPD_OFFSET 0x1a4 /* PWM Comparison 7 Value Update Register */
+#define SAM_PWMCMP7_M_OFFSET 0x1a8 /* PWM Comparison 7 Mode Register */
+#define SAM_PWMCMP7_MUPD_OFFSET 0x1ac /* PWM Comparison 7 Mode Update Register */
+ /* 0x1b0-0x1fc: Reserved */
+/* PWM Channel Registers */
+
+#define SAM_PWMCH_OFFSET(n) (0x200+((n)<< 5))
+#define SAM_PWMCH_MR_OFFSET 0x00 /* PWM Channel Mode Register */
+#define SAM_PWMCH_DTY_OFFSET 0x04 /* PWM Channel Duty Cycle Register */
+#define SAM_PWMCH_DTYUPD_OFFSET 0x08 /* PWM Channel Duty Cycle Update Register */
+#define SAM_PWMCH_PRD_OFFSET 0x0c /* PWM Channel Period Register */
+#define SAM_PWMCH_PRDUPD_OFFSET 0x10 /* PWM Channel Period Update Register */
+#define SAM_PWMCH_CCNT_OFFSET 0x14 /* PWM Channel Counter Register */
+#define SAM_PWMCH_DT_OFFSET 0x18 /* PWM Channel Dead Time Register */
+#define SAM_PWMCH_DTUPD_OFFSET 0x1c /* PWM Channel Dead Time Update Register */
+
+#define SAM_PWMCH0_MR_OFFSET 0x200 /* PWM Channel 0 Mode Register */
+#define SAM_PWMCH0_DTY_OFFSET 0x204 /* PWM Channel 0 Duty Cycle Register */
+#define SAM_PWMCH0_DTYUPD_OFFSET 0x208 /* PWM Channel 0 Duty Cycle Update Register */
+#define SAM_PWMCH0_PRD_OFFSET 0x20c /* PWM Channel 0 Period Register */
+#define SAM_PWMCH0_PRDUPD_OFFSET 0x210 /* PWM Channel 0 Period Update Register */
+#define SAM_PWMCH0_CCNT_OFFSET 0x214 /* PWM Channel 0 Counter Register */
+#define SAM_PWMCH0_DT_OFFSET 0x218 /* PWM Channel 0 Dead Time Register */
+#define SAM_PWMCH0_DTUPD_OFFSET 0x21c /* PWM Channel 0 Dead Time Update Register */
+
+#define SAM_PWMCH1_MR_OFFSET 0x220 /* PWM Channel 1 Mode Register */
+#define SAM_PWMCH1_DTY_OFFSET 0x224 /* PWM Channel 1 Duty Cycle Register */
+#define SAM_PWMCH1_DTYUPD_OFFSET 0x228 /* PWM Channel 1 Duty Cycle Update Register */
+#define SAM_PWMCH1_PRD_OFFSET 0x22c /* PWM Channel 1 Period Register */
+#define SAM_PWMCH1_PRDUPD_OFFSET 0x230 /* PWM Channel 1 Period Update Register */
+#define SAM_PWMCH1_CCNT_OFFSET 0x234 /* PWM Channel 1 Counter Register */
+#define SAM_PWMCH1_DT_OFFSET 0x238 /* PWM Channel 1 Dead Time Register */
+#define SAM_PWMCH1_DTUPD_OFFSET 0x23c /* PWM Channel 1 Dead Time Update Register */
+
+#define SAM_PWMCH2_MR_OFFSET 0x240 /* PWM Channel 2 Mode Register */
+#define SAM_PWMCH2_DTY_OFFSET 0x244 /* PWM Channel 2 Duty Cycle Register */
+#define SAM_PWMCH2_DTYUPD_OFFSET 0x248 /* PWM Channel 2 Duty Cycle Update Register */
+#define SAM_PWMCH2_PRD_OFFSET 0x24c /* PWM Channel 2 Period Register */
+#define SAM_PWMCH2_PRDUPD_OFFSET 0x250 /* PWM Channel 2 Period Update Register */
+#define SAM_PWMCH2_CCNT_OFFSET 0x254 /* PWM Channel 2 Counter Register */
+#define SAM_PWMCH2_DT_OFFSET 0x258 /* PWM Channel 2 Dead Time Register */
+#define SAM_PWMCH2_DTUPD_OFFSET 0x25c /* PWM Channel 2 Dead Time Update Register */
+
+#define SAM_PWMCH3_MR_OFFSET 0x260 /* PWM Channel 3 Mode Register */
+#define SAM_PWMCH3_DTY_OFFSET 0x264 /* PWM Channel 3 Duty Cycle Register */
+#define SAM_PWMCH3_DTYUPD_OFFSET 0x268 /* PWM Channel 3 Duty Cycle Update Register */
+#define SAM_PWMCH3_PRD_OFFSET 0x26c /* PWM Channel 3 Period Register */
+#define SAM_PWMCH3_PRDUPD_OFFSET 0x270 /* PWM Channel 3 Period Update Register */
+#define SAM_PWMCH3_CCNT_OFFSET 0x274 /* PWM Channel 3 Counter Register */
+#define SAM_PWMCH3_DT_OFFSET 0x278 /* PWM Channel 3 Dead Time Register */
+#define SAM_PWMCH3_DTUPD_OFFSET 0x27c /* PWM Channel 3 Dead Time Update Register */
+
+/* PWM register adresses ****************************************************************/
+
+#define SAM_PWM_CLK (SAM_PWM_BASE+SAM_PWM_CLK_OFFSET)
+#define SAM_PWM_ENA (SAM_PWM_BASE+SAM_PWM_ENA_OFFSET)
+#define SAM_PWM_DIS (SAM_PWM_BASE+SAM_PWM_DIS_OFFSET)
+#define SAM_PWM_SR (SAM_PWM_BASE+SAM_PWM_SR_OFFSET)
+#define SAM_PWM_IER1 (SAM_PWM_BASE+SAM_PWM_IER1_OFFSET)
+#define SAM_PWM_IDR1 (SAM_PWM_BASE+SAM_PWM_IDR1_OFFSET)
+#define SAM_PWM_IMR1 (SAM_PWM_BASE+SAM_PWM_IMR1_OFFSET)
+#define SAM_PWM_ISR1 (SAM_PWM_BASE+SAM_PWM_ISR1_OFFSET)
+#define SAM_PWM_SCM (SAM_PWM_BASE+SAM_PWM_SCM_OFFSET)
+#define SAM_PWM_SCUC (SAM_PWM_BASE+SAM_PWM_SCUC_OFFSET)
+#define SAM_PWM_SCUP (SAM_PWM_BASE+SAM_PWM_SCUP_OFFSET)
+#define SAM_PWM_SCUPUPD (SAM_PWM_BASE+SAM_PWM_SCUPUPD_OFFSET)
+#define SAM_PWM_IER2 (SAM_PWM_BASE+SAM_PWM_IER2_OFFSET)
+#define SAM_PWM_IDR2 (SAM_PWM_BASE+SAM_PWM_IDR2_OFFSET)
+#define SAM_PWM_IMR2 (SAM_PWM_BASE+SAM_PWM_IMR2_OFFSET)
+#define SAM_PWM_ISR2 (SAM_PWM_BASE+SAM_PWM_ISR2_OFFSET)
+#define SAM_PWM_OOV (SAM_PWM_BASE+SAM_PWM_OOV_OFFSET)
+#define SAM_PWM_OS (SAM_PWM_BASE+SAM_PWM_OS_OFFSET)
+#define SAM_PWM_OSS (SAM_PWM_BASE+SAM_PWM_OSS_OFFSET)
+#define SAM_PWM_OSC (SAM_PWM_BASE+SAM_PWM_OSC_OFFSET)
+#define SAM_PWM_OSSUPD (SAM_PWM_BASE+SAM_PWM_OSSUPD_OFFSET)
+#define SAM_PWM_OSCUPD (SAM_PWM_BASE+SAM_PWM_OSCUPD_OFFSET)
+#define SAM_PWM_FMR (SAM_PWM_BASE+SAM_PWM_FMR_OFFSET)
+#define SAM_PWM_FSR (SAM_PWM_BASE+SAM_PWM_FSR_OFFSET)
+#define SAM_PWM_FCR (SAM_PWM_BASE+SAM_PWM_FCR_OFFSET)
+#define SAM_PWM_FPV (SAM_PWM_BASE+SAM_PWM_FPV_OFFSET)
+#define SAM_PWM_FPE (SAM_PWM_BASE+SAM_PWM_FPE_OFFSET)
+#define SAM_PWM_EL0MR (SAM_PWM_BASE+SAM_PWM_EL0MR_OFFSET)
+#define SAM_PWM_EL1MR (SAM_PWM_BASE+SAM_PWM_EL1MR_OFFSET)
+#define SAM_PWM_WPCR (SAM_PWM_BASE+SAM_PWM_WPCR_OFFSET)
+#define SAM_PWM_WPSR (SAM_PWM_BASE+SAM_PWM_WPSR_OFFSET)
+
+/* PWM Comparison Registers */
+
+#define SAM_PWCMP_BASE(n) (SAM_PWM_BASE+SAM_PWCMP_OFFSET(n))
+#define SAM_PWMCMP0_BASE (SAM_PWM_BASE+0x0130)
+#define SAM_PWMCMP1_BASE (SAM_PWM_BASE+0x0140)
+#define SAM_PWMCMP2_BASE (SAM_PWM_BASE+0x0150)
+#define SAM_PWMCMP3_BASE (SAM_PWM_BASE+0x0160)
+#define SAM_PWMCMP4_BASE (SAM_PWM_BASE+0x0170)
+#define SAM_PWMCMP5_BASE (SAM_PWM_BASE+0x0180)
+#define SAM_PWMCMP6_BASE (SAM_PWM_BASE+0x0190)
+#define SAM_PWMCMP7_BASE (SAM_PWM_BASE+0x01a0)
+
+#define SAM_PWMCMP0_V (SAM_PWMCMP0_BASE+SAM_PWMCMP_V_OFFSET)
+#define SAM_PWMCMP0_VUPD (SAM_PWMCMP0_BASE+SAM_PWMCMP_VUPD_OFFSET)
+#define SAM_PWMCMP0_M (SAM_PWMCMP0_BASE+SAM_PWMCMP_M_OFFSET)
+#define SAM_PWMCMP0_MUPD (SAM_PWMCMP0_BASE+SAM_PWMCMP_MUPD_OFFSET)
+
+#define SAM_PWMCMP1_V (SAM_PWMCMP1_BASE+SAM_PWMCMP_V_OFFSET)
+#define SAM_PWMCMP1_VUPD (SAM_PWMCMP1_BASE+SAM_PWMCMP_VUPD_OFFSET)
+#define SAM_PWMCMP1_M (SAM_PWMCMP1_BASE+SAM_PWMCMP_M_OFFSET)
+#define SAM_PWMCMP1_MUPD (SAM_PWMCMP1_BASE+SAM_PWMCMP_MUPD_OFFSET)
+
+#define SAM_PWMCMP2_V (SAM_PWMCMP2_BASE+SAM_PWMCMP_V_OFFSET)
+#define SAM_PWMCMP2_VUPD (SAM_PWMCMP2_BASE+SAM_PWMCMP_VUPD_OFFSET)
+#define SAM_PWMCMP2_M (SAM_PWMCMP2_BASE+SAM_PWMCMP_M_OFFSET)
+#define SAM_PWMCMP2_MUPD (SAM_PWMCMP2_BASE+SAM_PWMCMP_MUPD_OFFSET)
+
+#define SAM_PWMCMP3_V (SAM_PWMCMP3_BASE+SAM_PWMCMP_V_OFFSET)
+#define SAM_PWMCMP3_VUPD (SAM_PWMCMP3_BASE+SAM_PWMCMP_VUPD_OFFSET)
+#define SAM_PWMCMP3_M (SAM_PWMCMP3_BASE+SAM_PWMCMP_M_OFFSET)
+#define SAM_PWMCMP3_MUPD (SAM_PWMCMP3_BASE+SAM_PWMCMP_MUPD_OFFSET)
+
+#define SAM_PWMCMP4_V (SAM_PWMCMP4_BASE+SAM_PWMCMP_V_OFFSET)
+#define SAM_PWMCMP4_VUPD (SAM_PWMCMP4_BASE+SAM_PWMCMP_VUPD_OFFSET)
+#define SAM_PWMCMP4_M (SAM_PWMCMP4_BASE+SAM_PWMCMP_M_OFFSET)
+#define SAM_PWMCMP4_MUPD (SAM_PWMCMP4_BASE+SAM_PWMCMP_MUPD_OFFSET)
+
+#define SAM_PWMCMP5_V (SAM_PWMCMP5_BASE+SAM_PWMCMP_V_OFFSET)
+#define SAM_PWMCMP5_VUPD (SAM_PWMCMP5_BASE+SAM_PWMCMP_VUPD_OFFSET)
+#define SAM_PWMCMP5_M (SAM_PWMCMP5_BASE+SAM_PWMCMP_M_OFFSET)
+#define SAM_PWMCMP5_MUPD (SAM_PWMCMP5_BASE+SAM_PWMCMP_MUPD_OFFSET)
+
+#define SAM_PWMCMP6_V (SAM_PWMCMP6_BASE+SAM_PWMCMP_V_OFFSET)
+#define SAM_PWMCMP6_VUPD (SAM_PWMCMP6_BASE+SAM_PWMCMP_VUPD_OFFSET)
+#define SAM_PWMCMP6_M (SAM_PWMCMP6_BASE+SAM_PWMCMP_M_OFFSET)
+#define SAM_PWMCMP6_MUPD (SAM_PWMCMP6_BASE+SAM_PWMCMP_MUPD_OFFSET)
+
+#define SAM_PWMCMP7_V (SAM_PWMCMP7_BASE+SAM_PWMCMP_V_OFFSET)
+#define SAM_PWMCMP7_VUPD (SAM_PWMCMP7_BASE+SAM_PWMCMP_VUPD_OFFSET)
+#define SAM_PWMCMP7_M (SAM_PWMCMP7_BASE+SAM_PWMCMP_M_OFFSET)
+#define SAM_PWMCMP7_MUPD (SAM_PWMCMP7_BASE+SAM_PWMCMP_MUPD_OFFSET)
+
+/* PWM Channel Registers */
+
+#define SAM_PWCH_BASE(n) (SAM_PWM_BASE+SAM_PWCH_OFFSET(n))
+#define SAM_PWMCH0_BASE (SAM_PWM_BASE+0x0200)
+#define SAM_PWMCH1_BASE (SAM_PWM_BASE+0x0220)
+#define SAM_PWMCH2_BASE (SAM_PWM_BASE+0x0240)
+#define SAM_PWMCH3_BASE (SAM_PWM_BASE+0x0260)
+
+#define SAM_PWMCH0_MR (SAM_PWMCH0_BASE+SAM_PWMCH_MR_OFFSET)
+#define SAM_PWMCH0_DTY (SAM_PWMCH0_BASE+SAM_PWMCH_DTY_OFFSET)
+#define SAM_PWMCH0_DTYUPD (SAM_PWMCH0_BASE+SAM_PWMCH_DTYUPD_OFFSET)
+#define SAM_PWMCH0_PRD (SAM_PWMCH0_BASE+SAM_PWMCH_PRD_OFFSET)
+#define SAM_PWMCH0_PRDUPD (SAM_PWMCH0_BASE+SAM_PWMCH_PRDUPD_OFFSET)
+#define SAM_PWMCH0_CCNT (SAM_PWMCH0_BASE+SAM_PWMCH_CCNT_OFFSET)
+#define SAM_PWMCH0_DT (SAM_PWMCH0_BASE+SAM_PWMCH_DT_OFFSET)
+#define SAM_PWMCH0_DTUPD (SAM_PWMCH0_BASE+SAM_PWMCH_DTUPD_OFFSET)
+
+#define SAM_PWMCH1_MR (SAM_PWMCH1_BASE+SAM_PWMCH_MR_OFFSET)
+#define SAM_PWMCH1_DTY (SAM_PWMCH1_BASE+SAM_PWMCH_DTY_OFFSET)
+#define SAM_PWMCH1_DTYUPD (SAM_PWMCH1_BASE+SAM_PWMCH_DTYUPD_OFFSET)
+#define SAM_PWMCH1_PRD (SAM_PWMCH1_BASE+SAM_PWMCH_PRD_OFFSET)
+#define SAM_PWMCH1_PRDUPD (SAM_PWMCH1_BASE+SAM_PWMCH_PRDUPD_OFFSET)
+#define SAM_PWMCH1_CCNT (SAM_PWMCH1_BASE+SAM_PWMCH_CCNT_OFFSET)
+#define SAM_PWMCH1_DT (SAM_PWMCH1_BASE+SAM_PWMCH_DT_OFFSET)
+#define SAM_PWMCH1_DTUPD (SAM_PWMCH1_BASE+SAM_PWMCH_DTUPD_OFFSET)
+
+#define SAM_PWMCH2_MR (SAM_PWMCH2_BASE+SAM_PWMCH_MR_OFFSET)
+#define SAM_PWMCH2_DTY (SAM_PWMCH2_BASE+SAM_PWMCH_DTY_OFFSET)
+#define SAM_PWMCH2_DTYUPD (SAM_PWMCH2_BASE+SAM_PWMCH_DTYUPD_OFFSET)
+#define SAM_PWMCH2_PRD (SAM_PWMCH2_BASE+SAM_PWMCH_PRD_OFFSET)
+#define SAM_PWMCH2_PRDUPD (SAM_PWMCH2_BASE+SAM_PWMCH_PRDUPD_OFFSET)
+#define SAM_PWMCH2_CCNT (SAM_PWMCH2_BASE+SAM_PWMCH_CCNT_OFFSET)
+#define SAM_PWMCH2_DT (SAM_PWMCH2_BASE+SAM_PWMCH_DT_OFFSET)
+#define SAM_PWMCH2_DTUPD (SAM_PWMCH2_BASE+SAM_PWMCH_DTUPD_OFFSET)
+
+#define SAM_PWMCH3_MR (SAM_PWMCH3_BASE+SAM_PWMCH_MR_OFFSET)
+#define SAM_PWMCH3_DTY (SAM_PWMCH3_BASE+SAM_PWMCH_DTY_OFFSET)
+#define SAM_PWMCH3_DTYUPD (SAM_PWMCH3_BASE+SAM_PWMCH_DTYUPD_OFFSET)
+#define SAM_PWMCH3_PRD (SAM_PWMCH3_BASE+SAM_PWMCH_PRD_OFFSET)
+#define SAM_PWMCH3_PRDUPD (SAM_PWMCH3_BASE+SAM_PWMCH_PRDUPD_OFFSET)
+#define SAM_PWMCH3_CCNT (SAM_PWMCH3_BASE+SAM_PWMCH_CCNT_OFFSET)
+#define SAM_PWMCH3_DT (SAM_PWMCH3_BASE+SAM_PWMCH_DT_OFFSET)
+#define SAM_PWMCH3_DTUPD (SAM_PWMCH3_BASE+SAM_PWMCH_DTUPD_OFFSET)
+
+/* PWM register bit definitions *********************************************************/
+
+/* PWM Clock Register */
+
+#define PWM_CLK_DIVA_SHIFT (0) /* Bits 0-7: CLKA Divide Factor */
+#define PWM_CLK_DIVA_MASK (0xff << PWM_CLK_DIVA_SHIFT)
+#define PWM_CLK_PREA_SHIFT (8) /* Bits 8-11: CLKA Source Clock Selection */
+#define PWM_CLK_PREA_MASK (15 << PWM_CLK_PREA_SHIFT)
+# define PWM_CLK_PREA_MCK (0 << PWM_CLK_PREA_SHIFT) /* MCK */
+# define PWM_CLK_PREA_MCKDIV2 (1 << PWM_CLK_PREA_SHIFT) /* MCK/2 */
+# define PWM_CLK_PREA_MCKDIV4 (2 << PWM_CLK_PREA_SHIFT) /* MCK/4 */
+# define PWM_CLK_PREA_MCKDIV8 (3 << PWM_CLK_PREA_SHIFT) /* MCK/8 */
+# define PWM_CLK_PREA_MCKDIV16 (4 << PWM_CLK_PREA_SHIFT) /* MCK/16 */
+# define PWM_CLK_PREA_MCKDIV32 (5 << PWM_CLK_PREA_SHIFT) /* MCK/32 */
+# define PWM_CLK_PREA_MCKDIV64 (6 << PWM_CLK_PREA_SHIFT) /* MCK/64 */
+# define PWM_CLK_PREA_MCKDIV128 (7 << PWM_CLK_PREA_SHIFT) /* MCK/128 */
+# define PWM_CLK_PREA_MCKDIV256 (8 << PWM_CLK_PREA_SHIFT) /* MCK/256 */
+# define PWM_CLK_PREA_MCKDIV512 (9 << PWM_CLK_PREA_SHIFT) /* MCK/512 */
+# define PWM_CLK_PREA_MCKDIV1024 (10 << PWM_CLK_PREA_SHIFT) /* MCK/1024 */
+#define PWM_CLK_DIVB_SHIFT (16) /* Bits 16-23: CLKB Divide Factor */
+#define PWM_CLK_DIVB_MASK (0xff << PWM_CLK_DIVB_SHIFT)
+#define PWM_CLK_PREB_SHIFT (24) /* Bit 24-27: CLKB Source Clock Selection */
+#define PWM_CLK_PREB_MASK (15 << PWM_CLK_PREB_SHIFT)
+# define PWM_CLK_PREB_MCK (0 << PWM_CLK_PREB_SHIFT) /* MCK */
+# define PWM_CLK_PREB_MCKDIV2 (1 << PWM_CLK_PREB_SHIFT) /* MCK/2 */
+# define PWM_CLK_PREB_MCKDIV4 (2 << PWM_CLK_PREB_SHIFT) /* MCK/4 */
+# define PWM_CLK_PREB_MCKDIV8 (3 << PWM_CLK_PREB_SHIFT) /* MCK/8 */
+# define PWM_CLK_PREB_MCKDIV16 (4 << PWM_CLK_PREB_SHIFT) /* MCK/16 */
+# define PWM_CLK_PREB_MCKDIV32 (5 << PWM_CLK_PREB_SHIFT) /* MCK/32 */
+# define PWM_CLK_PREB_MCKDIV64 (6 << PWM_CLK_PREB_SHIFT) /* MCK/64 */
+# define PWM_CLK_PREB_MCKDIV128 (7 << PWM_CLK_PREB_SHIFT) /* MCK/128 */
+# define PWM_CLK_PREB_MCKDIV256 (8 << PWM_CLK_PREB_SHIFT) /* MCK/256 */
+# define PWM_CLK_PREB_MCKDIV512 (9 << PWM_CLK_PREB_SHIFT) /* MCK/512 */
+# define PWM_CLK_PREB_MCKDIV1024 (10 << PWM_CLK_PREB_SHIFT) /* MCK/1024 */
+
+/* PWM Enable Register, PWM Disable Register, and PWM Status Register common bit-field definitions */
+
+#define SAM_ENAB_CHID(n) (1 << ((n))
+#define SAM_ENAB_CHID0 (1 << 0) /* Bit 0: Counter Event Channel 0 Interrupt */
+#define SAM_ENAB_CHID1 (1 << 1) /* Bit 1: Counter Event Channel 1 Interrupt */
+#define SAM_ENAB_CHID2 (1 << 2) /* Bit 2: Counter Event Channel 2 Interrupt */
+#define SAM_ENAB_CHID3 (1 << 3) /* Bit 3: Counter Event Channel 3 Interrupt */
+
+/* PWM Interrupt Enable Register 1, PWM Interrupt Disable Register 1, PWM Interrupt
+ * Mask Register 1, and PWM Interrupt Status Register 1 common bit definitions
+ */
+
+#define SAM_INT_CHID(n) (1 << (n))
+#define SAM_INT_CHID0 (1 << 0) /* Bit 0: Counter Event Channel 0 Interrupt */
+#define SAM_INT_CHID1 (1 << 1) /* Bit 1: Counter Event Channel 1 Interrupt */
+#define SAM_INT_CHID2 (1 << 2) /* Bit 2: Counter Event Channel 2 Interrupt */
+#define SAM_INT_CHID3 (1 << 3) /* Bit 3: Counter Event Channel 3 Interrupt */
+#define SAM_INT_FCHID(n) (1 << ((n)+16))
+#define SAM_INT_FCHID0 (1 << 16) /* Bit 16: Fault Protection Trigger Channel 0 Interrupt */
+#define SAM_INT_FCHID1 (1 << 17) /* Bit 17: Fault Protection Trigger Channel 1 Interrupt */
+#define SAM_INT_FCHID2 (1 << 18) /* Bit 18: Fault Protection Trigger Channel 2 Interrupt */
+#define SAM_INT_FCHID3 (1 << 19) /* Bit 19: Fault Protection Trigger Channel 3 Interrupt */
+
+/* PWM Sync Channels Mode Register */
+
+#define PWM_SCM_SYNC(n) (1 << (n))
+#define PWM_SCM_SYNC0 (1 << 0) /* Bit 0: Synchronous Channel 0 */
+#define PWM_SCM_SYNC1 (1 << 1) /* Bit 1: Synchronous Channel 1 */
+#define PWM_SCM_SYNC2 (1 << 2) /* Bit 2: Synchronous Channel 2 */
+#define PWM_SCM_SYNC3 (1 << 3) /* Bit 3: Synchronous Channel 3 */
+#define PWM_SCM_UPDM_SHIFT (16) /* Bits 16-17: Synchronous Channels Update Mode */
+#define PWM_SCM_UPDM_MASK (3 << PWM_SCM_UPDM_SHIFT)
+# define PWM_SCM_UPDM_MANMAN (0 << PWM_SCM_UPDM_SHIFT) /* Manual write/manual update */
+# define PWM_SCM_UPDM_MANAUTO (1 << PWM_SCM_UPDM_SHIFT) /* Manual write/automatic update */
+# define PWM_SCM_UPDM_AUTOAUTO (2 << PWM_SCM_UPDM_SHIFT) /* Auto write/automatic update */
+#define PWM_SCM_PTRM (1 << 20) /* Bit 20: PDC Transfer Request Mode */
+#define PWM_SCM_PTRCS_SHIFT (21) /* Bits 21-23: PDC Transfer Request Comparison Selection */
+#define PWM_SCM_PTRCS_MASK (7 << PWM_SCM_PTRCS_SHIFT)
+
+/* PWM Sync Channels Update Control Register */
+
+#define PWM_SCUC_UPDULOCK (1 << 0) /* Bit 0: Synchronous Channels Update Unlock */
+
+/* PWM Sync Channels Update Period Register */
+
+#define PWM_SCUP_UPR_SHIFT (0) /* Bits 0-3: Update Period */
+#define PWM_SCUP_UPR_MASK (15 << PWM_SCUP_UPR_MASK)
+#define PWM_SCUP_UPRCNT_SHIFT (4) /* Bits 4-7: Update Period Counter */
+#define PWM_SCUP_UPRCNT_MASK (15 << PWM_SCUP_UPRCNT_SHIFT)
+
+/* PWM Sync Channels Update Period Update Register */
+
+#define PWM_SCUPUPD_SHIFT (0) /* Bits 0-3: Update Period Update */
+#define PWM_SCUPUPD_MASK (15 << PWM_SCUPUPD_SHIFT)
+
+/* PWM Interrupt Enable Register 2, PWM Interrupt Disable Register 2, PWM Interrupt Mask Register 2, and PWM Interrupt Status Register 2 common bit-field definitions */
+
+#define SAM_INT_WRDY (1 << 0) /* Bit 0: Write Ready Update Interrupt */
+#define SAM_INT_ENDTX (1 << 1) /* Bit 1: PDC End of TX Buffer Interrupt */
+#define SAM_INT_TXBUFE (1 << 2) /* Bit 2: PDC TX Buffer Empty Interrupt */
+#define SAM_INT_UNRE (1 << 3) /* Bit 3: Synch Update Underrun Error Interrupt */
+#define SAM_INT_CMPM(n) (1 << ((n)+8))
+#define SAM_INT_CMPM0 (1 << 8) /* Bit 8: Comparison 0 Match Interrupt */
+#define SAM_INT_CMPM1 (1 << 9) /* Bit 9: Comparison 1 Match Interrupt */
+#define SAM_INT_CMPM2 (1 << 10) /* Bit 10: Comparison 2 Match Interrupt */
+#define SAM_INT_CMPM3 (1 << 11) /* Bit 11: Comparison 3 Match Interrupt */
+#define SAM_INT_CMPM4 (1 << 12) /* Bit 12: Comparison 4 Match Interrupt */
+#define SAM_INT_CMPM5 (1 << 13) /* Bit 13: Comparison 5 Match Interrupt */
+#define SAM_INT_CMPM6 (1 << 14) /* Bit 14: Comparison 6 Match Interrupt */
+#define SAM_INT_CMPM7 (1 << 15) /* Bit 15: Comparison 7 Match Interrupt */
+#define SAM_INT_CMPU(n) (1 << ((n)+16))
+#define SAM_INT_CMPU0 (1 << 16) /* Bit 16: Comparison o Update Interrupt */
+#define SAM_INT_CMPU1 (1 << 17) /* Bit 17: Comparison 1 Update Interrupt */
+#define SAM_INT_CMPU2 (1 << 18) /* Bit 18: Comparison 2 Update Interrupt */
+#define SAM_INT_CMPU3 (1 << 19) /* Bit 19: Comparison 3 Update Interrupt */
+#define SAM_INT_CMPU4 (1 << 20) /* Bit 20: Comparison 4 Update Interrupt */
+#define SAM_INT_CMPU5 (1 << 21) /* Bit 21: Comparison 5 Update Interrupt */
+#define SAM_INT_CMPU6 (1 << 22) /* Bit 22: Comparison 6 Update Interrupt */
+#define SAM_INT_CMPU7 (1 << 23) /* Bit 23: Comparison 7 Update Interrupt */
+
+/* PWM Output Override Value Register, PWM Output Selection Register, PWM Output
+ * Selection Set Register, PWM Output Selection Clear Register, PWM Output Selection
+ * Set Update Register, and PWM Output Selection Clear Update Register common bit-field
+ * definitions
+ */
+
+#define PWM_OUT_OH(n) (1 << (n))
+#define PWM_OUT_OH0 (1 << 0) /* Bit 0: Value for PWMH output of the channel 0 */
+#define PWM_OUT_OH1 (1 << 1) /* Bit 1: Value for PWMH output of the channel 1 */
+#define PWM_OUT_OH2 (1 << 2) /* Bit 2: Value for PWMH output of the channel 2 */
+#define PWM_OUT_OH3 (1 << 3) /* Bit 3: Value for PWMH output of the channel 3 */
+#define PWM_OUT_OL(n) (1 << ((n)+16))
+#define PWM_OUT_OL0 (1 << 16) /* Bit 16: Value for PWML output of the channel 0 */
+#define PWM_OUT_OL1 (1 << 17) /* Bit 17: Value for PWML output of the channel 1 */
+#define PWM_OUT_OL2 (1 << 18) /* Bit 18: Value for PWML output of the channel 2 */
+#define PWM_OUT_OL3 (1 << 19) /* Bit 19: Value for PWML output of the channel 3 */
+
+/* PWM Fault Mode Register */
+
+#define PWM_FMR_FPOL(n) (1 << (n))
+#define PWM_FMR_FPOL0 (1 << 0) /* Bit 0: Fault 0 Polarity */
+#define PWM_FMR_FPOL1 (1 << 1) /* Bit 1: Fault 1 Polarity */
+#define PWM_FMR_FPOL2 (1 << 2) /* Bit 2: Fault 2 Polarity */
+#define PWM_FMR_FPOL3 (1 << 3) /* Bit 3: Fault 3 Polarity */
+#define PWM_FMR_FMOD(n) (1 << ((n)+8))
+#define PWM_FMR_FMOD0 (1 << 8) /* Bit 8: Fault 0 Activation Mode */
+#define PWM_FMR_FMOD1 (1 << 9) /* Bit 9: Fault 1 Activation Mode */
+#define PWM_FMR_FMOD2 (1 << 10) /* Bit 10: Fault 2 Activation Mode */
+#define PWM_FMR_FMOD3 (1 << 11) /* Bit 11: Fault 3 Activation Mode */
+#define PWM_FMR_FFIL(n) (1 << ((n)+16))
+#define PWM_FMR_FFIL0 (1 << 16) /* Bit 16: Fault 0 Filter */
+#define PWM_FMR_FFIL1 (1 << 17) /* Bit 17: Fault 1 Filter */
+#define PWM_FMR_FFIL2 (1 << 18) /* Bit 18: Fault 2 Filter */
+#define PWM_FMR_FFIL3 (1 << 19) /* Bit 19: Fault 3 Filter */
+
+/* PWM Fault Status Register */
+
+#define PWM_FSR_FIV(n) (1 << (n))
+#define PWM_FSR_FIV0 (1 << 0) /* Bit 0: Fault Input 0 Value */
+#define PWM_FSR_FIV1 (1 << 1) /* Bit 1: Fault Input 1 Value */
+#define PWM_FSR_FIV2 (1 << 2) /* Bit 2: Fault Input 2 Value */
+#define PWM_FSR_FIV3 (1 << 3) /* Bit 3: Fault Input 3 Value */
+#define PWM_FSR_FS(n) (1 << ((n)+8))
+#define PWM_FSR_FS0 (1 << 8) /* Bit 8: Fault 0 Status */
+#define PWM_FSR_FS1 (1 << 9) /* Bit 9: Fault 1 Status */
+#define PWM_FSR_FS2 (1 << 10) /* Bit 10: Fault 2 Status */
+#define PWM_FSR_FS3 (1 << 11) /* Bit 11: Fault 3 Status */
+
+/* PWM Fault Clear Register */
+
+#define PWM_FCR_FCLR(n) (1 << (n))
+#define PWM_FCR_FCLR0 (1 << 0) /* Bit 0: Fault 0 Clear */
+#define PWM_FCR_FCLR1 (1 << 1) /* Bit 1: Fault 1 Clear */
+#define PWM_FCR_FCLR2 (1 << 2) /* Bit 2: Fault 2 Clear */
+#define PWM_FCR_FCLR3 (1 << 3) /* Bit 3: Fault 3 Clear */
+
+/* PWM Fault Protection Value Register */
+
+#define PWM_FPV_FPVH(n) (1 << (n))
+#define PWM_FPV_FPVH0 (1 << 0) /* Bit 0: Fault Protection Value PWMH output channel 0 */
+#define PWM_FPV_FPVH1 (1 << 1) /* Bit 1: Fault Protection Value PWMH output channel 1 */
+#define PWM_FPV_FPVH2 (1 << 2) /* Bit 2: Fault Protection Value PWMH output channel 2 */
+#define PWM_FPV_FPVH3 (1 << 3) /* Bit 3: Fault Protection Value PWMH output channel 3 */
+#define PWM_FPV_FPVL(n) (1 << ((n)+16))
+#define PWM_FPV_FPVL0 (1 << 16) /* Bit 16: Fault Protection Value PWML output channel 0 */
+#define PWM_FPV_FPVL1 (1 << 17) /* Bit 17: Fault Protection Value PWML output channel 1 */
+#define PWM_FPV_FPVL2 (1 << 18) /* Bit 18: Fault Protection Value PWML output channel 2 */
+#define PWM_FPV_FPVL3 (1 << 19) /* Bit 19: Fault Protection Value PWML output channel 3 */
+
+/* PWM Fault Protection Enable Register */
+
+#define PWM_FPE_FPEN(n,y) (1 << (((n)<<8)+y))
+#define PWM_FPE_FPE0(y) (1 << (y)) /* Bits 0-7: Fault Protection Enable Fault=y chan=0 */
+#define PWM_FPE_FPE1(y) (1 << ((y)+8)) /* Bits 8-15: Fault Protection Enable Fault=y chan=1 */
+#define PWM_FPE_FPE2(y) (1 << ((y)+16)) /* Bits 16-23: Fault Protection Enable Fault=y chan=2 */
+#define PWM_FPE_FPE3(y) (1 << ((y)+24) /* Bits 24-31: Fault Protection Enable Fault=y chan=3 */
+
+/* PWM Event Line 1/2 Register */
+
+#define PWM_ELMR_CSEL(n) (1 << (n))
+#define PWM_ELMR_CSEL0 (1 << 0) /* Bit 0: Comparison 0 Selection */
+#define PWM_ELMR_CSEL1 (1 << 1) /* Bit 1: Comparison 1 Selection */
+#define PWM_ELMR_CSEL2 (1 << 2) /* Bit 2: Comparison 2 Selection */
+#define PWM_ELMR_CSEL3 (1 << 3) /* Bit 3: Comparison 3 Selection */
+#define PWM_ELMR_CSEL4 (1 << 4) /* Bit 4: Comparison 4 Selection */
+#define PWM_ELMR_CSEL5 (1 << 5) /* Bit 5: Comparison 5 Selection */
+#define PWM_ELMR_CSEL6 (1 << 6) /* Bit 6: Comparison 6 Selection */
+#define PWM_ELMR_CSEL7 (1 << 7) /* Bit 7: Comparison 7 Selection */
+
+/* PWM Write Protect Control Register */
+
+#define PWM_WPCR_WPCMD_SHIFT (0) /* Bits 0-1: Write Protect Command */
+#define PWM_WPCR_WPCMD_MASK (3 << PWM_WPCR_WPCMD_SHIFT)
+#define PWM_WPCR_WPRG(n) (1 << ((n)+2))
+#define PWM_WPCR_WPRG0 (1 << 2) /* Bit 2: Write Protect Register Group 0 */
+#define PWM_WPCR_WPRG1 (1 << 3) /* Bit 3: Write Protect Register Group 1 */
+#define PWM_WPCR_WPRG2 (1 << 4) /* Bit 4: Write Protect Register Group 2 */
+#define PWM_WPCR_WPRG3 (1 << 5) /* Bit 5: Write Protect Register Group 3 */
+#define PWM_WPCR_WPRG4 (1 << 6) /* Bit 6: Write Protect Register Group 4 */
+#define PWM_WPCR_WPRG5 (1 << 7) /* Bit 7: Write Protect Register Group 5 */
+#define PWM_WPCR_WPKEY_SHIFT (8) /* Bits 8-31: Write Protect Key */
+#define PWM_WPCR_WPKEY_MASK (0x00ffffff << PWM_WPCR_WPKEY_SHIFT)
+
+/* PWM Write Protect Status Register */
+
+#define PWM_WPSR_WPSWS(n) (1 << (n))
+#define PWM_WPSR_WPSWS0 (1 << 0) /* Bit 0: Write Protect SW Status */
+#define PWM_WPSR_WPSWS1 (1 << 1) /* Bit 1: Write Protect SW Status */
+#define PWM_WPSR_WPSWS2 (1 << 2) /* Bit 2: Write Protect SW Status */
+#define PWM_WPSR_WPSWS3 (1 << 3) /* Bit 3: Write Protect SW Status */
+#define PWM_WPSR_WPSWS4 (1 << 4) /* Bit 4: Write Protect SW Status */
+#define PWM_WPSR_WPSWS5 (1 << 5) /* Bit 5: Write Protect SW Status */
+#define PWM_WPSR_WPVS (1 << 7) /* Bit 7: Write Protect Violation Status */
+#define PWM_WPSR_WPHWS(n) (1 << ((n)+8))
+#define PWM_WPSR_WPHWS0 (1 << 8) /* Bit 8: Write Protect HW Status */
+#define PWM_WPSR_WPHWS1 (1 << 9) /* Bit 9: Write Protect HW Status */
+#define PWM_WPSR_WPHWS2 (1 << 10) /* Bit 10: Write Protect HW Status */
+#define PWM_WPSR_WPHWS3 (1 << 11) /* Bit 11: Write Protect HW Status */
+#define PWM_WPSR_WPHWS4 (1 << 12) /* Bit 12: Write Protect HW Status */
+#define PWM_WPSR_WPHWS5 (1 << 13) /* Bit 13: Write Protect HW Status */
+#define PWM_WPSR_WPVSRC_SHIFT (16) /* Bits 16-31: Write Protect Violation Source */
+#define PWM_WPSR_WPVSRC_MASK (0xffff << PWM_WPSR_WPVSRC_SHIFT)
+
+/* PWM Comparison x Value Register and PWM Comparison x Value Update Register */
+
+#define PWMCMP_CV_SHIFT (0) /* Bits 0-23: Comparison x Value */
+#define PWMCMP_CV_MASK (0x00ffffff << PWMCMP_CV_SHIFT)
+#define PWMCMP_CVM (1 << 24) /* Bit 24: Comparison x Value Mode */
+
+/* PWM Comparison x Mode Register and PWM Comparison x Mode Update Register */
+
+#define PWMCMP_CEN (1 << 0) /* Bit 0: Comparison x Enable */
+#define PWMCMP_CTR_SHIFT (4) /* Bits 4-7: Comparison x Trigger */
+#define PWMCMP_CTR_MASK (15 << PWMCMP_CTR_SHIFT)
+#define PWMCMP_CPR_SHIFT (8) /* Bits 8-11: Comparison x Period */
+#define PWMCMP_CPR_MASK (15 << PWMCMP_CPR_SHIFT)
+#define PWMCMP_M_CPRCNT_SHIFT (12) /* Bits 12-15: Comparison x Period Count (M only) */
+#define PWMCMP_M_CPRCNT_MASK (15 << PWMCMP_M_CPRCNT_SHIFT)
+#define PWMCMP_CUPR_SHIFT (16) /* Bits 16-19: Comparison x Update Period */
+#define PWMCMP_CUPR_MASK (15 << PWMCMP_CUPR_SHIFT)
+#define PWMCMP_M_CUPRCNT_SHIFT (20) /* Bits 20-23: Comparison x Update Period Counter (M only) */
+#define PWMCMP_M_CUPRCNT_MASK (15 << PWMCMP_M_CUPRCNT_SHIFT)
+
+/* PWM Channel Mode Register */
+
+#define PWMCH_MR_CPRE_SHIFT (0) /* Bits 0-3: Channel Pre-scaler */
+#define PWMCH_MR_CPRE_MASK (15 << PWMCH_MR_CPRE_SHIFT)
+# define PWMCH_MR_CPRE_MCK (0 << PWMCH_MR_CPRE_SHIFT) /* MCK */
+# define PWMCH_MR_CPRE_MCKDIV2 (1 << PWMCH_MR_CPRE_SHIFT) /* MCK/2 */
+# define PWMCH_MR_CPRE_MCKDIV4 (2 << PWMCH_MR_CPRE_SHIFT) /* MCK/4 */
+# define PWMCH_MR_CPRE_MCKDIV8 (3 << PWMCH_MR_CPRE_SHIFT) /* MCK/8 */
+# define PWMCH_MR_CPRE_MCKDIV16 (4 << PWMCH_MR_CPRE_SHIFT) /* MCK/16 */
+# define PWMCH_MR_CPRE_MCKDIV32 (5 << PWMCH_MR_CPRE_SHIFT) /* MCK/32 */
+# define PWMCH_MR_CPRE_MCKDIV64 (6 << PWMCH_MR_CPRE_SHIFT) /* MCK/64 */
+# define PWMCH_MR_CPRE_MCKDIV128 (7 << PWMCH_MR_CPRE_SHIFT) /* MCK/128 */
+# define PWMCH_MR_CPRE_MCKDIV256 (8 << PWMCH_MR_CPRE_SHIFT) /* MCK/256 */
+# define PWMCH_MR_CPRE_MCKDIV512 (9 << PWMCH_MR_CPRE_SHIFT) /* MCK/512 */
+# define PWMCH_MR_CPRE_MCKDIV1024 (10 << PWMCH_MR_CPRE_SHIFT) /* MCK/1024 */
+# define PWMCH_MR_CPRE_CLKA (11 << PWMCH_MR_CPRE_SHIFT) /*CLKA */
+# define PWMCH_MR_CPRE_CLKB (12 << PWMCH_MR_CPRE_SHIFT) /* CLKB */
+#define PWMCH_MR_CALG (1 << 8) /* Bit 8: Channel Alignment */
+#define PWMCH_MR_CPOL (1 << 9) /* Bit 9: Channel Polarity */
+#define PWMCH_MR_CES (1 << 10) /* Bit 10: Counter Event Selection */
+#define PWMCH_MR_DTE (1 << 16) /* Bit 16: Dead-Time Generator Enable */
+#define PWMCH_MR_DTHI (1 << 17) /* Bit 17: Dead-Time PWMHx Output Inverted */
+#define PWMCH_MR_DTLI (1 << 18) /* Bit 18: Dead-Time PWMLx Output Inverted */
+
+/* PWM Channel Duty Cycle Register and PWM Channel Duty Cycle Update Register common bit-field definitions */
+
+#define PWMCH_DTY_SHIFT (0) /* Bits 0-23: Channel Duty-Cycle */
+#define PWMCH_DTY_MASK (0x00ffffff << PWMCH_DTY_SHIFT)
+
+/* PWM Channel Period Register and PWM Channel Period Update Register common bit-field definitions */
+
+#define PWMCH_PRD_SHIFT (0) /* Bits 0-23: Channel Period */
+#define PWMCH_PRD_MASK (0x00ffffff << PWMCH_PRD_SHIFT)
+
+/* PWM Channel Counter Register */
+
+#define PWMCH_CCNT_SHIFT (0) /* Bits 0-23: Channel Counter Register */
+#define PWMCH_CCNT_MASK (0x00ffffff << PWMCH_CCNT_SHIFT)
+
+/* PWM Channel Dead Time Register and PWM Channel Dead Time Update Register common bit-field definitions */
+
+#define PWMCH_DTH_SHIFT (0) /* Bits 0-15: Dead-Time Value for PWMHx Output */
+#define PWMCH_DTH_MASK (0xffff << PWMCH_DTH_SHIFT)
+#define PWMCH_DTL_SHIFT (16) /* Bits 16-31: Dead-Time Value for PWMLx Output */
+#define PWMCH_DTL_MASK (0xffff << PWMCH_DTL_SHIFT)
+
+/****************************************************************************************
+ * Public Types
+ ****************************************************************************************/
+
+/****************************************************************************************
+ * Public Data
+ ****************************************************************************************/
+
+/****************************************************************************************
+ * Public Functions
+ ****************************************************************************************/
+
+#endif /* __ARCH_ARM_SRC_SAM3U_CHIP_SAM_PWM_H */