Download thesis2 - AUS Masters Theses

Transcript
Appendix D: Microcontroller Code
210
/* I/P : get single character */
char SCI1 InChar(void) {
char c;
/* wait until there's data in the ring buffer */
while(RB EMPTY(&in));
/* get character off the buffer */
c = *RB POPSLOT(&in);
/* set write position to the next free slot */
RB POPADVANCE(&in);
return c;
} /* SCI1 InChar */
//−−−−−−−−−−−−−−−−−−−−−−−−−SCI1 Init−−−−−−−−−−−−−−−−−−−−−−−−
// Initialize Serial port SCI1
// Input: baudRate is tha baud rate in bits/sec
// Output: none
void SCI1 Init(unsigned short baudRate) {
/* set−up input and output ring buffers */
/* set up TX ring buffer */
RB INIT(&out, outbuf, 255);
RB INIT(&in, inbuf, 255);
/* set up RX ring buffer */
/* check if bus frequency has been boosted to 24 MHz (fw−07−04) */
#if BUSCLOCK == 24
/* 24 MHz bus frequency (PLL is used, SYNR = 2, REFDV = 0 −> factor 6)
Baud rate generator:
SCI1BDL/H = (24e6/16)/baudrate = 1.5e6/baudrate */
switch(baudRate){
case BAUD 300:
SCI1BDH=19;
SCI1BDL=136;
break;
case BAUD 600:
SCI1BDH=9;
SCI1BDL=196;
break;
case BAUD 1200:
SCI1BDH=4;
SCI1BDL=226;
break;
case BAUD 2400:
SCI1BDH=2;
SCI1BDL=113;
break;
case BAUD 4800:
SCI1BDH=1;
SCI1BDL=56;
break;
case BAUD 9600: