ARM的串列埠工作原理 一個四捨五入寫法問題



串列埠初始化
/* 設置串列埠的FIFO屬性,並清除FIFO中的內容 */
rUFCON0=0xf7;
/* 關閉流控功能 */
rUMCON0=0x0;
/* 設置8位元資料位元、1位元停止位、無奇偶校驗串列埠模式 */
rULCON0=0x3;
/* 設置收發的中斷模式為電壓觸發,關閉超時功能 */
rUCON0=0x345;
/* 設置串列傳輸速率,pclk為CPU主頻,baud為串列傳輸速率 */
rUBRDIV0=( (int)(pclk/16./baud + 0.5) -1 );


上面 rUBRDIV0=( (int)(pclk/16./baud + 0.5) -1 ); 
目的是要除完取四捨五入
16. 是把它變浮點數
原公式是  rUBRDIV0 =( (int)(pclk/(16 * baud)) -1 );
上述寫法只是要取四捨五入
但部份編譯器會編譯錯誤
所以可改成


rUBRDIV0 ==( (int)(((pclk+(8 * baud))>>1-1)/(16 * baud)) -1 );
一樣達成四捨五入

arrow
arrow
    全站熱搜

    立你斯 發表在 痞客邦 留言(0) 人氣()