dispc_reg_in ,dispc_reg_out , dispc_reg_merge函数功能的分析

来源:岁月联盟 编辑:猪蛋儿 时间:2012-08-28

u32 dispc_reg_in(u32 offset)

{

       return (inl(offset));  //从端口读取4个连续的字节

}

该函数读取寄存器的值

 

u32 dispc_reg_out(u32 offset, u32 val)

{

       outl(val, offset); //向端口写入4个连续的字节

       return (val);

}

 该函数设置寄存器全部位的值

 

u32 dispc_reg_merge(u32 offset, u32 val, u32 mask)

{

       u32 addr = offset;

       u32 new_val = (inl(addr) &~mask) | (val & mask);

       outl(new_val, addr);

       return (new_val);

}

该函数设置寄存器指定哪些位的值,保留其他位的值不变。指定的位用mask表示。

mask:掩码,即要设置的位的掩码设为1,其余为0;www.2cto.com

inl(addr)& ~mask:掩码取反与寄存器中的值作“与”运算,结果是要设置的位清0,其他位置不变;

val& mask:得到要设置位置0或1,其余都置0;

inl(addr) & ~mask) | (val & mask:将原来的值与设置的值作“或”,可以将要设置的位设成相应的值,而其他位保持原来的值不变。

图片内容