CPLD+SIMMを使ってUSBプロトコルの解析を!
VHDLを速習! XC95144XL+16MB・SIMMを使ってUSBプロトコルアナライザを作ってしまいました!
主目的は差し迫った事情からUSBプロトコルの解析をすることだったのですが、その手段として選んだのがコレ!
[第61回]
●PIC18F14K50のRead−modify−writeの怪(4)
前回からの続きです。
前回はLegacy8080のPIC18F14K50で発生した異常現象のウラを取るために、簡単なテスト回路とテストプログラムを使って確認をしてみました。
その結果は全く正常でした。
BCF PORTB,5 の実行によってもRB4の出力が反転するなどという異常現象は発生しませんでした。
ということになりますと、前回のテスト回路とLegacy8080の回路との間になにか相違点があるということになります。
しかし、Legacy8080のその部分の回路はシンプルなもので、RB4に特に大きな負荷がかかっているような回路ではありません(Legacy8080のその部分の回路図は[第56回]参照)。
ハードではないらしいということになりますと、それではソフトか?
ということになりますが、PIC18F14K50のプログラムにも特に怪しいところは見当たりません。
それじゃあ全くの謎ではないかと思われるかも知れませんが、実は前回のテストを始めるにあたって、ひょっとしたら、と思ったことがあります。
それはクロックの違いです。
Legacy8080に搭載しているPIC18F14K50はUSB通信を行なうため、48MHzという高い周波数で動作しています。
片や前回のテストでは「PICでUSBを」[第78回]で使ったテストプログラムをちょいと書き換えただけでしたので、とりあえずはそのときのテストと同じ16MHzクロックでした。
16MHzでは問題は発生しませんでしたが、ひょっとすると48MHzでは何かがおきるかもしれません。
しかし48MHzということになりますとクリスタルを外付けしなければなりません。
いやまあそれほど手間のかかることではありませんからそうしたってよいのですけれど、どうせですからこのままで、もう少し高いクロックで試してみたって無駄ではありませんでしょう。
PIC18F14K50は内蔵発振モードではCPUクロックを最高32MHzまで上げることができます(「PICでUSBを」[第79回]参照)。
それそれ。
それを試してみましょう。
ということでさっそく32MHzに変更したプログラムが下のリストです。
;;;pic p18f14k50 test program ;f14k50test2 ;10/5/21 ;14/6/1 6/2 ; ; #include<p18f14k50.inc> ;cpuclock=32MHz internal oscillator ; CONFIG FOSC = IRCCLKOUT,WDTEN=OFF,LVP=OFF;not WDT ; org 00 movlw 64;clock=8MHz,select Primary Clock movwf OSCCON movlw 40;PLL on for intosc=8MHz only movwf OSCTUNE clrf ANSEL;PORTA,PORTC are digital clrf ANSELH;PORTB,PORTC are digital clrf TRISA;porta=out clrf TRISB;portb=out clrf TRISC;portc=out ; movlw 0ff movwf PORTB loop bcf PORTB,4 bcf PORTB,5 xorwf PORTC bsf PORTB,4 bsf PORTB,5 goto loop ; end |