工作工房

工作工房

2006年11月26日
XML
カテゴリ: カテゴリ未分類

PSoC基板

PSoC基板のUART(RS-232C)の送信と受信の実験をしたストロベリー・リナックス社の基板の写真です。

UART Module 画面

UART Module の配線図です。受信入力はP0-0 送信出力はP0-1で行いましたがポートの制約はありません。

UART Global Resouces.JPG

グローバルリソースの内容です。通信速度を38400bpsに設定しました。bps=24MHz/6/13/8の設定ですPSoCの通信速度の倍数は8倍です、計算結果は384615になり誤差は1.6%となります。1.6%の誤差範囲は通信には問題ないようです。

UART User Module Parameters

UARTのモジュールのパラメターの内容です。 command terminator = 13の内容はCR(0Dh)で受信コマンドを処理しているようです。テキストコードのプロトコルで使用すれば便利かもしれません。

以下がプログラムです参考にして下さい。

//----------------------------------------------------------------------------
// C main line
//----------------------------------------------------------------------------

#include <m8c.h>        // part specific constants and macros#include "PSoCAPI.h"    // PSoC API definitions for all User Modules

char *send_buf; //RS232C

void main()
{
     init();           //IO Initialize
     send_test();  //send test
     recv_send();  //Loop ari
}

void init(void)     //IO Initialize
{
       //UART setup
      UART_1_CmdReset();                              //Initialize receiver/cmd buf.
      UART_1_IntCntl(UART_1_ENABLE_RX_INT);   //Enable RX interrupts
      UART_1_Start(UART_1_PARITY_NONE);        //Enable UART

       //CPU ALL Interrupt Enable
      M8C_EnableGInt;    //CPU ALL Interrupt Enable
}

void send_test(void) //send test
{   unsigned int c;
   char data[50]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";

   UART_1_CPutString("\r\nPSoC UART RS-232C program \r\n");   while( !( UART_1_bReadTxStatus() & UART_1_TX_BUFFER_EMPTY ) );

   send_buf = &data[0];
   for(c=0; c<26; c++){
      UART_1_SendData( *(send_buf + c) );
      while( !( UART_1_bReadTxStatus() & UART_1_TX_BUFFER_EMPTY ) );
   }
   UART_1_PutCRLF();
}

void recv_send(void)
{
   char *recvd;

    //recv send test (0Dh command)
    while(1) {
       if (UART_1_bCmdCheck()){                   //Wait for command
           if(recvd = UART_1_szGetParam()){;   //get command
           UART_1_SendData( *(recvd) );
           while( !( UART_1_bReadTxStatus() & UART_1_TX_BUFFER_EMPTY ) );
              UART_1_PutCRLF();
           }
           UART_1_CmdReset();                       //Reset command buffer
        }
    }
}

UART ハイパーターミナル

初めの2行目が send_test(); で表示しています、数字の1-0までがパイパーターミナルを使用しパソコンから送信してそれを受信した内容です。注意として一つの送信内容とエンターが必要になります。たとえば” 1 ”を送る場合” 1 ”とエンターキー(0Dh)となります。

RSー232C通信プロトコルはテキスト以外にバイナリー方式がありますので今回の受信プログラムはバイナリー方式には使用できません。テキスト形式ではUART_1_bCmdCheck()関数は使用できます、そしてその内容はCR(0Dh)を受け付けたときTRUEになるようです。

送信のプログラムはそれほど時間がかからなかったのですが受信がまったくできなく、いろいろ実験をして受信することができました。UART_1_bCmdCheck()関数はCR(0Dh)を受信しないとTRUEにならない事が重要なことでした。PSoCは不思議なCPUですが魅力あるCPUですね。日本語でモジュールのパラメータの説明と関数の説明書が欲しいですね。






お気に入りの記事を「いいね!」で応援しよう

最終更新日  2006年11月27日 00時33分05秒
コメント(0) | コメントを書く


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

© Rakuten Group, Inc.
X
Design a Mobile Website
スマートフォン版を閲覧 | PC版を閲覧
Share by: