[讨论] ADUC7060 之GPIO初始化

蓝雨夜   2011-9-15 23:04 楼主
/******************************************************************************
GPxCON是端口x(x为:0、1、2)的控制寄存器
GPxDAT 是端口x 的配置和数据寄存器
GPxSET 为端口x 的数据设置寄存器
GPxCLR 为端口x 的数据清除寄存器
对GPxPAR 寄存器编程,可分别控制端口0、1、2 的参数
******************************************************************************/
void Init_GPIO(void)
{
    //GPxDAT端口0 的配置和数据寄存器
    GP0DAT= DIR_7(IN)|DIR_6(IN)|DIR_5(IN)|DIR_4(IN)|DIR_3(IN)|DIR_2(IN)|DIR_1(IN)|DIR_0(IN)|//数据传输方向
            OUT_7(H) |OUT_6(H) |OUT_5(H) |OUT_4(H) |OUT_3(H) |OUT_2(H) |OUT_1(H) |OUT_0(H); //端口x 数据输出  
    //GPxCON是端口x(x为:0、1、2)的控制寄存器
    GP0CON0=P00_SS(0)       |           
            P01_SCLK_SCL(1) |
            P02_MISO(0)     |
            P03_MOSI_SDA(1) |
            P04_IRQ0_PWM1(0)|   
            P05_CTS(0)      |
            P06_RTS(0)      ;
            #ifdef SPI      //GPIO 引脚P0.0、P0.1、P0.2 和P0.3 的功能
                GP0KEY1=0x7;
                GP0CON1=0x1;    //SPI       
                GP0KEY2=0x13;
            #else
                GP0KEY1=0x7;
                GP0CON1=0x2;    //I2C
                GP0KEY2=0x13;   
            #endif
    GP0PAR= C7(_2mA)|C6(_2mA)|C5(_2mA)|C4(_2mA)|C3(_2mA)|C2(_2mA)|C1(_2mA)|C0(_2mA)|
            PD7(E)  |PD6(E)  |PD5(E)  |PD4(E)  |PD3(E)  |PD2(E)  |PD1(E)  |PD0(E)  ;
    //GP0SET= OUT_7(H) |OUT_6(H) |OUT_5(H) |OUT_4(H) |OUT_3(H) |OUT_2(H) |OUT_1(H) |OUT_0(H);
    //GP0CLR= OUT_7(H) |OUT_6(H) |OUT_5(H) |OUT_4(H) |OUT_3(H) |OUT_2(H) |OUT_1(H) |OUT_0(H);
   
    
   
    //端口1 的配置和数据寄存器
    GP1DAT= DIR_7(IN)|DIR_6(OUT)|DIR_5(IN)|DIR_4(IN)|DIR_3(IN)|DIR_2(IN)|DIR_1(OUT)|DIR_0(IN)|//数据传输方向
            OUT_7(H) |OUT_6(H) |OUT_5(H) |OUT_4(H) |OUT_3(H) |OUT_2(H) |OUT_1(H) |OUT_0(H); //端口x 数据输出
    GP1CON= P10_IRQ1_SIN_T0(1)  |
            P11_SOUT(1)         |
            P12_SYNC(0)         |
            P13_TRIP(0)         |
            P14_PWM2(0)         |
            P15_PWM3(0)         |
            P16_PWM4(0)         ;
    GP1PAR= C7(_2mA)|C6(_4mA)|C5(_2mA)|C4(_2mA)|C3(_2mA)|C2(_2mA)|C1(_2mA)|C0(_2mA)|
            PD7(E)  |PD6(E)  |PD5(E)  |PD4(E)  |PD3(E)  |PD2(E)  |PD1(E)  |PD0(E)  ;
    //GP1SET= OUT_7(H) |OUT_6(H) |OUT_5(H) |OUT_4(H) |OUT_3(H) |OUT_2(H) |OUT_1(H) |OUT_0(H);
    //GP1CLR= OUT_7(H) |OUT_6(H) |OUT_5(H) |OUT_4(H) |OUT_3(H) |OUT_2(H) |OUT_1(H) |OUT_0(H);
   
   
   
    //端口2 的配置和数据寄存器
    GP2DAT= DIR_1(IN)|DIR_0(IN)|//数据传输方向
            OUT_1(H) |OUT_0(H); //端口x 数据输出
   
    GP2CON= P20_IRQ2_PWM0_EXTCLK(0)     |
            P21_IRQ3_PWM5(0)            ;
    GP2PAR= C1(_2mA)|C0(_2mA)|
            PD1(E)  |PD0(E)  ;
    //GP2SET= OUT_1(H) |OUT_0(H);
    //GP2CLR= OUT_1(H) |OUT_0(H);
}

回复评论 (1)

如需要直接修改函数里的参数即可!

下面是宏定义!

/******************************************************************************
                GPIO 
******************************************************************************/
#define OUT 1
#define IN  0

#define H   1
#define L   0
 
#define _2mA    0
#define _4mA    1

#define E    0
#define D    1

#define DIR_7(x)   x<<31
#define DIR_6(x)   x<<30
#define DIR_5(x)   x<<29
#define DIR_4(x)   x<<28
#define DIR_3(x)   x<<27
#define DIR_2(x)   x<<26
#define DIR_1(x)   x<<25
#define DIR_0(x)   x<<24

#define OUT_7(x)   x<<23
#define OUT_6(x)   x<<22
#define OUT_5(x)   x<<21
#define OUT_4(x)   x<<20
#define OUT_3(x)   x<<19
#define OUT_2(x)   x<<18
#define OUT_1(x)   x<<17
#define OUT_0(x)   x<<16

#define P00_SS(x)           x<<0
#define P01_SCLK_SCL(x)     x<<4
#define P02_MISO(x)         x<<8
#define P03_MOSI_SDA(x)     x<<12
#define P04_IRQ0_PWM1(x)    x<<16   
#define P05_CTS(x)          x<<20
#define P06_RTS(x)          x<<24

#define P10_IRQ1_SIN_T0(x)  x<<0
#define P11_SOUT(x)         x<<4
#define P12_SYNC(x)         x<<8
#define P13_TRIP(x)         x<<12
#define P14_PWM2(x)         x<<16
#define P15_PWM3(x)         x<<20
#define P16_PWM4(x)         x<<24

#define P20_IRQ2_PWM0_EXTCLK(x) x<<0
#define P21_IRQ3_PWM5(x)        x<<4

#define C7(x)   x<<15
#define C6(x)   x<<14
#define C5(x)   x<<13
#define C4(x)   x<<12
#define C3(x)   x<<11
#define C2(x)   x<<10
#define C1(x)   x<<9
#define C0(x)   x<<8

#define PD7(x)   x<<7
#define PD6(x)   x<<6
#define PD5(x)   x<<5
#define PD4(x)   x<<4
#define PD3(x)   x<<3
#define PD2(x)   x<<2
#define PD1(x)   x<<1
#define PD0(x)   x<<0

[ 本帖最后由 蓝雨夜 于 2011-9-15 23:08 编辑 ]
点赞  2011-9-15 23:05
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复