主题 : 求助LCD程序不明白这个语句是什么意思? 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 709
精华: 1
发帖: 88
金钱: 595 两
威望: 131 点
综合积分: 196 分
注册时间: 2008-05-18
最后登录: 2018-02-08
楼主  发表于: 2009-10-16 22:15

 求助LCD程序不明白这个语句是什么意思?

rLCDSADDR1=(((U32)LCD_BUFFER>>22)<<21)|M5D((U32)LCD_BUFFER>>1);


这个LCD_BUFFER向右移22位,然后再后左移21位,这是什么作用的呀?怎么不直接向右移动一位行了,搞这么复杂是为什么呀?是不是把LCD_BUFFER清零,如果是的话为什么移22这个数值呢?这个数值22是根据什么得出来的呢?


谢谢大家
[ 此帖被maidilong在2009-10-17 20:27重新编辑 ]
级别: 侠客
UID: 709
精华: 1
发帖: 88
金钱: 595 两
威望: 131 点
综合积分: 196 分
注册时间: 2008-05-18
最后登录: 2018-02-08
1楼  发表于: 2009-10-17 20:26
没人给我说说吗?
one more time~ one more chance~
级别: 侠客
UID: 7776
精华: 1
发帖: 73
金钱: 675 两
威望: 503 点
综合积分: 166 分
注册时间: 2009-07-28
最后登录: 2020-06-08
2楼  发表于: 2009-10-17 20:40
看看是否循环右移~ 如果不是循环右移的话~ 呢么应该是清低20位~  并将21-32位进行除2~

应该可以写成 (x & fff0_0000) >> 1
no z no d
级别: 侠客
UID: 12281
精华: 1
发帖: 68
金钱: 750 两
威望: 79 点
综合积分: 156 分
注册时间: 2010-01-03
最后登录: 2015-08-09
3楼  发表于: 2010-04-09 20:41
这个是自己的理解,s3c2440文档关于寄存器LCDSADDR1介绍,不知道是不是这样的,呵呵
LCDSADDR1的LCDBANK[29:21]的值为A[30:22],而A[30:22]=((U32)LCD_BUFFER>>22);A表示ADDRESS
LCDSADDR1的LCDBASEU[20:0]的值位A[21:1],而A[21:1]=((U32)LCD_BUFFER>>1) &0x1fffff  //取低21 bits
所以,rLCDSADDR1=(LCDBANK)|(LCDBASEU)=(A[30:22]<<21)|(LCDBASEU)=(((U32)LCD_BUFFER>>22)<<21)|(((U32)LCD_BUFFER>>1) &0x1fffff)    ^_^  
嵌入式博大精深