GPIO赋值控制问题

[复制链接]
3706|15
 楼主| 清枫城主 发表于 2017-5-2 17:36 | 显示全部楼层 |阅读模式
基于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初始化,可是只有上面那个函数可以使显示屏正常显示,下面的那个函数却无**常使显示屏工作。
 楼主| 清枫城主 发表于 2017-5-2 17:37 | 显示全部楼层
void Init_Port(void)
{
        EALLOW;
        // 用户根据需要可以使能内部上拉或禁止.
        GpioCtrlRegs.GPAPUD.bit.GPIO19 = 0;   //  LCD_RS使能上拉
        GpioCtrlRegs.GPAPUD.bit.GPIO18 = 1;   //  LCD_EN禁止上拉
        GpioCtrlRegs.GPBPUD.bit.GPIO41 = 0;   //  蜂鸣器使能上拉
        /* 通过I/O功能选择寄存器配置通用I/O功能*/
        GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 0;   // GPIO模式
        GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 0;   //
        GpioCtrlRegs.GPBMUX1.bit.GPIO41 = 0;   //

        /* 设置I/O口为输入引脚*/
        GpioCtrlRegs.GPADIR.bit.GPIO19 = 1;   // 输出模式
        GpioCtrlRegs.GPADIR.bit.GPIO18 = 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;
}
这是最初始的,考虑到IO操作来不及反应,特意加了延时,结果还是不行
 楼主| 清枫城主 发表于 2017-5-2 19:34 | 显示全部楼层
已发现问题所在  那就是其他的IO没有初始化  如果用    GpioCtrlRegs.GPADIR.all = 0xFFFF0000;  则刚好把其他的8个数据IO给初始化了  单独写的话  并没有把那8个IO给初始化  我分别把那8个IO也初始化设置后 可以正常使用了
 楼主| 清枫城主 发表于 2017-5-2 19:36 | 显示全部楼层
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 发表于 2017-5-2 21:37 | 显示全部楼层
好的

评分

参与人数 1威望 +1 收起 理由
清枫城主 + 1 赞一个!

查看全部评分

 楼主| 清枫城主 发表于 2017-5-12 09:23 | 显示全部楼层
已解决 解决答案在3、4楼
shenmu2012 发表于 2017-5-12 22:02 | 显示全部楼层
初始化GPIO口的部分需要多注意的
backlugin 发表于 2017-5-12 23:02 | 显示全部楼层
这个没有什么问题,电压问题
sdCAD 发表于 2017-5-12 23:02 | 显示全部楼层
应该是硬件电路问题。
fengm 发表于 2017-5-12 23:02 | 显示全部楼层
初始化有问题?
10299823 发表于 2017-5-12 23:03 | 显示全部楼层
这个不就是LCD的引脚配置啊
backlugin 发表于 2017-5-12 23:04 | 显示全部楼层
GPIO设置要有足够的驱动能力。
sdCAD 发表于 2017-5-12 23:04 | 显示全部楼层
看看供电是否正确。
fengm 发表于 2017-5-12 23:04 | 显示全部楼层
读写速度不要很快,可能更新不上。
10299823 发表于 2017-5-12 23:04 | 显示全部楼层
使用引脚功能不同,LCD的驱动也不同。
 楼主| 清枫城主 发表于 2017-5-15 09:09 | 显示全部楼层
10299823 发表于 2017-5-12 23:04
使用引脚功能不同,LCD的驱动也不同。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

70

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部