Академический Документы
Профессиональный Документы
Культура Документы
Freescale MCU/DSP
data format:
b0------------b7
Start Bit
1
Data Bits 5, 6, 7, 8
Parity Bit Even Odd or None
Stop Bit 1, 1.5, 2(at least)
Signals definitions
DTE
3
2
5
7
8
6
9
4
/ DCE
TxD
RxD
GND
RTS
CTS
DSR
DCD
DTR
out
in
out
in
in
in
out
Transmit Data
Receive Data
Require To Send
Clear To Send
Data Set Ready
Data Care Detected
Data Terminal Ready
out
in
out
in
in
in
out
TxD
RxD
GND
RTS
CTS
DSR
DCD
DTR
(Transmit Data )
(Receive Data)
(Ground)
(Require to Send)
(Clear to Send)
(Data Terminal Ready)
(Data Carry Detected)
(Data Set Ready)
GND
DSR
RTS
CTS
DCD
DTR
in
out
in
in
out
(Ground)
(Data Terminal Ready)
(Require to Send)
(Clear to Send)
$01
SOH
$09
NT
$11
DC1
$19
EM
$02
STX
$0A
LF
$12
DC2
$1A
SUB
$03
ETX
$0B
VT
$13
DC3
$1B
ESC
$04
EOT
$0C
FF
$14
DC4
$1C
FS
$05
ENQ
$0D
CR
$15
NAK
$1D
GS
$06
ACK
$0E
SO
$16
SYN
$1E
RS
$07
BEL
$0F
SI
$17
ETB
$1F
US
$
4
D
T
d
t
% &
5 6 7
E F G
U V W
e
f g
u v w
(
8
H
X
h
x
)
9
I
Y
i
y
*
:
J
Z
j
z
+ , . /
; < = > ?
K L M N O
[
\ ]
^ _
k l m n o
{ | }
~ DEL
EQU
EQU
$C8
$C9
Low
SCI0CR1
SCI0CR2
EQU
EQU
$CA
$CB
Control Register1
SCI Control Register 2
SCI0SR1
SCI0SR2
EQU
EQU
$CC
$CD
Status Register 1
Status Register 2(SCISR2
SCI0DRH
SCI0DRL
EQU
EQU
$CE
$CF
SCI Initialization
Setup communication protocol:
Reset
LOOPS=0
SCISWAI=0
RSRC =0
M=0
WARE=0
ILT =0
PE = 0
PT = 0
M WARE ILT PE
0
0
0
0
PT
0
B7
SCTIE
SCTIE=0
TCIE =0
SCRIE=0
IDLE =0
TE = 0
RE = 0
RWU =0
SBK = 0
# %00001100
SCI0CR2
; Initial SCI
; Enable T & R
Try if it works
#$9C
SCI0BDL
Discussion:
0 Not Valid!
Maximum baud Rate = ?
SCI Initialization
Already did in the debug
SCI0INIT LDAA #0C
; Initial SCI
STAA SCI0CR2
; Enable T & R
LDAA
#$9C
STAA SCI0BDL
CLR
SCI0CR1
TDRE
TC
TDRE=1,
TC
RDRF=1,
IDLE
OR
NF
FE
PE
5
RDRF
4
IDLE
OR
NF
FE
PE
Transmit
Read Status
No
If Empty?
Yes
*
OUTCH
CHKSTS
ORG
$2000
LDA
BITA
BEQ
STAB
RTS
#$80
SCI0SR1
CHKSTS
SCI0DRL
Send [B]
; TDRE is at bit7
; SCI0 Status Register
; If bit clear, check again
; Write Transmit Data to
Transmit
Read Status
No
If Empty?
Yes
*
OUTCH
ORG
$2000
BRCLR
STAB
RTS
SCI0SR1,#$80,*
SCI0DRL
;Write Transmit Data to
Send [B]
Use Macro in C :
#define get_char() {_asm BRCLR $CC,#$80,*; _asm STAB $CF ; }
OUTCH
*
OUTCH
CHKSTS
*
Or:
*
OUTCH
ORG
$2000
LDA
BITA
BEQ
STAB
RTS
#$80
SCI0SR1
CHKSTS
SCI0DRL
BRCLR
STAB
RTS
SCI0SR1,#$80,*
SCI0DRL
;Write Transmit Data to
; TDRE is at bit7
; SCI0 Status Register
; If bit clear, check again
; Write Transmit Data to
Write Out_char in C
#define
#define
SCI0SR1
SCI0DRL
0xcc;
0xcf;
Put_Char(char a)
{ while ((*SCI0SR1 & 0x80) == 0);
*SCI0DRL = c;
}
INCH
INCH BRCLR SCI0SR1,$20,INCH ;Check if keyboard hit
LDAB SCI0DRL
RTS
#define SCI0SR1 0xcc;
#define SCI0DRL 0xcf;
char get_char();
{ while ((*SCI0SR1 & 0x20) == 0);
return(*SCI0DRL); }
Use Macro:
#define get_char() {_asm BRCLR $CC,#$20,*; _asm LDAB $CF ; }
SCI Interrupts
There are 3 Interrupt sources in SCI:
Receive IRQ
Receiver Register Full Interrupt
Transmit IRQ
Transmit Register Empty Interrupt
Next Char can be written
SCTIE=1
TCIE =0
SCRIE=1
IDLE =0
TE = 0
RE = 0
RWU =0
SBK = 0
LDX
$EFD6
PSHX
RTS
*
*
FF8C
FFD6
FFFE
ORG
FDB
FDB
FDB
V1
V2
V3
V37
V38
V39
.
V56
V57
V58
FDB
FDB
FDB
FDB
FDB
FDB
EQU $CC
EQU $CF
; Status Reg.
; Data Reg.
SCI0ISR LDAA
SCI0SR1
; Clear IRQ !!!
LDAB
SCI0DRL
; Get the Char.
Put the char. Somewhere
RTI
ORG
DC.W
$EFD6
SCI0ISR
SP
SP - 9
free
SP - 8
free
SP - 7
free
SP - 6
free
SP - 5
free
SP - 4
free
SP - 3
free
SP - 2
free
SP - 1
free
SP
Low Address
Stock Growth
High Address
Before IRQ
SP
CCR
SP - 8
SP - 7
SP - 6
XH
SP - 5
XL
SP - 4
YH
SP - 3
YL
SP - 2
PCH
SP - 1
PCL
SP
Low Address
Stack Growth
High Address
After RTI
SP = SP+9
SP - 9
free
SP - 8
free
SP - 7
free
SP - 6
free
SP - 5
free
SP - 4
free
SP - 3
free
SP - 2
free
SP - 1
free
SP
Low Address
Stock Growth
High Address