搜索
bottom↓
回复: 2

分享菜农兄的M051学习笔记

[复制链接]

出0入0汤圆

发表于 2010-12-8 12:46:39 | 显示全部楼层 |阅读模式
将本文件拷贝到...\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_REG Regs;

__IO NU_BITs Bits;

}NU_REG_BITs;



typedef volatile union

{

__IO NU_REG Regs;

__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_T OFFD;//数字使能(高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[7];//保留,为了构造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[5];//GPIOs.Px[0].DOUT.Regs |= 1;GPIOs.Px[0].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;

};

};

__I NU_REG RESERVED0[16];

__IO NU_GPIO_DBNCECON_T DBNCECON;

__I NU_REG RESERVED1[15];

__I NU_REG RESERVED2[16];

__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 P0s GPIO0s

#define P1s GPIO1s

#define P2s GPIO2s

#define P3s GPIO3s

#define P4s GPIO4s

#define PORT0s GPIO0s

#define PORT1s GPIO1s

#define PORT2s GPIO2s

#define PORT3s GPIO3s

#define PORT4s GPIO4s

//----------------------------------------------------//



#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_BITs DATA;//接收发送数据

__I NU_REG_BITs RBR;//接收数据缓存寄存器

__O NU_REG_BITs THR;//发送保持寄存器

};

__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[2];//接收数据寄存器数组

struct{

NU_REG_BITs RX0;//接收数据寄存器低32位

NU_REG_BITs RX1;//接收数据寄存器高32位

};

};

NU_REG RESERVE1[2];//保留

union{

NU_REG_BITs TX[2];//数据发送寄存器数组

struct{

NU_REG_BITs TX0;//数据发送寄存器低32位

NU_REG_BITs TX1;//数据发送寄存器高32位

};

};

NU_REG RESERVE2[3];//保留

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{

__I NU_ADC_ADDR_T ADDR[8];//A/D数据寄存器0~7

struct{

__I NU_ADC_ADDR_T ADDR0;//A/D数据寄存器0

__I NU_ADC_ADDR_T ADDR1;//A/D数据寄存器1

__I NU_ADC_ADDR_T ADDR2;//A/D数据寄存器2

__I NU_ADC_ADDR_T ADDR3;//A/D数据寄存器3

__I NU_ADC_ADDR_T ADDR4;//A/D数据寄存器4

__I NU_ADC_ADDR_T ADDR5;//A/D数据寄存器5

__I NU_ADC_ADDR_T ADDR6;//A/D数据寄存器6

__I NU_ADC_ADDR_T ADDR7;//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[2];//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校准寄存器

__I NU_REG RESERVE0;

__I NU_REG RESERVE1;

__I NU_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[2];

__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_T Bits;

}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[31];

__I NU_REG_BITs ICER;//IRQ0~IRQ31清使能控制寄存器

__I NU_REG RSERVED1[31];

__I NU_REG_BITs ISPR;//IRQ0~IRQ31设置挂起控制寄存器

__I NU_REG RESERVED2[31];

__I NU_REG_BITs ICPR;//IRQ0~IRQ31清挂起控制寄存器

__I NU_REG RESERVED3[31];

__I NU_REG RESERVED4[64];

union{

__I NU_REG_BITs IPR[8];//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

{

__I NU_REG REVISION:4;

__I NU_REG PARTNO:12;

__I NU_REG PART:4;

__I NU_REG RESERVE:4;

__I NU_REG IMPLEMENTER: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

{

__I NU_REG VECTACTIVE:9;

__I NU_REG VECTPENDING:9;

__I NU_REG ISRPENDING:1;

__I NU_REG ISRPREEMPT:1;

__I NU_REG RESERVE1:1;

__O NU_REG PENDSTCLR:1;

__IO NU_REG PENDSTSET:1;

__I NU_REG PENDSVCLR:1;

__IO NU_REG PENDSVSET:1;

__I NU_REG RESERVE2:2;

__IO NU_REG NMIPENDSET: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

{

__I NU_REG RESERVE0:1;

__I NU_REG SLEEPONEXIT:1;

__I NU_REG SLEEPDEEP:1;

__I NU_REG RESERVE1:1;

__O NU_REG SEVONPEND:1;

__I NU_REG RESERVE2:27;

}SCB_SCR_T;



typedef volatile union

{

NU_REG Regs;

SCB_ICSR_T Bits;

}NU_SCB_SCR_T;



typedef struct

{

__I NU_SCB_CPUID_T CPUID;//CPUID Base 寄存器

__IO NU_SCB_ICSR_T ICSR;//中断控制状态寄存器

__I NU_REG RESERVED0;

__IO NU_REG_BITs AIRCR;

__IO NU_SCB_SCR_T SCR;//系统控制寄存器

__IO NU_REG_BITs CCR;

__I NU_REG RESERVED1;

union{

__IO NU_REG_BITs SHP[2];//系统处理器优先级寄存器2和3

struct{

__IO NU_REG_BITs SHP2;//系统处理器优先级寄存器2

__IO NU_REG_BITs SHP3;//系统处理器优先级寄存器3

};

};

__IO NU_REG_BITs SHCSR;

__I NU_REG RESERVED2[2];

__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_REG TICKENABLE:1;

__IO NU_REG TICKINT:1;

__IO NU_REG CLKSRC:1;

__IO NU_REG RESERVE0:13;

__IO NU_REG COUNTFLAG:1;

__IO NU_REG RESERVE1: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_REG RELOAD:24;

__IO NU_REG RESERVE: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_REG CURRENT:24;

__IO NU_REG RESERVE: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_T VAL;//SysTick当前值

__I NU_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;

__O NU_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__ */

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();

  



}



}

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2010-12-8 12:48:04 | 显示全部楼层
顶!!!MARK

出0入0汤圆

 楼主| 发表于 2010-12-8 21:02:32 | 显示全部楼层
还不错菜农
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 23:53

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表