好用的 STATUS register

Posted by: 邱小新 at 上午10:47 in

以往在寫 uart 的 putchar 函數時,都是用下列方式來寫。在初始化時還要先把 TI 設成 1。但是如此會造成 ES 中斷一直發生。只適合沒有開啟 ES 中斷程序來用。

void putchar(char value) { while (!TI); TI = 0; SBUF = value; }

若是改用下列方式來寫,初始化時不用把 TI 設成 1,ES 中斷就不會一直發生。但是如此會被 block,等到傳送完才繼續其它工作,對效能來說不是很好。適合需要開啟 ES 中斷程序來用。

void putchar(char value) { SBUF = value; while (!TI); TI = 0; }

W77E352 有一個 register 叫 STATUS(0xC5),它的 SPTA0 位元為 uart 傳送忙碌指標,當 TI 為 1 時,自動清成 0。在 W79E632 也有 STATUS register,但是卻沒有 SPTA0 位元,不知是否可用?

void putchar(char value) { while (STATUS & SPTA0); SBUF = value; } void uart_isr(void) interrupt (4) { if (TI) TI = 0; }

0 意見

張貼留言