1. 程式人生 > >dispc_reg_in ,dispc_reg_out , dispc_reg_merge函式功能的分析

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

{

       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;

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