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初始化,可是只有上面那个函数可以使显示屏正常显示,下面的那个函数却无**常使显示屏工作。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答
清枫城主
1楼-- · 2019-07-17 17:22
 精彩回答 2  元偷偷看……
清枫城主
2楼-- · 2019-07-17 22:34
已发现问题所在  那就是其他的IO没有初始化  如果用    GpioCtrlRegs.GPADIR.all = 0xFFFF0000;  则刚好把其他的8个数据IO给初始化了  单独写的话  并没有把那8个IO给初始化  我分别把那8个IO也初始化设置后 可以正常使用了
清枫城主
3楼-- · 2019-07-18 00:53
void Init_Port(void)
{
        EALLOW;
        // 用户根据需要可以使能内部上拉或禁止.
        GpioCtrlRegs.GPAPUD.bit.GPIO18 = 0;   //  LCD_RS使能上拉
        GpioCtrlRegs.GPAPUD.bit.GPIO19 = 0;   //  LCD_RS使能上拉
        GpioCtrlRegs.GPAPUD.bit.GPIO20 = 0;   //  LCD_RS使能上拉
        GpioCtrlRegs.GPAPUD.bit.GPIO21 = 0;   //  LCD_RS使能上拉
        GpioCtrlRegs.GPAPUD.bit.GPIO22 = 0;   //  LCD_RS使能上拉
        GpioCtrlRegs.GPAPUD.bit.GPIO23 = 0;   //  LCD_RS使能上拉
        GpioCtrlRegs.GPAPUD.bit.GPIO24 = 0;   //  LCD_RS使能上拉
        GpioCtrlRegs.GPAPUD.bit.GPIO25 = 0;   //  LCD_RS使能上拉
        GpioCtrlRegs.GPAPUD.bit.GPIO26 = 0;   //  LCD_RS使能上拉
        GpioCtrlRegs.GPAPUD.bit.GPIO27 = 1;   //  LCD_EN禁止上拉
        GpioCtrlRegs.GPBPUD.bit.GPIO41 = 0;   //  蜂鸣器使能上拉
        /* 通过I/O功能选择寄存器配置通用I/O功能*/
        GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 0;   // GPIO模式
        GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 0;   //
        GpioCtrlRegs.GPAMUX2.bit.GPIO20 = 0;   // GPIO模式
        GpioCtrlRegs.GPAMUX2.bit.GPIO21 = 0;   // GPIO模式
        GpioCtrlRegs.GPAMUX2.bit.GPIO22 = 0;   // GPIO模式
        GpioCtrlRegs.GPAMUX2.bit.GPIO23 = 0;   // GPIO模式
        GpioCtrlRegs.GPAMUX2.bit.GPIO24 = 0;   // GPIO模式
        GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 0;   // GPIO模式
        GpioCtrlRegs.GPAMUX2.bit.GPIO26 = 0;   // GPIO模式
        GpioCtrlRegs.GPAMUX2.bit.GPIO27 = 0;   // GPIO模式
        GpioCtrlRegs.GPBMUX1.bit.GPIO41 = 0;   //

        /* 设置I/O口为输入引脚*/
//    GpioCtrlRegs.GPADIR.all = 0xFFFF0000;
        GpioCtrlRegs.GPADIR.bit.GPIO18 = 1;   // 输出模式
        GpioCtrlRegs.GPADIR.bit.GPIO19 = 1;   //
        GpioCtrlRegs.GPADIR.bit.GPIO20 = 1;   // 输出模式
        GpioCtrlRegs.GPADIR.bit.GPIO21 = 1;   // 输出模式
        GpioCtrlRegs.GPADIR.bit.GPIO22 = 1;   // 输出模式
        GpioCtrlRegs.GPADIR.bit.GPIO23 = 1;   // 输出模式
        GpioCtrlRegs.GPADIR.bit.GPIO24 = 1;   // 输出模式
        GpioCtrlRegs.GPADIR.bit.GPIO25 = 1;   // 输出模式
        GpioCtrlRegs.GPADIR.bit.GPIO26 = 1;   // 输出模式
        GpioCtrlRegs.GPADIR.bit.GPIO27 = 1;   // 输出模式
        GpioCtrlRegs.GPBDIR.bit.GPIO41 = 1;   //

        // 每个输入口可以有不同的输入限定
        // a) 输入与系统时钟 SYSCLKOUT同步
        // b) 输入被指定的采样窗口限定
        // c) 输入异步 (仅对外设输入有效)
        GpioCtrlRegs.GPAQSEL1.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;
}
zhangmangui
4楼-- · 2019-07-18 05:47
好的
清枫城主
5楼-- · 2019-07-18 08:35
已解决 解决答案在3、4楼
shenmu2012
6楼-- · 2019-07-18 13:36
 精彩回答 2  元偷偷看……

一周热门 更多>