6410(或2440)上, 向GPIO口写1(或置高) 的步骤是不是以下这样:
Port X Pull-up/down Register --> pull-up enabled (置高使能)
Port X Configuration Register --> 设置为 Output
Port X Data Register --> 向寄存器写1
pull-up是上拉电阻的意思。有时候使用是为了提高引脚的驱动能力等,并不是给引脚输出电平的必须步骤。一般在初始化的时候就设置了上拉电阻是否使能,不管你是置高置低。
一般的步骤是,写入端口的控制寄存器,配置引脚的功能(输出或者输入,或者是第三功能),然后操作数据寄存器。
个人理解是这样
// 置低
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);
示波器上没反应,是怎么回事?
SpiDelay(5); 这个数值加大,有可能是这个延时太短导致你的示波器看不出来。
另外pGPIOReg->GPODAT = (pGPIOReg->GPODAT & ~(0x1 < <1))|(0x1 < <1);
既然后边是或1,就没必要先把它清0,多余的操作。
是不是 别的线程在使用这些IO口 以致你改变之后 IO口立即变回原来的值
看看如果有 屏蔽下就可以的