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:將原來的值與設置的值作“或”,可以將要設置的位設成相應的值,而其他位保持原來的值不變。