The Internet Power Line Adapter - University of Queensland
The Internet Power Line Adapter - University of Queensland
The Internet Power Line Adapter - University of Queensland
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Home Automation, <strong>Power</strong> <strong>Line</strong>s and the <strong>Internet</strong> Quenten Alick<br />
TIC3 EQU $1014<br />
ADCTL EQU $1030<br />
ADR1 EQU $1031<br />
OPTION EQU $1039<br />
BAUD EQU $102B<br />
SCCR1 EQU $102C<br />
SCCR2 EQU $102D<br />
SCSR EQU $102E<br />
SCDR EQU $102F<br />
CONTROL EQU $8000 *LCD control<br />
DATA EQU $8001 *LCD data<br />
BIT0 EQU $01<br />
BIT1 EQU $02<br />
BIT2 EQU $04<br />
BIT3 EQU $08<br />
BIT4 EQU $10<br />
BIT5 EQU $20<br />
BIT6 EQU $40<br />
BIT7 EQU $80<br />
MASK1 EQU $80<br />
REG EQU $1000<br />
TIE EQU $88<br />
RECVEN EQU $24<br />
TRANSEN EQU $88<br />
*****************************<br />
* Variables<br />
*****************************<br />
ORG $0000<br />
COUNT RMB 1<br />
SCIFLAG RMB 1<br />
POINTER RMB 2<br />
POINTR2 RMB 2<br />
POINTR3 RMB 2<br />
DIVTMP RMB 2<br />
RCVCNT RMB 1<br />
TRNCNT RMB 1<br />
LENGTH RMB 1<br />
STORE FDB $0020<br />
*----------------------------<br />
* SCI interrupt vector<br />
*----------------------------<br />
ORG $00C4<br />
JMP SCIISR<br />
*----------------------------<br />
* SPI Interrupt vector<br />
*----------------------------<br />
*****************************<br />
ORG $C000 *Start <strong>of</strong> program<br />
*****************************<br />
*--------------------------------------------------------------------<br />
* init stack and other setup stuff<br />
*--------------------------------------------------------------------<br />
LDS #$00C3<br />
* setup IO ports for output only<br />
LDAA #$FF<br />
STAA DDRC<br />
STAA DDRD<br />
* init SCI interface, 9600, 8N1, recv<br />
LDAA #$30<br />
STAA BAUD<br />
LDAA #$00<br />
STAA SCCR1 * 8N1<br />
LDAA #RECVEN * enable recv w/ ints<br />
STAA SCCR2 * recv<br />
* STAA RDATA * set init state<br />
- 48 -<br />
* init the storage index and set input capture 2 for low -<br />
high<br />
LDX STORE<br />
STX POINTER<br />
STX POINTR2<br />
LDAA #BIT2<br />
STAA TCTL2<br />
* init variables<br />
CLR RCVCNT<br />
CLR TRNCNT<br />
CLR LENGTH<br />
CLI<br />
START LDX STORE<br />
STX POINTR3<br />
CLR COUNT<br />
* poll for a pushbutton on IC2 (PA1)<br />
LOOP LDY #TFLG1<br />
BRCLR 0,Y,#BIT1,LOOP<br />
LDAA #BIT1 * clear flag<br />
STAA TFLG1<br />
LDD #$0000<br />
LDAB LENGTH<br />
JSR DIVIDE<br />
INC COUNT<br />
LDX POINTR3<br />
LDAA 0,X * output the data<br />
STAA PORTB<br />
INX<br />
STX POINTR3<br />
* check if we have output all the data<br />
* reset variables if so otherwise move onto next data<br />
LDAA LENGTH<br />
INCA<br />
INCA<br />
CMPA COUNT<br />
BEQ START<br />
BRA LOOP<br />
***************************************************<br />
* SCI ISR<br />
***************************************************<br />
SCIISR LDAB SCSR<br />
STAB SCIFLAG *store flags for later checks<br />
* check for valid recv interrupt<br />
BRSET SCIFLAG,#BIT5,RECV<br />
* check for valid trans interrupt<br />
BRSET SCIFLAG,#BIT7,TRANS<br />
* else invalid interrupt<br />
BRA RTRN<br />
*---------------------------------------<br />
* valid receive interrupt<br />
*---------------------------------------<br />
RECV LDAB SCDR * read the data reg<br />
LDY POINTER * load the index pointer<br />
STAB 0,Y * store at index<br />
INC RCVCNT<br />
CHECK1 LDAB #$02 * check to see if<br />
CMPB RCVCNT * its the second packet<br />
BNE CHECK2 * if not then goto CHECK2...<br />
LDY POINTER * if it is the second packet<br />
LDAB 0,Y * we have the length byte