シリアルコントローラには定番の8251を使っていますが
動作クロックを決めるのが多少厄介です
動作クロックを決めるのが多少厄介です
ボーレートを38400bpsとした場合、
非同期通信なので内部分周比は×16または×64を選択することになりますが
使用した三菱M82C51APFでは、送受信クロックの最大値が615kHzとなっているので×16として
614.4kHzをTxC、RxCに与えます。これは4.9152MHzの水晶の出力を8分周して得られます。
一方メインクロックは送受信クロックの5倍以上、且つデバイスの動作上限6.25MHz以下と規定されて
いるのでこれは5MHzとし、DSPマスタクロック用水晶40MHzを8分周して得ました。
ここはCPLD内の分周用カウンタのタップを切替えるだけで済みますが
非同期通信なので内部分周比は×16または×64を選択することになりますが
使用した三菱M82C51APFでは、送受信クロックの最大値が615kHzとなっているので×16として
614.4kHzをTxC、RxCに与えます。これは4.9152MHzの水晶の出力を8分周して得られます。
一方メインクロックは送受信クロックの5倍以上、且つデバイスの動作上限6.25MHz以下と規定されて
いるのでこれは5MHzとし、DSPマスタクロック用水晶40MHzを8分周して得ました。
ここはCPLD内の分周用カウンタのタップを切替えるだけで済みますが
今思えば送受信クロックに5MHzを分周した625kHzを使ってもボーレートは+1.7%くらいのずれなので
水晶は1個でも良かったといえます
水晶は1個でも良かったといえます
リカバリタイム確保のためにリピート命令でNOPを挿入しています
1 ************************************************* 2 * TMS320C25 SIO_TEST C25SIO.asm * 3 ************************************************* 4 5 0000 .bss tmp, 1 6 0001 .bss txdata, 1 7 0002 .bss rxdata, 1 8 9 DELAY .macro 10 RPTK 32 11 NOP 12 .endm 13 14 0000 .text 15 16 0000 c900 LDPK 100h 17 0001 fe80 CALL INIT 0002 000d' 18 0003 6001- LOOP SACL txdata 19 0004 e201- OUT txdata,PA2 20 0005 ce0c RXF 21 0006 fe80 CALL SEND 0007 0023' 22 0008 ce0d SXF 23 0009 2001- LAC txdata 24 000a cc01 ADDK 1 25 000b ff80 B LOOP 000c 0003' 26 27 000d ca00 INIT LACK 0 28 000e fe80 CALL CMDSET 000f 001e' 29 0010 fe80 CALL CMDSET 0011 001e' 30 0012 fe80 CALL CMDSET 0013 001e' 31 0014 ca40 LACK 040h ;command RESET 32 0015 fe80 CALL CMDSET 0016 001e' 33 0017 ca4e LACK 04eh ;mode 1stopbit,parity disable,8bitchar,*16 34 0018 fe80 CALL CMDSET 0019 001e' 35 001a ca37 LACK 037h ;command RTS,DTR=ON,ERRreset,TXRXenable 36 001b fe80 CALL CMDSET 001c 001e' 37 001d ce26 RET 38 * 39 001e 6000- CMDSET SACL tmp 40 001f e100- OUT tmp,pa1 41 0020 DELAY 1 0020 cb20 RPTK 32 1 0021 5500 NOP 42 0022 ce26 RET 43 44 0023 8100- SEND IN tmp,pa1 45 0024 ca01 LACK 1 46 0025 4e00- AND tmp 47 0026 f680 BZ SEND 0027 0023' 48 0028 e001- OUT txdata,pa0 49 0029 DELAY 1 0029 cb20 RPTK 32 1 002a 5500 NOP 50 002b ce26 RET 51 52 002c 8100- RECV IN tmp,pa1 53 002d ca02 LACK 2 54 002e 4e00- AND tmp 55 002f f680 BZ RECV 0030 002c' 56 0031 8002- IN rxdata,pa0 57 0032 DELAY 1 0032 cb20 RPTK 32 1 0033 5500 NOP 58 0034 caff LACK 0ffh 59 0035 4e02- AND rxdata 60 0036 6002- SACL rxdata 61 0037 ce26 RET 62 63 .end
ようやくシリアルの正常動作が確認できました。10ビット分で確かに約3.84kHzとなっています
振幅も約±10Vで問題ありません
振幅も約±10Vで問題ありません