hotpower 发表于 2010-12-5 02:07:54

菜农M051学习笔记1

/*-------------------------------------------------------------------------------
文   件   名 :M051Seriescfg.h
创   建   人 :Cortex-M0菜鸟HotPower@163.com,HotPower@126.com,QQ:1270688699
创 建 日期 :2010.12.5   0:18
最近修改日期 :2010.12.5   1:58
创 建地 点 : 西安大雁塔村队部
版   本   号 : V1.01 (红杏版)
修 改原 因 :
说      明 :
备      注 : 本头文件风格归属于菜农的《红杏出墙》系列,堪称“红杏级别”
                将本文件拷贝到...\CMSIS\CM0\DeviceSupport\Nuvoton\M051Series内。
-------------------------------------------------------------------------------*/

#ifndef __M051Seriescfg_H__
#define __M051Seriescfg_H__

#ifdef __cplusplus
extern "C" {
#endif

#if defined (__CC_ARM)
#pragma anon_unions
#endif

#include "M051Series.h"

typedef volatile unsigned int NU_REG;// Hardware register definition
#define __noinit__ __attribute__((zero_init))//变量不初始化为0

typedef enum
{
__0 = (NU_REG)0,
__1 = (NU_REG)1,
__2 = (NU_REG)2,
__3 = (NU_REG)3,
__4 = (NU_REG)4,
__5 = (NU_REG)5,
__6 = (NU_REG)6,
__7 = (NU_REG)7,
__8 = (NU_REG)8,
__9 = (NU_REG)9,
__10 = (NU_REG)10,
__11 = (NU_REG)11,
__12 = (NU_REG)12,
__13 = (NU_REG)13,
__14 = (NU_REG)14,
__15 = (NU_REG)15,
__16 = (NU_REG)16,
__17 = (NU_REG)17,
__18 = (NU_REG)18,
__19 = (NU_REG)19,
__20 = (NU_REG)20,
__21 = (NU_REG)21,
__22 = (NU_REG)22,
__23 = (NU_REG)23,
__24 = (NU_REG)24,
__25 = (NU_REG)25,
__26 = (NU_REG)26,
__27 = (NU_REG)27,
__28 = (NU_REG)28,
__29 = (NU_REG)29,
__30 = (NU_REG)30,
__31 = (NU_REG)31
}Number_enum;

typedef volatile struct
{
NU_REG Bit0:1;
NU_REG Bit1:1;
NU_REG Bit2:1;
NU_REG Bit3:1;
NU_REG Bit4:1;
NU_REG Bit5:1;
NU_REG Bit6:1;
NU_REG Bit7:1;
NU_REG Bit8:1;
NU_REG Bit9:1;
NU_REG Bit10:1;
NU_REG Bit11:1;
NU_REG Bit12:1;
NU_REG Bit13:1;
NU_REG Bit14:1;
NU_REG Bit15:1;
NU_REG Bit16:1;
NU_REG Bit17:1;
NU_REG Bit18:1;
NU_REG Bit19:1;
NU_REG Bit20:1;
NU_REG Bit21:1;
NU_REG Bit22:1;
NU_REG Bit23:1;
NU_REG Bit24:1;
NU_REG Bit25:1;
NU_REG Bit26:1;
NU_REG Bit27:1;
NU_REG Bit28:1;
NU_REG Bit29:1;
NU_REG Bit30:1;
NU_REG Bit31:1;
}NU_BITs;
//===============================================//
typedef volatile struct
{
NU_REG Pin0:1;
NU_REG Pin1:1;
NU_REG Pin2:1;
NU_REG Pin3:1;
NU_REG Pin4:1;
NU_REG Pin5:1;
NU_REG Pin6:1;
NU_REG Pin7:1;
NU_REG Pin8:1;
NU_REG Pin9:1;
NU_REG Pin10:1;
NU_REG Pin11:1;
NU_REG Pin12:1;
NU_REG Pin13:1;
NU_REG Pin14:1;
NU_REG Pin15:1;
NU_REG Pin16:1;
NU_REG Pin17:1;
NU_REG Pin18:1;
NU_REG Pin19:1;
NU_REG Pin20:1;
NU_REG Pin21:1;
NU_REG Pin22:1;
NU_REG Pin23:1;
NU_REG Pin24:1;
NU_REG Pin25:1;
NU_REG Pin26:1;
NU_REG Pin27:1;
NU_REG Pin28:1;
NU_REG Pin29:1;
NU_REG Pin30:1;
NU_REG Pin31:1;
}NU_PINs;

//============================================
typedef volatile union
{
__IO NU_REGRegs;
__IO NU_BITs Bits;
}NU_REG_BITs;

typedef volatile union
{
__IO NU_REGRegs;
__IO NU_PINs Bits;
}NU_REG_PINs;

//----------------------------------------------------//
typedef struct
{
        __IO NU_REG RESERVED:16;
    __IO NU_REG OFFD0:1;
    __IO NU_REG OFFD1:1;
    __IO NU_REG OFFD2:1;
    __IO NU_REG OFFD3:1;
    __IO NU_REG OFFD4:1;
    __IO NU_REG OFFD5:1;
    __IO NU_REG OFFD6:1;
    __IO NU_REG OFFD7:1;
    __IO NU_REG OFFD8:1;
    __IO NU_REG OFFD9:1;
    __IO NU_REG OFFD10:1;
    __IO NU_REG OFFD11:1;
    __IO NU_REG OFFD12:1;
    __IO NU_REG OFFD13:1;
    __IO NU_REG OFFD14:1;
    __IO NU_REG OFFD15:1;
}NU_GPIO_OFFD_Bits;

typedef volatile union
{
NU_REG   Regs;
GPIO_PMD_T Bits;
}NU_GPIO_PMD_T;

typedef volatile union
{
NU_REG            Regs;
NU_GPIO_OFFD_Bits Bits;
}NU_GPIO_OFFD_T;

//----------------------------------------------------//
//改造GPIO为结构(不占用空间)
typedef struct
{
    NU_GPIO_PMD_T   PMD;//模式控制(0输入1输出2开漏3准双向)
        union{
          NU_REG_PINs   SCH;
      NU_GPIO_OFFD_TOFFD;//数字使能(高16位)
        };
    NU_REG_PINs   DOUT;//数据输出值(低16位)
    NU_REG_PINs   DMASK;//数据输出写屏蔽
    NU_REG_PINs   PIN;//管脚数值(低16位)
    NU_REG_PINs   DBEN;//防反弹使能
    NU_REG_PINs   IMD;//中断模式控制(0边沿触发中断1电平触发中断)
    NU_REG_BITs   IEN;//中断使能(高16位上升沿或高电平,低16位下降沿或低电平)
    NU_REG_PINs   ISRC;//中断源标志
        NU_REG          RESERVED;//保留,为了构造GPIO结构数组
} NU_GPIO_T;

typedef volatile union
{
NU_REG          Regs;
GPIO_DBNCECON_T Bits;
}NU_GPIO_DBNCECON_T;

typedef struct {
union {
    __IO NU_GPIO_T Px;//GPIOs.Px.DOUT.Regs |= 1;GPIOs.Px.DOUT.Bits.Pin0 = 1;
        struct {
          __IO NU_GPIO_T P0;//GPIOs.P0.DOUT.Regs |=1;GPIOs.P0.DOUT.Bits.Pin0=1;
          __IO NU_GPIO_T P1;//GPIOs.P1.DOUT.Regs |=2;GPIOs.P1.DOUT.Bits.Pin1=1;
          __IO NU_GPIO_T P2;//GPIOs.P2.DOUT.Regs |=4;GPIOs.P2.DOUT.Bits.Pin2=1;
          __IO NU_GPIO_T P3;//GPIOs.P3.DOUT.Regs |=8;GPIOs.P3.DOUT.Bits.Pin3=1;
          __IO NU_GPIO_T P4;//GPIOs.P4.DOUT.Regs |=16;GPIOs.P4.DOUT.Bits.Pin4=1;
        };
};
__INU_REG             RESERVED0;
__IO NU_GPIO_DBNCECON_T DBNCECON;
__INU_REG             RESERVED1;
__INU_REG             RESERVED2;
__IO NU_REG_PINs      BIT_DOUT;
}NUS_GPIO, *NUPS_GPIO;

#define NU_BASE_GPIO((NUPS_GPIO) GPIOA_BASE)//定义硬件结构指针(硬件地址)
#define GPIOs (*NU_BASE_GPIO)//定位全局结构变量GPIOs
//----------------------------------------------------//
#define GPIO0s(*((NU_GPIO_T *) PORT0_BASE))//定位全局结构变量GPIO0s
#define GPIO1s(*((NU_GPIO_T *) PORT1_BASE))//定位全局结构变量GPIO1s
#define GPIO2s(*((NU_GPIO_T *) PORT2_BASE))//定位全局结构变量GPIO2s
#define GPIO3s(*((NU_GPIO_T *) PORT3_BASE))//定位全局结构变量GPIO3s
#define GPIO4s(*((NU_GPIO_T *) PORT4_BASE))//定位全局结构变量GPIO4s
#define P0sGPIO0s   
#define P1sGPIO1s   
#define P2sGPIO2s   
#define P3sGPIO3s   
#define P4sGPIO4s   
#define PORT0sGPIO0s   
#define PORT1sGPIO1s   
#define PORT2sGPIO2s   
#define PORT3sGPIO3s   
#define PORT4sGPIO4s   
//----------------------------------------------------//

#define GPIOx(x)((NU_GPIO_T *) PORT0_BASE+ (x * 0x0040))
#define PORTx(x)((NU_GPIO_T *) PORT0_BASE+ (x * 0x0040))
#define Px(x)   ((NU_GPIO_T *) PORT0_BASE+ (x * 0x0040))
//----------------------------------------------------//
//----------------------------------------------------//
typedef volatile union
{
NU_REG            Regs;
UART_IER_T      Bits;
}NU_UART_IER_T;

typedef volatile union
{
NU_REG            Regs;
UART_FCR_T      Bits;
}NU_UART_FCR_T;

typedef volatile union
{
NU_REG            Regs;
UART_LCR_T      Bits;
}NU_UART_LCR_T;

typedef volatile union
{
NU_REG            Regs;
UART_MCR_T      Bits;
}NU_UART_MCR_T;

typedef volatile union
{
NU_REG            Regs;
UART_MSR_T      Bits;
}NU_UART_MSR_T;

typedef volatile union
{
NU_REG            Regs;
UART_FSR_T      Bits;
}NU_UART_FSR_T;

typedef volatile union
{
NU_REG            Regs;
UART_ISR_T      Bits;
}NU_UART_ISR_T;

typedef volatile union
{
NU_REG            Regs;
UART_TOR_T      Bits;
}NU_UART_TOR_T;

typedef volatile union
{
NU_REG            Regs;
UART_BAUD_T      Bits;
}NU_UART_BAUD_T;

typedef volatile union
{
NU_REG            Regs;
UART_IRCR_T       Bits;
}NU_UART_IRCR_T;

typedef volatile union
{
NU_REG            Regs;
UART_ALTCON_T   Bits;
}NU_UART_ALTCON_T;

typedef volatile union
{
NU_REG            Regs;
UART_FUNSEL_T   Bits;
}NU_UART_FUNSEL_T;

typedef struct
{
        union{
            __IO NU_REG_BITsDATA;//接收发送数据
            __INU_REG_BITsRBR;//接收数据缓存寄存器
            __ONU_REG_BITsTHR;//发送保持寄存器
    };
    __IO NU_UART_IER_T    IER;//中断使能寄存器
    __IO NU_UART_FCR_T    FCR;//FIFO控制寄存器
    __IO NU_UART_LCR_T    LCR;//Line控制寄存器
    __IO NU_UART_MCR_T    MCR;//Modem控制寄存器
    __IO NU_UART_MSR_T    MSR;//Modem状态寄存器
    __IO NU_UART_FSR_T    FSR;//FIFO状态寄存器
    __IO NU_UART_ISR_T    ISR;//中断状态寄存器
    __IO NU_UART_TOR_T    TOR;//定时溢出寄存器
    __IO NU_UART_BAUD_T   BAUD;//波特率分频寄存器
    __IO NU_UART_IRCR_T   IRCR;//IrDA控制寄存器
    __IO NU_UART_ALTCON_T ALTCON;//LIN Break失败计数寄存器   
        __IO NU_UART_FUNSEL_T FUNSEL;//功能选择寄存器   
}NU_UART_T;

//----------------------------------------------------//
#define UART0s    (*((NU_UART_T *) UART0_BASE))//定位全局结构变量UART0s
#define UART1s    (*((NU_UART_T *) UART1_BASE))//定位全局结构变量UART0s
//----------------------------------------------------//
#define UARTx(x)((NU_UART_T *) UART0_BASE + ((x & 1) * 0x100000) + ((x >> 1) * 0x104000))
#define Ux(x)   ((NU_UART_T *) UART0_BASE + ((x & 1) * 0x100000) + ((x >> 1) * 0x104000))
//----------------------------------------------------//
typedef enum
{
    TIMER_TCSR_PRESCALE   = 0,//预分频计数器
    TIMER_TCSR_TDR_EN   = 16,//数据锁存使能
    TIMER_TCSR_COUNTER_EN = 24,//                  
    TIMER_TCSR_CACT       = 25,//定时器工作状态                  
    TIMER_TCSR_CRST       = 26,//计数器重置
    TIMER_TCSR_MODE       = 27,//定时器工作模式
    TIMER_TCSR_TMR_IE   = 29,//中断使能
    TIMER_TCSR_CEN      = 30,//计数器使能位
    TIMER_TCSR_nDBGACK_EN = 31
}NU_TIMER_TCSR_ENUM;

typedef volatile union
{
NU_REG         Regs;
TIMER_TCSR_T   Bits;
}NU_TIMER_TCSR_T;

typedef enum
{
    TIMER_TISR_TIF   = 0//定时器中断标志
}NU_TIMER_TISR_T_ENUM;

typedef volatile union
{
NU_REG         Regs;
TIMER_TISR_T   Bits;
}NU_TIMER_TISR_T;

typedef struct
{
    __IO NU_TIMER_TCSR_T   TCSR;//控制与状态寄存器
    __IO NU_REG_BITs         TCMPR;//比较寄存器
    __IO NU_TIMER_TISR_T   TISR;//中断状态寄存器   
    __IO NU_REG_BITs         TDR;//数据寄存器
}NU_TIMER_T;

//----------------------------------------------------//
#define TIMER0s    (*((NU_TIMER_T *) TIMER0_BASE))//定位全局结构变量TIMER0s
#define TIMER1s    (*((NU_TIMER_T *) TIMER1_BASE))//定位全局结构变量TIMER1s
#define TIMER2s    (*((NU_TIMER_T *) TIMER2_BASE))//定位全局结构变量TIMER2s
#define TIMER3s    (*((NU_TIMER_T *) TIMER3_BASE))//定位全局结构变量TIMER3s
//----------------------------------------------------//
#define TIMERx(x) ((NU_TIMER_T *)TIMER0_BASE + ((x & 1) * 0x0020) + ((x >> 1) * 0x100000))
//----------------------------------------------------//
typedef enum
{
    WDT_WTCR_WTR = 0,//看门狗定时器重置
        WDT_WTCR_WTRE = 1,//看门狗定时器复位使能
        WDT_WTCR_WTRF = 2,//看门狗定时器复位标志
        WDT_WTCR_WTIF = 3,//看门狗定时器中断标志
        WDT_WTCR_WTWKE = 4,//看门狗定时器唤醒功能使能位
        WDT_WTCR_WTWKF = 5,//看门狗定时器唤醒标志
        WDT_WTCR_WTIE = 6,//看门狗定时器中断使能
        WDT_WTCR_WTE = 7,//看门狗定时器使能
        WDT_WTCR_WTIS = 8,//看门狗定时器间隔选择
                          //000:69.33us 001:72.53us 010:85.33us        011:170.67us
                          //100:426.67us 101:1.45ms 110:5.55ms        111:21.93ms
}NU_WDT_WTCR_ENUM;

typedef volatile union
{
NU_REG            Regs;
WDT_WTCR_T            Bits;
}NU_WDT_WTCR_T;

typedef struct
{
    __IO NU_WDT_WTCR_T   WTCR;//看门狗定时器控制寄存器
}NU_WDT_T;
//----------------------------------------------------//
#define WDTs    (*((NU_WDT_T *) WDT_BASE))//定位全局结构变量WDTs
//----------------------------------------------------//
#define WDTx   ((NU_WDT_T *)WDT_BASE)
//----------------------------------------------------//
typedef enum
{
    SPI_CNTRL_GO_BUSY = 0,//通讯或忙状态标志
    SPI_CNTRL_RX_NEG= 1,//接收数据边沿反向位(0=SDI信号在SPICLK上升沿接收)
    SPI_CNTRL_TX_NEG= 2,//发送数据边沿反向位(0=SDO信号在SPICLK的上升沿发送)
    SPI_CNTRL_TX_BIT_LEN = 3,//传输位长度(32,1,...31)
    SPI_CNTRL_TX_NUM = 8,//发送/接收数量(00=每次传输仅完成1次发送/接收,01=每次传输仅完成2次发送/接收)
    SPI_CNTRL_LSB = 10,//优先传送LSB(0=优先发送/接收MSB,根据CNTRL寄存器的Tx_BIT_LEN 决定TxX/RxX)
    SPI_CNTRL_CLKP = 11,//时钟极性(0=SCLK低电平闲置)
    SPI_CNTRL_SP_CYCLE = 12,//暂缓间隙 (仅主机模式)
    SPI_CNTRL_IF = 16,//中断标志(0=表示传输未结束, 该位写1清零)
    SPI_CNTRL_IE = 17,//中断使能
    SPI_CNTRL_SLAVE = 18,//SLAVE模式标志(0=MCU作为主机模式)
    SPI_CNTRL_BYTE_REORDER = 19,
    SPI_CNTRL_TWOB= 21,
    SPI_CNTRL_VARCLK_EN = 22
}NU_SPI_CNTRL_ENUM;

typedef enum
{
    SPI_SSR_SSR = 0,//从机选择寄存器(主机模式)
    SPI_SSR_SS_LVL = 2,//从机选择触发电平选择
    SPI_SSR_AUTOSS = 3,//自动从机选择(主机模式)
    SPI_SSR_SS_LTRIG = 4,//从机电平触发选择(从机模式)
    SPI_SSR_LTRIG_FLAG = 5//电平触发标志
}NU_SPI_SSR_ENUM;

typedef volatile union
{
NU_REG            Regs;
SPI_CNTRL_T       Bits;
}NU_SPI_CNTRL_T;

typedef volatile union
{
NU_REG            Regs;
SPI_SSR_T         Bits;
}NU_SPI_SSR_T;

typedef volatile union
{
NU_REG            Regs;
SPI_DIVIDER_T   Bits;
}NU_SPI_DIVIDER_T;

typedef struct
{
    NU_SPI_CNTRL_T   CNTRL;//控制及状态寄存器
    NU_SPI_DIVIDER_T DIVIDER;//时钟除频寄存器
    NU_SPI_SSR_T   SSR;//从机选择寄存器
    NU_REG         RESERVE0;//保留
        union{
            NU_REG_BITs      RX;//接收数据寄存器数组
                struct{
                    NU_REG_BITs      RX0;//接收数据寄存器低32位
                    NU_REG_BITs      RX1;//接收数据寄存器高32位
                };
        };
    NU_REG         RESERVE1;//保留
        union{
            NU_REG_BITs      TX;//数据发送寄存器数组
                struct{
                    NU_REG_BITs      TX0;//数据发送寄存器低32位
                    NU_REG_BITs      TX1;//数据发送寄存器高32位
                };
        };
    NU_REG         RESERVE2;//保留
    NU_REG_BITs      VARCLK;
    NU_REG         RESERVE3;//保留
}NU_SPI_T;
//----------------------------------------------------//
#define SPI0s   (*((NU_SPI_T *) SPI0_BASE))//定位全局结构变量SPI0s
#define SPI1s   (*((NU_SPI_T *) SPI1_BASE))//定位全局结构变量SPI1s
//----------------------------------------------------//
#define SPIx(x)   ((NU_SPI_T *)SPI0_BASE   + ((x & 1) * 0x4000) + ((x >> 1) * 0x100000))
//----------------------------------------------------//
typedef enum
{
    I2C_CON_AA   = 2,//I2C接收应答标志位
    I2C_CON_SI   = 3,//I2C中断标志位
    I2C_CON_STO= 4,//I2C停止标志
    I2C_CON_STA= 5,//I2C起始标志
    I2C_CON_ENSI = 6,//I2C控制使能/禁止
    I2C_CON_EI   = 7 //使能中断
}NU_I2C_CON_ENUM;

typedef volatile union
{
NU_REG         Regs;
I2C_CON_T      Bits;
}NU_I2C_CON_T;

typedef enum
{
    I2C_ADDR_GC    = 0,//全呼功能
    I2C_ADDR_ADDR= 1 //I2C地址寄存器
}NU_I2C_ADDR_ENUM;

typedef volatile union
{
NU_REG            Regs;
I2C_ADDR_T      Bits;
}NU_I2C_ADDR_T;

typedef enum
{
    I2C_ADRM_ADM= 1//I2C隐藏地址寄存器
}NU_I2C_ADRM_ENUM;

typedef volatile union
{
NU_REG            Regs;
I2C_ADRM_T      Bits;
}NU_I2C_ADRM_T;

typedef enum
{
    I2C_TOC_TIF= 0,//超时标志
    I2C_TOC_DIV4 = 1,//超时计数输入时钟除4
    I2C_TOC_ENTI = 2 //超时计数使能/禁止
}NU_I2C_TOC_NUM;

typedef volatile union
{
NU_REG            Regs;
I2C_TOC_T         Bits;
}NU_I2C_TOC_T;

typedef struct
{
    __IO NU_I2C_CON_T    CON;//I2C控制寄存器
    __IO NU_I2C_ADDR_T   ADDR0;//I2C从机地址寄存器0
    __IO NU_REG_BITs   DATA;//I2C数据寄存器
    __IO NU_REG_BITs   STATUS;//I2C状态寄存器
    __IO NU_REG_BITs   CLK;//I2C时钟时钟分频寄存器
    __IO NU_I2C_TOC_T    TOC;//I2C超时控制寄存器
        __IO NU_I2C_ADDR_T       ADDR1;//从机地址寄存器1
        __IO NU_I2C_ADDR_T       ADDR2;//从机地址寄存器2
        __IO NU_I2C_ADDR_T       ADDR3;//从机地址寄存器3
        __IO NU_I2C_ADRM_T       ADRM0;//从机隐藏地址寄存器0
        __IO NU_I2C_ADRM_T       ADRM1;//从机隐藏地址寄存器1
        __IO NU_I2C_ADRM_T       ADRM2;//从机隐藏地址寄存器2
        __IO NU_I2C_ADRM_T       ADRM3;//从机隐藏地址寄存器3      
}NU_I2C_T;
//----------------------------------------------------//
#define I2Cs   (*((NU_I2C_T *) I2C_BASE))//定位全局结构变量I2Cs
//----------------------------------------------------//
#define I2Cx   ((NU_I2C_T *)I2C_BASE)
//----------------------------------------------------//
typedef enum
{
    ADC_ADDR_RSLT    = 0,//A/D转换结果
    ADC_ADDR_OVERRUN = 16,//结束运行标志位
    ADC_ADDR_VALID   = 17//有效标志位
}NU_ADC_ADDR_ENUM;

typedef volatile union
{
NU_REG         Regs;
ADC_ADDR_T       Bits;
}NU_ADC_ADDR_T;

typedef enum
{
    ADC_ADCR_ADEN    = 0,//A/D转换使能
    ADC_ADCR_ADIE    = 1,//A/D中断使能
    ADC_ADCR_ADMD    = 2,//A/D转换操作模式
    ADC_ADCR_TRGS    = 4,//硬件触发源
    ADC_ADCR_TRGCOND = 6,//外部触发条件
    ADC_ADCR_TRGEN   = 8,//外部触发使能
    ADC_ADCR_PTEN    = 9,//PDMA 传送使能
    ADC_ADCR_DIFFEN= 10,//A/D差分输入模式使能
    ADC_ADCR_ADST    = 11,//A/D转换开始
    ADC_ADCR_DMOF    = 31
}NU_ADC_ADCR_ENUM;

typedef volatile union
{
NU_REG         Regs;
ADC_ADCR_T       Bits;
}NU_ADC_ADCR_T;

typedef enum
{
    ADC_ADCHER_CHEN0    = 0,//模拟输入通道0
    ADC_ADCHER_CHEN1    = 1,//模拟输入通道1
    ADC_ADCHER_CHEN2    = 2,//模拟输入通道2
    ADC_ADCHER_CHEN3    = 3,//模拟输入通道3
    ADC_ADCHER_CHEN4    = 4,//模拟输入通道4
    ADC_ADCHER_CHEN5    = 5,//模拟输入通道5
    ADC_ADCHER_CHEN6    = 6,//模拟输入通道6
    ADC_ADCHER_CHEN7    = 7,//模拟输入通道7
    ADC_ADCHER_PRESEL   = 8 //模拟输入通道7选择位
                            //00:模拟输入通道7 01:Bandgap(VBG)模拟输入
                                                  //10:VTEMP模拟输入 11:模拟地
}NU_ADC_ADCHER_ENUM;

typedef volatile union
{
NU_REG         Regs;
ADC_ADCHER_T   Bits;
}NU_ADC_ADCHER_T;

typedef enum
{
    ADC_ADCMPR_CMPEN   = 0,        //比较使能
    ADC_ADCMPR_CMPIE   = 1,        //比较中断使能
    ADC_ADCMPR_CMPCOND   = 2,        //比较条件
    ADC_ADCMPR_CMPCH   = 3,        //Compare通道选择(000=选择通道0转换结果,111=选择通道7转换结果)
    ADC_ADCMPR_CMPMATCNT = 8,        //比较匹配值
    ADC_ADCMPR_CMPD      = 16 //比较数值
}NU_ADC_ADCMPR_ENUM;

typedef volatile union
{
NU_REG         Regs;
ADC_ADCMPR_T   Bits;
}NU_ADC_ADCMPR_T;

typedef enum
{
    ADC_ADSR_ADF          = 0,//A/D转换结束标志位
    ADC_ADSR_CMPF0      = 1,//比较标志位
    ADC_ADSR_CMPF1      = 2,//较标志位
    ADC_ADSR_BUSY         = 3,//BUSY/IDLE
    ADC_ADSR_CHANNEL      = 4,//当前转换通道
    ADC_ADSR_VALID   = 8,//数据有效标志位
    ADC_ADSR_OVERRUN = 16//结束运行标志位
}NU_ADC_ADSR_ENUM;

typedef volatile union
{
NU_REG         Regs;
ADC_ADSR_T   Bits;
}NU_ADC_ADSR_T;

typedef enum
{
    ADC_ADCALR_CALEN   = 0,//自身校准功能使能
    ADC_ADCALR_CALDONE = 1 //校准完成标志(只读)
}NU_ADC_ADCALR_ENUM;

typedef volatile union
{
NU_REG         Regs;
ADC_ADCALR_T   Bits;
}NU_ADC_ADCALR_T;

typedef struct
{
        union{
            __INU_ADC_ADDR_T      ADDR;//A/D数据寄存器0~7
                struct{
                    __INU_ADC_ADDR_TADDR0;//A/D数据寄存器0
                    __INU_ADC_ADDR_TADDR1;//A/D数据寄存器1
                    __INU_ADC_ADDR_TADDR2;//A/D数据寄存器2
                    __INU_ADC_ADDR_TADDR3;//A/D数据寄存器3
                    __INU_ADC_ADDR_TADDR4;//A/D数据寄存器4
                    __INU_ADC_ADDR_TADDR5;//A/D数据寄存器5
                    __INU_ADC_ADDR_TADDR6;//A/D数据寄存器6
                    __INU_ADC_ADDR_TADDR7;//A/D数据寄存器7
                };
        };
    __IO NU_ADC_ADCR_T      ADCR;//ADC控制寄存器
    __IO NU_ADC_ADCHER_T    ADCHER;//A/D 通道使能
        union{
            __IO NU_ADC_ADCMPR_T    ADCMPR;//A/D比较寄存器0,1
                struct{
              __IO NU_ADC_ADCMPR_T    ADCMPR0;//A/D比较寄存器0
              __IO NU_ADC_ADCMPR_T    ADCMPR1;//A/D比较寄存器1
                };
        };
    __IO NU_ADC_ADSR_T      ADSR;//ADC状态寄存器
    __IO NU_ADC_ADCALR_T    ADCALR;//A/D校准寄存器
    __INU_REG             RESERVE0;
    __INU_REG             RESERVE1;
    __INU_REG             RESERVE2;
}NU_ADC_T;
//----------------------------------------------------//
#define ADCs    (*((NU_ADC_T *) ADC_BASE))//定位全局结构变量ADCs
//----------------------------------------------------//
#define ADCx   ((NU_ADC_T *)ADC_BASE)
//----------------------------------------------------//
typedef volatile union
{
NU_REG            Regs;
PWM_PPR_T      Bits;
}NU_PWM_PPR_T;

typedef volatile union
{
NU_REG            Regs;
PWM_CSR_T      Bits;
}NU_PWM_CSR_T;

typedef volatile union
{
NU_REG            Regs;
PWM_PCR_T      Bits;
}NU_PWM_PCR_T;

typedef volatile union
{
NU_REG            Regs;
PWM_PIER_T      Bits;
}NU_PWM_PIER_T;

typedef volatile union
{
NU_REG            Regs;
PWM_PIIR_T      Bits;
}NU_PWM_PIIR_T;

typedef volatile union
{
NU_REG            Regs;
PWM_CCR0_T      Bits;
}NU_PWM_CCR0_T;

typedef volatile union
{
NU_REG            Regs;
PWM_CCR2_T      Bits;
}NU_PWM_CCR2_T;

typedef volatile union
{
NU_REG            Regs;
PWM_POE_T         Bits;
}NU_PWM_POE_T;

typedef struct
{
    __IO NU_PWM_PPR_T    PPR;//PWM0~3或PWM4~7预分频寄存器
    __IO NU_PWM_CSR_T    CSR;//PWM0~3或PWM4~7时钟选择寄存器
    __IO NU_PWM_PCR_T    PCR;//PWM0~3或PWM4~7控制寄存器
    __IO NU_REG_BITs   CNR0;//PWM0或PWM4计数器寄存器
    __IO NU_REG_BITs   CMR0;//PWM0或PWM4比较寄存器
    __IO NU_REG_BITs   PDR0;//PWM0或PWM4数据寄存器
    __IO NU_REG_BITs   CNR1;//PWM1或PWM5计数器寄存器
    __IO NU_REG_BITs   CMR1;//PWM1或PWM5比较寄存器
    __IO NU_REG_BITs   PDR1;//PWM1或PWM5数据寄存器
    __IO NU_REG_BITs   CNR2;//PWM2或PWM6计数器寄存器
    __IO NU_REG_BITs   CMR2;//PWM2或PWM6比较寄存器
    __IO NU_REG_BITs   PDR2;//PWM2或PWM6数据寄存器
    __IO NU_REG_BITs   CNR3;//PWM3或PWM7计数器寄存器
    __IO NU_REG_BITs   CMR3;//PWM3或PWM7比较寄存器
    __IO NU_REG_BITs   PDR3;//PWM3或PWM7数据寄存器
    __I NU_REG         RESERVE0;
    __IO NU_PWM_PIER_T   PIER;//PWM0~3或PWM4~7中断使能寄存器
    __IO NU_PWM_PIIR_T   PIIR;
    __I NU_REG         RESERVE1;
    __IO NU_PWM_CCR0_T   CCR0;
    __IO NU_PWM_CCR2_T   CCR2;
    __IO NU_REG_BITs   CRLR0;
    __IO NU_REG_BITs   CFLR0;
    __IO NU_REG_BITs   CRLR1;
    __IO NU_REG_BITs   CFLR1;
    __IO NU_REG_BITs   CRLR2;
    __IO NU_REG_BITs   CFLR2;
    __IO NU_REG_BITs   CRLR3;
    __IO NU_REG_BITs   CFLR3;
    __IO NU_REG_BITs   CAPENR;
    __IO NU_PWM_POE_T    POE;   
}NU_PWM_T;
//----------------------------------------------------//
#define PWM03s    (*((NU_PWM_T *) PWMA_BASE))//定位全局结构变量PWM03s
#define PWM47s    (*((NU_PWM_T *) PWMB_BASE))//定位全局结构变量PWM47s
//----------------------------------------------------//
#define PWMx(x)   ((NU_PWM_T *)PWMA_BASE   + (x * 0x100000))
//----------------------------------------------------//
typedef enum
{
    SYSCLK_PWRCON_XTL12M_EN    = 0,//外部12MHz晶振控制
    SYSCLK_PWRCON_XTL32K_EN    = 1,//外部32.768KHz晶振控制
    SYSCLK_PWRCON_OSC22M_EN    = 2,//内部22MHz振荡器控制
    SYSCLK_PWRCON_OSC10K_EN    = 3,//内部10KHz振荡器控制
    SYSCLK_PWRCON_PD_WU_DLY    = 4,//使能唤醒延时计数器
    SYSCLK_PWRCON_PD_WU_INT_EN = 5,//掉电模式唤醒的中断使能
    SYSCLK_PWRCON_PD_WU_STS    = 6,//芯片掉电唤醒状态标志
    SYSCLK_PWRCON_PWR_DOWN   = 7,//激活或使能系统掉电模式
    SYSCLK_PWRCON_PD_WAIT_CPU= 8 //控制进入掉电模式的条件
}NU_SYSCLK_PWRCON_ENUM;

typedef volatile union
{
NU_REG         Regs;
SYSCLK_PWRCON_T   Bits;
}NU_SYSCLK_PWRCON_T;

typedef enum
{
    SYSCLK_AHBCLK_PDMA_EN= 1,//PDMA控制器时钟使能控制
    SYSCLK_AHBCLK_ISP_EN   = 2,//Flash ISP控制器时钟使能控制
        SYSCLK_AHBCLK_EBI_EN   = 3 //
}NU_SYSCLK_AHBCLK_ENUM;

typedef volatile union
{
NU_REG            Regs;
SYSCLK_AHBCLK_T   Bits;
}NU_SYSCLK_AHBCLK_T;

typedef enum
{
    SYSCLK_APBCLK_WDT_EN   = 0,//Watch Dog时钟使能
    SYSCLK_APBCLK_RTC_EN   = 1,//Real-Time-Clock APB接口时钟控制
    SYSCLK_APBCLK_TMR0_EN= 2,//Timer0时钟使能控制
    SYSCLK_APBCLK_TMR1_EN= 3,//Timer1时钟使能控制
    SYSCLK_APBCLK_TMR2_EN= 4,//Timer2时钟使能控制
    SYSCLK_APBCLK_TMR3_EN= 5,//Timer3时钟使能控制
    SYSCLK_APBCLK_FDIV_EN= 6,//分频器输出时钟使能控制
    SYSCLK_APBCLK_I2C0_EN= 8,//I2C0时钟使能控制
    SYSCLK_APBCLK_I2C1_EN= 9,//I2C1时钟使能控制
    SYSCLK_APBCLK_SPI0_EN= 12,//SPI0时钟使能控制
    SYSCLK_APBCLK_SPI1_EN= 13,//SPI1时钟使能控制
    SYSCLK_APBCLK_SPI2_EN= 14,//SPI2时钟使能控制
    SYSCLK_APBCLK_SPI3_EN= 15,//SPI3时钟使能控制
    SYSCLK_APBCLK_UART0_EN = 16,//UART0时钟使能控制
    SYSCLK_APBCLK_UART1_EN = 17,//UART1时钟使能控制
        SYSCLK_APBCLK_UART2_EN = 18,//UART2时钟使能控制
    SYSCLK_APBCLK_PWM01_EN = 20,//PWM_01时钟使能控制
    SYSCLK_APBCLK_PWM23_EN = 21,//PWM_23时钟使能控制
        SYSCLK_APBCLK_PWM45_EN = 22,//PWM_45时钟使能控制
    SYSCLK_APBCLK_PWM67_EN = 23,//PWM_67时钟使能控制
    SYSCLK_APBCLK_CAN0_EN = 24,//使能CAN线控制器0时钟控制
    SYSCLK_APBCLK_USBD_EN = 27,//USB FS设备控制器时钟使能控制
    SYSCLK_APBCLK_ADC_EN = 28,//使能ADC时钟控制
        SYSCLK_APBCLK_I2S_EN = 29,//I2S时钟使能控制
    SYSCLK_APBCLK_ACMP_EN = 30,//模拟比较器时钟使能控制
    SYSCLK_APBCLK_PS2_EN = 31//PS2时钟使能控制
}NU_SYSCLK_APBCLK_ENUM;

typedef volatile union
{
NU_REG            Regs;
SYSCLK_APBCLK_T   Bits;
}NU_SYSCLK_APBCLK_T;

typedef enum
{
    SYSCLK_CLKSTATUS_XTL12M_STB= 0,
        SYSCLK_CLKSTATUS_XTL32K_STB= 1,
    SYSCLK_CLKSTATUS_PLL_STB   = 2,
        SYSCLK_CLKSTATUS_OSC10K_STB= 3,
        SYSCLK_CLKSTATUS_OSC22M_STB= 4,
    SYSCLK_CLKSTATUS_RESERVE0    = 5,
        SYSCLK_CLKSTATUS_CLK_SW_FAIL = 7
}NU_SYSCLK_CLKSTATUS_ENUM;

typedef volatile union
{
NU_REG            Regs;
SYSCLK_CLKSTATUS_TBits;
}NU_SYSCLK_CLKSTATUS_T;

typedef enum
{
    SYSCLK_CLKSEL0_HCLK_S= 0,
    SYSCLK_CLKSEL0_STCLK_S = 3
}NU_SYSCLK_CLKSEL0_ENUM;

typedef volatile union
{
NU_REG            Regs;
SYSCLK_CLKSEL0_T    Bits;
}NU_SYSCLK_CLKSEL0_T;

typedef enum
{
    SYSCLK_CLKSEL1_WDT_S   = 0,//WDGCLK时钟源选择
    SYSCLK_CLKSEL1_ADC_S   = 1,//ADC时钟源选择
    SYSCLK_CLKSEL1_TMR0_S= 8,//TIMER0时钟源选择
    SYSCLK_CLKSEL1_TMR1_S= 12,//TIMER1时钟源选择
    SYSCLK_CLKSEL1_TMR2_S= 16,//TIMER2时钟源选择
    SYSCLK_CLKSEL1_TMR3_S= 20,//TIMER3时钟源选择
    SYSCLK_CLKSEL1_UART_S= 24,//UART时钟源选择
    SYSCLK_CLKSEL1_CAN_S   = 26,//CAN时钟源选择
    SYSCLK_CLKSEL1_PWM01_S = 28,//PWM1与PWM0的时钟源选择
    SYSCLK_CLKSEL1_PWM23_S = 30 //PWM3与PWM2的时钟源选择.
}NU_SYSCLK_CLKSEL1_ENUM;

typedef volatile union
{
NU_REG            Regs;
SYSCLK_CLKSEL1_T    Bits;
}NU_SYSCLK_CLKSEL1_T;

typedef enum
{
    SYSCLK_CLKDIV_HCLK_N    = 0,//HCLK时钟频率=(HCLK时钟源频率)/(HCLK_N+1)
    SYSCLK_CLKDIV_USB_N   = 4,//USB时钟频率=(PLL频率)/(USB_N+1)
    SYSCLK_CLKDIV_UART_N    = 8,//UART时钟频率=(UART时钟源频率)/(UART_N+1)
    SYSCLK_CLKDIV_CAN_N   = 12,//APU时钟频率=(CAN时钟源频率)/(CAN_N+1)
    SYSCLK_CLKDIV_ADC_N   = 16,//ADC时钟频率=ADC时钟源频率/(ADC_N+1)
        SYSCLK_CLKDIV_CAN_N_EXT = 24//
}NU_SYSCLK_CLKDIV_ENUM;

typedef volatile union
{
NU_REG            Regs;
SYSCLK_CLKDIV_T    Bits;
}NU_SYSCLK_CLKDIV_T;

typedef enum
{
    SYSCLK_CLKSEL2_I2S_S    = 0,//I2S时钟源选择
    SYSCLK_CLKSEL2_FRQDIV_S = 2,//时钟分频器时钟源选择
        SYSCLK_CLKSEL2_PWM45_S= 4,//PWM4与PWM5的时钟源选择
    SYSCLK_CLKSEL2_PWM67_S= 6 //PWM6与PWM7的时钟源选择
}NU_SYSCLK_CLKSEL2_ENUM;

typedef volatile union
{
NU_REG            Regs;
SYSCLK_CLKSEL2_T    Bits;
}NU_SYSCLK_CLKSEL2_T;

typedef enum
{
    SYSCLK_PLLCON_FB_DV   = 0,//PLL反馈分频控制引脚
    SYSCLK_PLLCON_IN_DV   = 9,//PLL输入分频控制引脚
    SYSCLK_PLLCON_OUT_DV= 14,//PLL输出分频控制引脚
    SYSCLK_PLLCON_PD      = 16,//掉电模式
    SYSCLK_PLLCON_BP      = 17,//PLL旁路控制
    SYSCLK_PLLCON_OE      = 18,//PLL OE(FOUT enable)引脚控制
    SYSCLK_PLLCON_PLL_SRC = 19 //PLL时钟源选择
}NU_SYSCLK_PLLCON_ENUM;

typedef volatile union
{
NU_REG            Regs;
SYSCLK_PLLCON_T    Bits;
}NU_SYSCLK_PLLCON_T;


typedef enum
{
    SYSCLK_FRQDIV_FSEL    = 0,//分频器输出频率选择位
        SYSCLK_FRQDIV_FDIV_EN = 4 //频率分频器使能位
}NU_SYSCLK_FRQDIV_ENUM;

typedef volatile union
{
NU_REG            Regs;
SYSCLK_FRQDIV_T    Bits;
}NU_SYSCLK_FRQDIV_T;

typedef struct
{
    __IO NU_SYSCLK_PWRCON_T    PWRCON;//系统掉电控制寄存器
    __IO NU_SYSCLK_AHBCLK_T    AHBCLK;//AHB设备时钟使能控制寄存器
    __IO NU_SYSCLK_APBCLK_T    APBCLK;//APB设备时钟使能控制寄存器
    __IO NU_SYSCLK_CLKSTATUS_T CLKSTATUS;
    __IO NU_SYSCLK_CLKSEL0_T   CLKSEL0;//时钟源选择控制寄存器0
    __IO NU_SYSCLK_CLKSEL1_T   CLKSEL1;//时钟源选择控制寄存器1
    __IO NU_SYSCLK_CLKDIV_T    CLKDIV;//时钟分频寄存器
    __IO NU_SYSCLK_CLKSEL2_T   CLKSEL2;//时钟源选择控制寄存器2
        __IO NU_SYSCLK_PLLCON_T    PLLCON;//PLL 控制寄存器
        __IO NU_SYSCLK_FRQDIV_T    FRQDIV;//频率分频器控制寄存器
}NU_SYSCLK_T;
//----------------------------------------------------//
#define SYSCLKs    (*((NU_SYSCLK_T *) SYSCLK_BASE))//定位全局结构变量SYSCLKs
//----------------------------------------------------//
#define SYSCLKx   ((NU_SYSCLK_T *)SYSCLK_BASE)
//----------------------------------------------------//
typedef struct
{
__I NU_REG_BITs ISER;//IRQ0~IRQ31设置使能控制寄存器
__I NU_REG      RESERVED0;
__I NU_REG_BITs ICER;//IRQ0~IRQ31清使能控制寄存器
__I NU_REG      RSERVED1;
__I NU_REG_BITs ISPR;//IRQ0~IRQ31设置挂起控制寄存器
__I NU_REG      RESERVED2;
__I NU_REG_BITs ICPR;//IRQ0~IRQ31清挂起控制寄存器
__I NU_REG      RESERVED3;
__I NU_REG      RESERVED4;
union{
        __I NU_REG_BITs IPR;//IRQ0~IRQ31优先级控制寄存器
        struct{
                __I NU_REG_BITs IPR0;//IRQ0~IRQ3优先级控制寄存器
                __I NU_REG_BITs IPR1;//IRQ4~IRQ7优先级控制寄存器
                __I NU_REG_BITs IPR2;//IRQ8~IRQ11优先级控制寄存器
                __I NU_REG_BITs IPR3;//IRQ12~IRQ15优先级控制寄存器
                __I NU_REG_BITs IPR4;//IRQ16~IRQ19优先级控制寄存器
                __I NU_REG_BITs IPR5;//IRQ20~IRQ23优先级控制寄存器
                __I NU_REG_BITs IPR6;//IRQ24~IRQ27优先级控制寄存器
                __I NU_REG_BITs IPR7;//IRQ28~IRQ31优先级控制寄存器
        };
};
}NU_NVIC_Type;
//----------------------------------------------------//
#define NVICs    (*((NU_NVIC_Type *) NVIC_BASE))//定位全局结构变量NVICs
//----------------------------------------------------//
#define NVICx   ((NU_NVIC_Type *)NVIC_BASE)
//----------------------------------------------------//
typedef enum
{
    SCB_CPUID_REVISION = 0,//值为0x0
    SCB_CPUID_PARTNO = 4,//值为0xC20
    SCB_CPUID_PART = 16,//ARMv6-M值为0xC
    SCB_CPUID_IMPLEMENTER = 24,//由ARM分配执行码(ARM=0x41)
}NU_SCB_CPUID_ENUM;

typedef struct
{
    __INU_REGREVISION:4;
    __INU_REGPARTNO:12;
    __INU_REGPART:4;
    __INU_REGRESERVE:4;
    __INU_REGIMPLEMENTER:8;
}SCB_CPUID_T;

typedef volatile union
{
NU_REG      Regs;
SCB_CPUID_T   Bits;
}NU_SCB_CPUID_T;

typedef enum
{
        SCB_ICSR_VECTACTIVE = 0,//0:线程模式 value > 1: 当前执行异常处理的数目
        SCB_ICSR_VECTPENDING = 12,//表示最高优先级挂起异常的数目
    SCB_ICSR_ISRPENDING = 22,//表示外部配置中断是否挂起
    SCB_ICSR_ISRPREEMPT = 23,//如果置位,挂起异常生效,由调试停止状态退出
    SCB_ICSR_PENDSTCLR = 25,//写1清除挂起SysTick
    SCB_ICSR_PENDSTSET = 26,//设置挂起SysTick.由当前状态读回(1 if Pending,0 if not)
    SCB_ICSR_PENDSVCLR = 27,//写1清PendSV中断
    SCB_ICSR_PENDSVSET = 28,//设置PendSV 中断.通常用于请求内容切换.由当前状态读回(1 if Pending, 0 if not)
    SCB_ICSR_NMIPENDSET = 31//
}NU_SCB_ICSR_ENUM;

typedef struct
{
    __INU_REGVECTACTIVE:9;
    __INU_REGVECTPENDING:9;
    __INU_REGISRPENDING:1;
    __INU_REGISRPREEMPT:1;
    __INU_REGRESERVE1:1;
    __ONU_REGPENDSTCLR:1;
    __IO NU_REGPENDSTSET:1;
    __INU_REGPENDSVCLR:1;
    __IO NU_REGPENDSVSET:1;
    __INU_REGRESERVE2:2;
    __IO NU_REGNMIPENDSET:1;
}SCB_ICSR_T;

typedef volatile union
{
NU_REG      Regs;
SCB_ICSR_T    Bits;
}NU_SCB_ICSR_T;

typedef enum
{
    SCB_SCR_SLEEPONEXIT = 1,//设置为1,在异常返回到线程模式时,内核进入休眠状态
    SCB_SCR_SLEEPDEEP   = 2,//提示从休眠中唤醒需要较长时间
    SCB_SCR_SEVONPEND   = 4 //当使能时,中断由不活动到挂起,包括了唤醒事件(WFE指令)
}NU_SCB_SCR_ENUM;

typedef struct
{
    __INU_REGRESERVE0:1;
    __INU_REGSLEEPONEXIT:1;
    __INU_REGSLEEPDEEP:1;
    __INU_REGRESERVE1:1;
    __ONU_REGSEVONPEND:1;
    __INU_REGRESERVE2:27;
}SCB_SCR_T;

typedef volatile union
{
NU_REG      Regs;
SCB_ICSR_T    Bits;
}NU_SCB_SCR_T;

typedef struct
{
__INU_SCB_CPUID_T CPUID;//CPUID Base 寄存器
__IO NU_SCB_ICSR_TICSR;//中断控制状态寄存器
__INU_REG         RESERVED0;                                    
__IO NU_REG_BITs    AIRCR;
__IO NU_SCB_SCR_T   SCR;//系统控制寄存器
__IO NU_REG_BITs    CCR;
__INU_REG         RESERVED1;
union{                                    
        __IO NU_REG_BITs   SHP;//系统处理器优先级寄存器2和3
        struct{
                __IO NU_REG_BITs SHP2;//系统处理器优先级寄存器2
                __IO NU_REG_BITs SHP3;//系统处理器优先级寄存器3
        };
};
__IO NU_REG_BITs    SHCSR;
__INU_REG         RESERVED2;                                 
__IO NU_REG_BITs    DFSR;
}NU_SCB_Type;                                                
//----------------------------------------------------//
#define SCBs    (*((NU_SCB_Type *) SCB_BASE))//定位全局结构变量SCBs
//----------------------------------------------------//
#define SCBx   ((NU_SCB_Type *)SCB_BASE)
//----------------------------------------------------//
typedef enum
{
    SysTick_CTRL_TICKENABLE = 0,//
    SysTick_CTRL_TICKINT    = 1,//
    SysTick_CTRL_CLKSRC   = 2,//
    SysTick_CTRL_COUNTFLAG= 16//
}NU_SysTick_CTRL_ENUM;

typedef struct
{
    __IO NU_REGTICKENABLE:1;
    __IO NU_REGTICKINT:1;
    __IO NU_REGCLKSRC:1;
    __IO NU_REGRESERVE0:13;
    __IO NU_REGCOUNTFLAG:1;
    __IO NU_REGRESERVE1:15;
}SysTick_CTRL_T;

typedef volatile union
{
NU_REG         Regs;
SysTick_CTRL_T Bits;
}NU_SysTick_CTRL_T;

typedef enum
{
    SysTick_LOAD_RELOAD = 0,//当计数器达到0时,值加载到当前值寄存器
}NU_SysTick_LOAD_ENUM;

typedef struct
{
    __IO NU_REGRELOAD:24;
    __IO NU_REGRESERVE:8;
}SysTick_LOAD_T;

typedef volatile union
{
NU_REG         Regs;
SysTick_LOAD_T Bits;
}NU_SysTick_LOAD_T;

typedef enum
{
    SysTick_VAL_CURRENT = 0,//当前计数值,为采样时刻的计数器的值
}NU_SysTick_VAL_ENUM;

typedef struct
{
    __IO NU_REGCURRENT:24;
    __IO NU_REGRESERVE:8;
}SysTick_VAL_T;

typedef volatile union
{
NU_REG         Regs;
SysTick_VAL_T Bits;
}NU_SysTick_VAL_T;

typedef struct
{
__IO NU_SysTick_CTRL_T CTRL;//SysTick控制与状态
__IO NU_SysTick_LOAD_T LOAD;//SysTick重新加载值
__IO NU_SysTick_VAL_TVAL;//SysTick当前值
__INU_REG_BITs       CALIB;
}NU_SysTick_Type;
//----------------------------------------------------//
#define SysTicks    (*((NU_SysTick_Type *) SysTick_BASE))//定位全局结构变量SysTicks
//----------------------------------------------------//
#define SysTickx   ((NU_SysTick_Type *)SysTick_BASE)
//----------------------------------------------------//
typedef struct
{
__IO NU_REG_BITs DHCSR;
__ONU_REG_BITs DCRSR;
__IO NU_REG_BITs DCRDR;
__IO NU_REG_BITs DEMCR;
}NU_CoreDebug_Type;
//----------------------------------------------------//
#define CoreDebugs    (*((NU_CoreDebug_Type *) CoreDebug_BASE))//定位全局结构变量CoreDebugs
//----------------------------------------------------//
#define CoreDebugx   ((NU_CoreDebug_Type *)CoreDebug_BASE)
//----------------------------------------------------//



#ifdef __cplusplus
}
#endif

#endif/* __M051Seriescfg_H__ */

hotpower 发表于 2010-12-5 02:11:02

应用:Smpl_LED.c

/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* Copyright(c) 2009 Nuvoton Technology Corp. All rights reserved.                                       */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/
#include <stdio.h>
//#include "M051Seriescfg.h"
#include "M051Seriescfg.h"//加入菜农头文件
#include "Driver\DrvGPIO.h"
#include "Driver\DrvSYS.h"

void delay_loop(void)
{
        uint32_t j;
        for(j=0;j<60000;j++);               
        for(j=0;j<60000;j++);
        for(j=0;j<60000;j++);               
        for(j=0;j<60000;j++);
}


/*---------------------------------------------------------------------------------------------------------*/
/* MAIN function                                                                                          */
/*---------------------------------------------------------------------------------------------------------*/   

int main (void)
{       
//        E_DRVGPIO_PIN sPinNumber;
        /* SYSCLK =>12Mhz*/
        UNLOCKREG();
//    SYSCLK->PWRCON.XTL12M_EN = 1;
    SYSCLKs.PWRCON.Bits.XTL12M_EN = 1;

        LOCKREG();
        /*set GP0 outpui*/
/*
        for(sPinNumber=E_PIN0;sPinNumber<=E_PIN7;sPinNumber++)
        {       
                DrvGPIO_Open(E_PORT0,sPinNumber, E_IO_OUTPUT);
                DrvGPIO_Open(E_PORT1,sPinNumber, E_IO_OUTPUT);
                DrvGPIO_Open(E_PORT2,sPinNumber, E_IO_OUTPUT);
                DrvGPIO_Open(E_PORT3,sPinNumber, E_IO_OUTPUT);
                DrvGPIO_Open(E_PORT4,sPinNumber, E_IO_OUTPUT);
        }       
*/
//        DrvGPIO_Open(E_PORT3,E_PIN6, E_IO_OUTPUT);
        PORT3s.PMD.Bits.PMD6 = E_IO_OUTPUT;
        while(1)
        {
                PORT3s.DOUT.Bits.Pin6 ^= 1;
                delay_loop();

/*
                for(sPinNumber=E_PIN0;sPinNumber<=E_PIN7;sPinNumber++)
                {
                        DrvGPIO_ClrBit(E_PORT0,sPinNumber);       
                        DrvGPIO_ClrBit(E_PORT1,sPinNumber);
                        DrvGPIO_ClrBit(E_PORT2,sPinNumber);
                        DrvGPIO_ClrBit(E_PORT3,sPinNumber);
                        DrvGPIO_ClrBit(E_PORT4,sPinNumber);
                }
*/
//                DrvGPIO_ClrBit(E_PORT3,E_PIN6);
//                P3s.DOUT.Bits.Pin6 = 0;
//                delay_loop();
/*
                for(sPinNumber=E_PIN0;sPinNumber<=E_PIN7;sPinNumber++)
                {
                        DrvGPIO_SetBit(E_PORT0,sPinNumber);       
                        DrvGPIO_SetBit(E_PORT1,sPinNumber);
                        DrvGPIO_SetBit(E_PORT2,sPinNumber);
                        DrvGPIO_SetBit(E_PORT3,sPinNumber);
                        DrvGPIO_SetBit(E_PORT4,sPinNumber);
                }
*/
//                DrvGPIO_SetBit(E_PORT3,E_PIN6);
//                P3s.DOUT.Bits.Pin6 = 1;
//                delay_loop();
               


        }



}

HYLG 发表于 2010-12-5 02:52:15

菜农紧跟流行趋势呀.

CoolBird007 发表于 2010-12-5 03:05:24

好长,好强@@@@@

hotpower 发表于 2010-12-5 03:20:18

用百度搜索“菜农M051学习笔记1”即可得到源码的压缩包。

hotpower 发表于 2010-12-5 03:25:49

这个头是在nuc1xxcfg.h的基础上用了两个小时改造的,只校验了GPIO等模块

因为俺只有研讨会的2个板子。

Fire_cow 发表于 2010-12-5 07:28:22

mark

phone 发表于 2010-12-5 11:13:41

hotpower 菜农,又回来啦。

armok 发表于 2010-12-5 11:14:58

mowin 发表于 2010-12-5 11:21:17

回复【7楼】phone
hotpower 菜农,又回来啦。
页: [1]
查看完整版本: 菜农M051学习笔记1