dispc_reg_in ,dispc_reg_out , dispc_reg_merge函数功能的分析
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.zzzyk.com
inl(addr)& ~mask:掩码取反与寄存器中的值作“与”运算,结果是要设置的位清0,其他位置不变;
val& mask:得到要设置位置0或1,其余都置0;
inl(addr) & ~mask) | (val & mask:将原来的值与设置的值作“或”,可以将要设置的位设成相应的值,而其他位保持原来的值不变。
补充:软件开发 , C语言 ,