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

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

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

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
}
}
}

初めの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ですね。日本語でモジュールのパラメータの説明と関数の説明書が欲しいですね。