fpaisheng 发表于 2011-8-21 23:12:51

(求助)DSP2808操作IO口的问题!

用DSP2808的GPIO做简单的方波测试,发现一个神马的问题:
         GpioDataRegs.GPADAT.bit.GPIO6=~GpioDataRegs.GPADAT.bit.GPIO6;
        GpioDataRegs.GPADAT.bit.GPIO7=~GpioDataRegs.GPADAT.bit.GPIO7;
        GpioDataRegs.GPADAT.bit.GPIO8=~GpioDataRegs.GPADAT.bit.GPIO8;
        GpioDataRegs.GPADAT.bit.GPIO9=~GpioDataRegs.GPADAT.bit.GPIO9;
        GpioDataRegs.GPADAT.bit.GPIO10=~GpioDataRegs.GPADAT.bit.GPIO10;
        GpioDataRegs.GPADAT.bit.GPIO11=~GpioDataRegs.GPADAT.bit.GPIO11;
        GpioDataRegs.GPADAT.bit.GPIO18=~GpioDataRegs.GPADAT.bit.GPIO18;
        GpioDataRegs.GPADAT.bit.GPIO19=~GpioDataRegs.GPADAT.bit.GPIO19;
这样子一位一位操作没有问题,能够产生需要的结果!
但是如果把它们放在一起,例如这样子:
           GpioDataRegs.GPADAT.all=(~(GpioDataRegs.GPADAT.all&0x000FC0));
        GpioDataRegs.GPADAT.all=(~(GpioDataRegs.GPADAT.all&0x0C0000));
就发现GPIO18、GPIO19、GPIO10几个不正常,如果中间插入6个nop指令就OK了,不知道是什么问题,是IO口的操作速度吗!
我是在做LCD的过程中发现这个问题的,DSP送出的数据没有办法正确地送到LCD,按照上面第二种方法的操作,如果延时不正确的话(多了少了都不行),就会出现本来是高电平的数据变成一个尖脉冲!请问,GPIO的操作有什么需要特殊注意的吗,例如在驱动LCD12864的过程中,数据的操作那些延时什么的有什么要考虑的!

carolxr 发表于 2011-8-22 13:10:28

你是要实现IO口取反?用GpioDataRegs.GPATOGGLE.all=0x000FC0 试试。

fpaisheng 发表于 2011-8-22 19:31:44

谢谢,试过了,一旦一起操作就有问题!如果操作6位有时还好,一旦8位一起操作就有几位输出是一个尖脉冲!

inspiriting 发表于 2013-7-26 16:34:26

本帖最后由 inspiriting 于 2013-7-26 16:37 编辑

我也遇到了类似这种情况,是连续操作2808相邻的两个GPIO(GPIO14\15),结果GPIO14一会儿是正脉冲一会是负脉冲,是编译器的问题还是硬件BUG?
参考楼主的经验后来改成:
GpioDataRegs.GPADAT.all = 0xC000;
或者
GpioDataRegs.GPADAT.bit.GPIO14 = 1;
for(i=1;i>=0;i--);
GpioDataRegs.GPADAT.bit.GPIO15 = 1;
任一种写方式解决了,但仍不知道原因在哪里?求解。

lbblsws 发表于 2013-7-28 16:41:18

inspiriting 发表于 2013-7-26 16:34 static/image/common/back.gif
我也遇到了类似这种情况,是连续操作2808相邻的两个GPIO(GPIO14\15),结果GPIO14一会儿是正脉冲一会是负脉 ...

GPADATA是用来读的寄存器,如果要写,请用GPASET,GPACLEAR,GPATOG……反正就这3个寄存器是能够连续地实现对IO口的写操作。
页: [1]
查看完整版本: (求助)DSP2808操作IO口的问题!