GPIO赋值控制问题

2019-07-17 15:33发布

基于DSP28335的问题
void Init_Port(void)
{
        EALLOW;   
// 用户根据需要可以使能内部上拉或禁止.
// 其他不需要的行注释掉;
    GpioCtrlRegs.GPAPUD.bit.GPIO19 = 0;    // 使能GPIO0 引脚内部上拉
    //GpioCtrlRegs.GPAPUD.bit.GPIO2 = 1;    // 禁止GPIO2 引脚内部上拉
    GpioCtrlRegs.GPAPUD.bit.GPIO18 = 1;   // 禁止GPIO1 引脚内部上拉

/* 通过I/O功能选择寄存器配置通用I/O功能*/
    GpioCtrlRegs.GPAMUX2.all = 0x000000;   // 配置GPIO0-GPIO15为通用I/O口


/* 设置I/O口为输入引脚*/
    GpioCtrlRegs.GPADIR.all = 0xFFFF0000;// 配置GPIO0-GPIO11为输出引脚

// 每个输入口可以有不同的输入限定
   // a) 输入与系统时钟 SYSCLKOUT同步
   // b) 输入被指定的采样窗口限定
   // c) 输入异步 (仅对外设输入有效)
   GpioCtrlRegs.GPAQSEL1.all = 0x0000;    // GPIO0-GPIO15与系统时钟SYSCLKOUT 同步
//输出数据LCD_RW和LCD_EN清零
   GpioDataRegs.GPADAT.bit.GPIO19 = 1;
   //GpioDataRegs.GPADAT.bit.GPIO2 = 0;
   GpioDataRegs.GPADAT.bit.GPIO18 = 0;
    EDIS;
}



void Init_Port(void)
{
        EALLOW;
        /* 通过I/O功能选择寄存器配置通用I/O功能*/
        GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 0;   // GPIO模式
        GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 0;   //
        GpioCtrlRegs.GPBMUX1.bit.GPIO41 = 0;   //

        // 用户根据需要可以使能内部上拉或禁止.
        GpioCtrlRegs.GPAPUD.bit.GPIO19 = 0;   //  LCD_RS使能上拉
        GpioCtrlRegs.GPAPUD.bit.GPIO18 = 1;   //  LCD_EN禁止上拉
        GpioCtrlRegs.GPBPUD.bit.GPIO41 = 0;   //  蜂鸣器使能上拉

        /* 设置I/O口为输入引脚*/
        GpioCtrlRegs.GPADIR.bit.GPIO19 = 1;   // 输出模式
        DELAY_US(500);
        GpioCtrlRegs.GPADIR.bit.GPIO18 = 1;   //
        DELAY_US(500);
        GpioCtrlRegs.GPBDIR.bit.GPIO41 = 1;   //

        // 每个输入口可以有不同的输入限定
        // a) 输入与系统时钟 SYSCLKOUT同步
        // b) 输入被指定的采样窗口限定
        // c) 输入异步 (仅对外设输入有效)
        GpioCtrlRegs.GPAQSEL2.all = 0x0000;    // GPIO0-GPIO15与系统时钟SYSCLKOUT 同步
        //输出数据LCD_RW和LCD_EN清零
        GpioDataRegs.GPADAT.bit.GPIO19 = 1;
        GpioDataRegs.GPADAT.bit.GPIO18 = 0;
        GpioDataRegs.GPBDAT.bit.GPIO41 = 0;   //关闭蜂鸣器

        EDIS;
}
这两个函数实现的功能一样,就是GPIO设置,设置为数字输出模式。这是LCD1602显示函数的IO初始化,可是只有上面那个函数可以使显示屏正常显示,下面的那个函数却无**常使显示屏工作。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。