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

来源:互联网 发布:中国社会经济数据库 编辑:程序博客网 时间:2024/05/19 18:12

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;

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

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

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