Lynx-EyEDの電音鍵盤 新館

制御とか数学とか駄文とか

PSoC4 Pioneer Kitでtelnet

何か作ろう

PSoC4 Pioneer KitキャンペーンPSoC 4 Pioneer Kitキャンペーン PSoC 4でデザインしよう!使ってみたいデザイン案を投稿して、無償でキットをゲット!の応募に当選しちゃいました。
f:id:Lynx-EyED:20131019230059j:plain
ありがとうございます!!(中野の方角向きながら

Cortex-M0ということで、すこし遊べるでしょう。

UARTの出力がUSBからでてこない

動かなくてうんうん唸ってましたが、マニュアル見ろってはなしでしたw
http://www.cypress.com/?docID=43713のp.61~
f:id:Lynx-EyED:20131019232510p:plain
ジャンパでPSoC5LPと配線してあげる必要があるみたいです。
ArduinoのD0(P0.4),D1(P0.5)以外にも接続可能な箇所があります。

Systickの割り込みってどうやれば

OSやらフレームワークやら移植するのにCortex-MシリーズはSystickから1msecタイマーを作ることが多いですが、PSoC4でどうやれば良いのか分からなかったので調べてみました。
PSoC4 SysTick interrupt-サイプレス
ここによるとVector#15がsystickの割り込みなので、1msecごとに割り込みを発生させてmsTicksをカウントアップするには以下の様にすれば良いはずです。メインルーチンからsetup_systickをコールしてやります。

int msTicks;
void SysTick_Handler(void) {
  msTicks++;                        /* increment counter necessary in Delay() */
}

void setup_systick (void) {

         CyIntSetSysVector(15,SysTick_Handler);

        // 1msecごとに割り込み
        if (SysTick_Config( (システムクロックの値) / 1000)) { 
                while (1);                                  /* Capture error */
        }
        CyGlobalIntEnable; 

}

W5100のEthernetシールドで遊ぶ

Element14のページにEthernet shieldのWebServerのサンプルがあります。
PSoC 4 Pioneer Kit Community Project#031 – Ethernet Shield - element14
さくっと動かそうとしたのですが、動きません。動かなくてうんうん唸ってましたが、写真にあったw
イーサーネットシールドは6ピンのICSP端子からしかSPIは接続されていない模様。
イーサーネットシールドの回路図
なので、6ピンを半田付けします。
f:id:Lynx-EyED:20131019235233p:plain
さて、Element14のサンプルそのままでも使えない事は無いのですが、やたらめったらArduinoライブラリがくっついてくるので収拾がつかなく、他のプロジェクトに転用できない感じです。
ちなみに純正ドライバ↓
Innovative Embedded Networking : Device Server, WiFi, Ethernet | WIZnet Co. Ltd.


Wiznetの純正ドライバを元に、低レイヤーをC、アプリケーションに近いレイヤーをC++で記述しました。
lynxeyed-atsu/W5100_PSoC4_telnet_test · GitHub

他のデバイスに移植したい場合、device_depend.cを該当デバイス用ドライバに書き換えれば動作するはずです。

main.cppのIPアドレスはご自分の環境に書き換えてください。自分の場合は169.254.22.31にしました。

// Network Settigs
uint8 mac[] = { 0x90, 0xA2, 0xDA, 0x0E, 0xA0, 0x8A };
uint8 ip[] = { 169, 254, 22, 31 };

// use port 23:Telnet
Server server = Server(23);

動作中の図。I2Cポートから何やらジャンパーが生えてますが、PSoC4のUARTです。この箇所にUARTを割り当ててます。
f:id:Lynx-EyED:20131020000823j:plain

■telnetループバック
TeraTermを立ち上げまして、
f:id:Lynx-EyED:20131020002951p:plain

telnetでループバックします。キーボードの入力をディスプレーに出力します
f:id:Lynx-EyED:20131020003222p:plain
はいバッチィです。
おしまい。

◆次回
PSoC4のCY8C4100シリーズはPSoCの特徴でもあったUDBが無く、今回のPioneer Kitに載っている4200も大幅に削減されてコストを抑える思い切ったデバイスになっています。UDBはVerilogでカスタムロジックの開発もできる尖ったデバイスですが、4200ではすぐにロジックが枯渇するでしょう。ここでCypressはシフト、加減算、バイトスワップなど単純なロジックはdatapath、それ以外の複雑なロジックはPLDベースのグルーロジックを使いわけることによってこの問題に対処することを提案しています。
次回はdatapath話題でも。

◆参考
PSoC CreatorでC++を使う方法
http://www.element14.com/community/servlet/JiveServlet/download/79763-114371/C%2B%2B%20In%20Creator.doc

ネットワークインターフェース部品の電子工作(W5100,ENC28J60,etc)
http://www.kako.com/neta/2009-003/2009-003.html

マイコン風雲録: Wiz820io(W5200)のドライバ (バグ?対応)