とうとうこんな季節になってしまった。
いまだに炎上案件抱えてひーひーゆうてるのに。
PSoC Advent Calender 2017 の 記事を!って頼まれたのでそれをば。
さて、PSoC のUARTってコンポーネント、ポンっ!ってかんじで
いいので、とっても簡単なんですがね、ほかのマイコンなら
途中でボーレートチェンジ!なんて簡単にできるのに
この部分はAPIとしてはParityは公開されているけれど、
肝心の速度は公開されてないので、なんともならない。
きっかけは MonoWirelessのTWELiteの書き込みがPSoCからしたいよね!的な
ところから始まったんだけど。
PC <--USB--> PSoC <--UART-->TWELite
っていう感じでつかって、モード変更で書き込み対応したいとか。
で、やってみた。
Design Wide Resources (.cydwr)をひらいて Clockタブを見てみる。
やっぱり、UART_1_IntClockを引き込んでいる。
今回は115200bps = 115.2kHzがほしい設定なので
サンプリングを8倍した 921.6kHzを生成してるわけですね。(最下行)
この921.6kHzを生成するのに、64MHzを69分周して近似の
927.536kHzを出してるというのはわかる。
ということなら
このDividerを変更したらよくね?
UART_1のコードの下に、UART_1_IntClock.cというのができてる。
このなかに SetDividerRegister()関数という、もうそのままのネーミングの
関数あるじゃんと。
これをよべばよさげですよね。
===================================
===================================
ぼくの場合だと
#define HS115200 69
#define HS57600 139
#define HS38400 208
#define HS19200 417
#define HS9600 833
ってかんじですかね。
ここらは計算でする方法もあるし、あるていど決め打ちでもいいかも
ですね。
64000(kHz) / (欲しい周波数(kHz) * 8) = divider
ってかんじですね。
0 件のコメント:
コメントを投稿