8251 troubles
Brent Hilpert
hilpert at cs.ubc.ca
Mon Apr 28 16:22:08 CDT 2008
dwight elvey wrote:
>
> Hi
> The routines SETUP and COUT are ROM routines.
> SETUP passes the first byte to the clock generator and the
> remaining to the command port of the 8251. The command/status
> port is 1 while the data is 0.
> COUT sends text to a video board.
> The second COUT never seems to get executed?? I give plenty
> of time between characters because I send then manually.
> The board can do interrupt driven serial but that didn't seem to
> work so I went for the simpler polling method.
>
> DI
> CALL SETUP
> ; .DB $01F ; 9600
> ; .DB $01D ; 4800
> .DB $01B ; 2400
> ; .DB $019 ; 1200
> .DB $0AA ; SYNC
> .DB $0AA ; SYNC
> .DB $040 ; RESET
> .DB $0CE ; 2STOP, NO PARITY, 8BIT , X16
> .DB $010 ; CLEAR ERRORS
> .DB 0
>
> MVI A,$027 ; RTD, DTR AND REC-EN TX-EN
> OUT 1
>
> CALL TIN
>
> CALL COUT ; This works
>
> CALL TIN
>
> CALL COUT ; never gets here
> ......................................
>
> TIN:
> IN 1
> ANI 2
> JZ TIN
> IN 0
> RET
I have the datasheet for the 8251A but not the 8251 here, so just some guesses:
- perhaps the 8251 (as opposed to the A) requires the receiver to be re-enabled
(not a full reset) after receipt of each character (an 'explicit ack') (?).
- .. check the error flags to see if a framing error is occurring?
- .. try sending a stream of (best random) characters at full rate,
as opposed to just 2 manually? This might get around some framing
inconsistency or such to at least see if a subsequent character can be received.
- (may be inconsequential, but in the init sequence the two sync characters
are not preceded by a mode byte (perhaps SETUP does this internally?))
More information about the cctalk
mailing list