6410(或2440)上, 向GPIO口写1(或置高) 的步骤是不是以下这样:

shaowei1108   2010-2-23 11:07 楼主
  6410(或2440)上, 向GPIO口写1(或置高) 的步骤是不是以下这样:

    Port X Pull-up/down Register     --> pull-up enabled (置高使能)
    Port X Configuration Register    --> 设置为 Output
    Port X Data Register             --> 向寄存器写1
   

回复评论 (7)

pull-up是上拉电阻的意思。有时候使用是为了提高引脚的驱动能力等,并不是给引脚输出电平的必须步骤。一般在初始化的时候就设置了上拉电阻是否使能,不管你是置高置低。

一般的步骤是,写入端口的控制寄存器,配置引脚的功能(输出或者输入,或者是第三功能),然后操作数据寄存器。

个人理解是这样
点赞  2010-2-23 11:22
    // 置低
    pGPIOReg->GPLDAT = (pGPIOReg->GPLDAT & ~(0x1<<11));
    pGPIOReg->GPLDAT = (pGPIOReg->GPLDAT & ~(0x1<<12));
    pGPIOReg->GPODAT = (pGPIOReg->GPODAT & ~(0x1<<1));

        SpiDelay(5);

    // 置高
    pGPIOReg->GPLDAT = (pGPIOReg->GPLDAT & ~(0x1<<11))|(0x1<<11);
    pGPIOReg->GPLDAT = (pGPIOReg->GPLDAT & ~(0x1<<12))|(0x1<<12);
    pGPIOReg->GPODAT = (pGPIOReg->GPODAT & ~(0x1<<1))|(0x1<<1);  
        SpiDelay(5);

   示波器上没反应,是怎么回事?
点赞  2010-2-23 17:16
代码 没问题, 是不是初始化有问题?
点赞  2010-2-23 17:22
要如何初始化?谢谢.
点赞  2010-2-23 17:26
SpiDelay(5); 这个数值加大,有可能是这个延时太短导致你的示波器看不出来。
另外pGPIOReg->GPODAT = (pGPIOReg->GPODAT & ~(0x1 < <1))|(0x1 < <1);  
既然后边是或1,就没必要先把它清0,多余的操作。
点赞  2010-2-23 17:31
是不是 别的线程在使用这些IO口  以致你改变之后  IO口立即变回原来的值
看看如果有 屏蔽下就可以的
点赞  2010-2-23 17:51
引用: 引用 6 楼 nx427 的回复:
是不是 别的线程在使用这些IO口? 以致你改变之后? IO口立即变回原来的值
看看如果有 屏蔽下就可以的


如何屏蔽?
点赞  2010-2-23 19:07
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复