CD2231

Manufacturer Part NumberCD2231
DescriptionCD2231 Intelligent Two-channel Lan And Wan Communications Controller
ManufacturerIntel Corporation
CD2231 datasheet
 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
Page 81
82
Page 82
83
Page 83
84
Page 84
85
Page 85
86
Page 86
87
Page 87
88
Page 88
89
Page 89
90
Page 90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
Page 85/178

Download datasheet (3Mb)Embed
PrevNext
Intelligent Two-Channel LAN and WAN Communications Controller — CD2231
7.1
Global Initialization
The following code segment is an example of global initialization. The host waits for a hardware
reset, determined by a non-zero value in the GFRCR (Global Firmware Revision Code register). A
‘RESET ALL’ command is sent to the CD2231 through the CCR (Channel Command register).
The internal processor puts a non-zero value into the GFRCR when initialization is complete. It is
recommended to manually clear the GFRCR before issuing the Reset All command, as it takes a
small amount of time for the internal processor to detect the command and clear the register. If the
host is sufficiently fast, it might read the GFRCR before the command execution commences and
incorrectly assumes the command is completed.
The Priority Interrupt Level registers should be loaded with the value of the seven address lines
(A[6:0]) during interrupt acknowledge cycles. The TPR (Timer Prescale register) loads the
dividing counter that inputs each of the other timers in the CD2231. The DMA Mode register and
the Bus Error Count register are used in DMA modes only. After the global portion is done, the
Per-Channel registers need to be initialized. Transfers and interrupts should be enabled after all
other initialization is complete.
// Global Initialization
while( !inportb( GFRCR ) )// wait for hardware reset
outportb( GFRCR, 0x00 );// manually clear GFRCR
outportb( CCR, RESET_ALL );// Reset command
while( !inportb( GFRCR ) ) // wait for reset command
outportb( PILR1, 0x02 );// Priority Interrupt
outportb( PILR2, 0x04 );// Level Registers
outportb( PILR3, 0x06 );
outportb( TPR, 0x40 ); // Set timer prescale
outportb( BERCNT, 0 ); // Bus error count
outportb( DMR, 0 );
// per-channel initialization
for( i=0; i<2; i++ ) {
outportb( CAR, i );// set channel number
init_chan( cor, bpr );// initialize channel
outportb( CCR, INIT_CH | EN_RX | EN_TX );
while( inportb(CCR) )
outportb( IER, TX_DATA|RX_DATA );// enable interrupts
}
7.2
Async Interrupt Setup Example
This section contains a code example for an asynchronous channel running at 19,200 bps, with 8
bits/character, 1 Stop bit, and no parity. The sample program enables In-Band Flow Control and
Implied Xon mode. This code assumes that the proper channel is set by the CAR (Channel Access
register).
outportb( LIVR, 0x40 );
outportb( RCOR, 0 );
outportb( RBPR, 0x81 );// Baud Rate divisor
outportb( TCOR, 0 );
outportb( TBPR, 0x81 );// Baud Rate divisor
Datasheet
; // wait
; // wait
// DMA mode — 16-bit
; // wait
// Receive clock option
// Transmit clock option
85