法政大学

小林一行研究室 PSoC ドキュメント資料 Gerox(c) 10/12/2010
http://www.gerox.com

PSoC （49466 単体）で設定できるシリアル通信の最大クロックは？
PSoC の UART のマニュアルによれば，6Mbits/second まで設定できると書いてある。
しかし，実際には，CPU の速度や，供給する Clock によりその制約通りとは行かない。
ここでは，外部クロックは，接続しない標準的な状態，かつ，C 言語でのプログラミングで，どこまで通信レートを上げられるかを実験的に検証してみる。
シリアル通信における標準的なボーレートは以下の通りである。

まずは，24MHz の sysclock*2 の場合に設定できる baudrate の計算スクリプトを示す。
ここでは，±2％の周波数誤差を想定し，計算した。
>> baudrate=[9600,19200,38400,57600,115200,230400,460800,921600];
clk=2*24*10^6;%MHz
err=0.02;
format banklow=(clk./(8*baudrate*(1+err)));high=(clk./(8*baudrate*(1-err)));est=clk./8./round((low+high)/2);[baudrate;low;high;est; round((low+high)/2);(baudrate-est)./baudrate*100]'ans =9600.00
612.75637.769600.00
625.0019200.00
306.37318.8819169.33
313.0038400.00
153.19159.4438461.54
156.0057600.00
102.12106.2957692.31
104.00115200.00
51.06
53.15
115384.62
52.00
230400.00
25.53
26.57
230769.23
26.00
460800.00
12.77
13.29
461538.46
13.00
921600.00
6.38
6.64857142.867.00

00.16-0.16-0.16-0.16-0.16-0.16
6.99となる。つまり，この設定なら計算上最大で，460800bps まで設定できることがわかる。

1法政大学

小林一行研究室 PSoC ドキュメント資料 Gerox(c) 10/12/2010
http://www.gerox.com

実際のデザインUART の通信を行う際に，VC1,VC2,VC3 を使うと，AD 変換など他のブロックのデザインに影響を与えやすくなる。そこで，ここでは，UART のクロックは，PWM16 ブロックを配置しそこで設定を行う。
このようにすることで，ディジタルブロックは，PWM16 と UARTで計 4 つのブロックを消費してしまうが，その後のデザインの自由度を増すことができる。

Global Resources の設定
極力 CPU の処理能力を上げるため，CPU_Clock は，SysClk/1 とした。その他の変更点は無い。

ブロックの配置
UART へのクロックは，PWM16 から供給するため UART は，横に並べて配置している。
RXin P1_6, TXout P2_7 とした。
（CY3210-PSOCEVAL1 と同じ配置）

2法政大学

小林一行研究室 PSoC ドキュメント資料 Gerox(c) 10/12/2010
http://www.gerox.com

PWM16 の設定

Clock は，VC1,VC2,VC3 からではなく，SysClk*2 を選択する。PWM の出力は，明示的には出していないが，BC0 の線から DBB01 を選択し，クロックを出力するようにしている。また，ClockSync は，他の設定ではワーニングが出るため，Unsynchronized としている。Period と，PulseWidth の設定は，プログラム上で，以下の設定をすればよい。
ちなみにこのようにした場合，選択可能な bps は，以下のように計算できる。
bps

計算式

PWM16 Period

PWM16 PulseWidth

9600

24*10^6*2/9600/8625312

1920024*10^6*2/19200/8

31315638400

24*10^6*2/38400/8

1567857600

24*10^6*2/57600/8

10452115200

24*10^6*2/115200/85226

プログラム上で設定するには，以下のようにする。Period は，－1 する点に注意すること。
//PWM16_1_WritePeriod(625-1);PWM16_1_WritePulseWidth(312);// 9600 bps//PWM16_1_WritePeriod(313-1);PWM16_1_WritePulseWidth(156);//19200 bps//PWM16_1_WritePeriod(156-1);PWM16_1_WritePulseWidth(78);//38400 bps//PWM16_1_WritePeriod(104-1);PWM16_1_WritePulseWidth(52);//57600 bps//PWM16_1_WritePeriod(52-1);PWM16_1_WritePulseWidth(26);//115200 bps

3

法政大学

小林一行研究室 PSoC ドキュメント資料 Gerox(c) 10/12/2010
http://www.gerox.com

UART
Clock は，Row_0_Broadcast を経由とし，RXinput,TXoutput は，それぞれ，P1_6,P2_7に接続できるように設定した。ClockSync は，Sync to SysClk*2 とし，同期ができるように設定した。残りの点は，ほぼデフォルトのままの設定である。

Pinout
使用するピンは，RxIn,TXout だけであり，入力は，HighZ，出力は，Strong としている。

main.cプログラムは，比較を容易にするため，サンプルプログラムをほぼそのまま利用してみた。
#include <m8c.h>#include "PSoCAPI.h"//P16 Rx//P27 Tx
void main(void){char * strPtr;// Parameter pointer
PWM16_1_WritePeriod(625-1);PWM16_1_WritePulseWidth(312);// 9600 bps//
PWM16_1_WritePeriod(313-1);PWM16_1_WritePulseWidth(156);//19200 bps

4法政大学////////

小林一行研究室 PSoC ドキュメント資料 Gerox(c) 10/12/2010
http://www.gerox.com

PWM16_1_WritePeriod(156-1);PWM16_1_WritePulseWidth(78);//38400 bps
PWM16_1_WritePeriod(104-1);PWM16_1_WritePulseWidth(52);//57600 bps
PWM16_1_WritePeriod(52-1);PWM16_1_WritePulseWidth(26);//115200 bps
PWM16_1_WritePeriod(26-1);PWM16_1_WritePulseWidth(13);//230400 bps x
PWM16_1_Start();
UART_1_CmdReset();// Initialize receiver/cmd
UART_1_IntCntl(UART_1_ENABLE_RX_INT);// Enable RX interrupts
UART_1_Start(UART_1_PARITY_NONE);// Enable UART
M8C_EnableGInt ;// Turn on interrupts
UART_1_CPutString("¥r¥nWelcome to PSoC UART test program. V1.1 ¥r¥n");while(1) {if(UART_1_bCmdCheck()) {// Wait for commandif(strPtr = UART_1_szGetParam()) {// More than delimiter?
UART_1_CPutString("Found valid command¥r¥nCommand =>");
UART_1_PutString(strPtr);// Print out command
UART_1_CPutString("<¥r¥nParamaters:¥r¥n");while(strPtr = UART_1_szGetParam()) { // loop on each parameter
UART_1_CPutString(" <");
UART_1_PutString(strPtr);// Print each parameter
UART_1_CPutString(">¥r¥n");}}
UART_1_CmdReset();// Reset command buffer}
}

}

通信結果
実際に文字が送受信できるかのテストを行った。それらの結果を以下に示す。
○○
○
○
○
××

9600.00
19200.00
38400.00
57600.00
115200.00
230400.00
460800.00

612.75306.37153.19102.12
51.06
25.53
12.77

637.76318.88159.44106.29
53.15
26.57
13.29

9600.00
19169.33
38461.5457692.31
115384.62
230769.23461538.46

625.00313.00156.00104.00
52.00
26.00
13.00

0
0.16
-0.16
-0.16
-0.16
-0.16
-0.16

通信の同期という意味では，460800bps まで扱うことができるはずであるが，実際には，115200bps までは，文字化けせず通信できることがわかった。

5