关于ARM寄存器设置的问题

来源:百度知道 编辑:UC知道 时间:2024/06/05 09:25:36
Ssize GPIO_LED_ioctl (XX,XX,xX,XX)
{
Switch(cmd)
{
//将GPFDAT寄存器中的4—7位置0
Case LED_ON:{GPFDAT&~(0xf<<4)|((~0x0f&0xf)<<4);
Break;
Case LED_OFF:{GPFDAT&~(0xf<<4)|((~0x00&0xf)<<4);
Break;
}
Return 0;
}

{GPFDAT&~(0xf<<4)|((~0x0f&0xf)<<4); 这句话什么意思啊??
0xf<<4 ? “<<”左移4位?? 能不能解释下??? 这句话怎么赋值给GPFDAT的?
赋值到这个寄存器的哪几位啊????
这样赋值有什么好处??
为什么不能直接赋值??

1.要根据硬件接线图来看才知道GPFDAT&~(0xf<<4)|((~0x0f&0xf)<<4); 是实现什么。
2.从逻辑分析,GPFDAT&~(0xf<<4)|((~0x0f&0xf)<<4); 表示
将GPFDAT寄存器中的4—7位置0,应该自己能分析出来吧!请看5。。
3.GPFDAT本生就是数据寄存器的地址,对它做位运算,就是改变寄存器中的值了。笨~
4.至于这样赋值的好处嘛,据我所知有3个,而其中之一就是避免一般的人懂得它在做什么。剩下2个?请看5。。
5.还是不懂?要多拿点分,偶才会答。嘿嘿~~