CH552
ハードウェア
開発方法
Keil C51
SDCC
- VSCode
- CH554のコードが使える?
CH55xduino
- HIDキーボード
- Arduino IDEから使えるらしい
- 最新版はZadigが不要らしい
- 確かに不要だった!
- Platformioからもいけるっぽい?
- まとめた記事
書き込み方法
- オープンソースならこれで?
- 以下ではこれを使っている
セットアップ
とおもったけどobjcpyなどもなかったのでDockerをつかう
SDCCのうごくまともなイメージは少なそう・・
後で自作するか・・
> code
$ docker run -v /$PWD:/src -it pvmm/sdcc bash
<<
> code
$ cd /src/examples
$ make
<<
いろいろ試す
- このBlinkもそのまま動いた
- が、hexの書き込みがうまくいかずbinなら書き込めるという謎
- このgenericな例も動いた、LチカならこれでOK
- こっちはhexで書き込めた
書き込み
- Bootloadボタンを押しながらUSBにつなげる
https://inline.inajob.tk/img/twitter-5643382/CH552/44f97638-b32a-11ed-8b05-7a8e9b5d1f61#.png
DeviceListに出てくる
- のプログラムの場合はhexでもOKだった
> code
/* CH552G test program */
void delay( void );
void main( void ) {
while( 1 ) {
P1_7 = 0;
delay();
P1_7 = 1;
delay();
}
}
void delay( void ) {
uint16_t i;
for( i=0; i < 0xffff; i++ );
}
<<
> code pre
$ sdcc hello.c
<<
CH552でタイマー割込み
> code c
void setup() {
TR2 = 0; // Timer2をストップ(初期設定のため)
C_T2 = 0; // Timer2クロックを内蔵クロック(デフォルト値のまま)
T2MOD |= bTMR_CLK | bT2_CLK; //Timer2のクロックにFsys(24MHz)を使う
RCAP2H = 0xff; RCAP2L = 0x91; // Timer2オーバーフロー時のリロード値(0xff91=65425)
// Timer2は(65536-65425=111クロックでオーバーフローする。
// つまりTimer2割り込みの周波数は24MHz/111=216kHz
TH2 = RCAP2H; TL2 = RCAP2L; // Timer2のカウント値をリロード値(RCAP2)で初期化
TF2 = 0; // Timer2割り込みフラグをクリア
ET2 = 1; //Timer2割り込みを許可
EA = 1; // グローバル割り込みを許可
TR2 = 1; // Timer2をスタート
}
void Timer2Interrupt(void) __interrupt (INT_NO_TMR2)
{
TF2 = 0; // Timer2割り込みフラグをクリア
// do something
}
void loop() {
}
<<
何を見たらこのコードが出てくるのだろう・・
- cH559だが共通点があるだろう
- あえてむずかしいTimer3を解説している
- CH559のデータシート日本語訳
- Timer0/Timer1
- 16bit
和音をやりたい
- Arduinoの実装を真似するとPWMと割り込みを利用している
- Timer1
- 分周なしで16MHzでカウントアップ・ダウン
- PWM
- オーバーフロー割り込みで位相を動かしている0xFF
- CH55xの場合は?
- PWMはTimer3にしかない?
- というよりはTimer3と連動している、という言い方が正しそう
- 割り込みの例もある
- 真似すれば動きそうだ
- 分周比は?
- PWM_CK_SE でクロック分周を指定するらしい 8bit
次やりたいこと
- SPIで液晶を扱う?
- SPIのOLEDがあると楽そう
- 7セグの表示くらいなら簡単そう
- ソフトウェアのI2Cも動く
- PWMで音を鳴らす
- USB Deviceになるが、、VID/PID問題もあるしあまり使いたくない気持ちがある
記事
- VSCodeとSDCC
- Arduino IDE
- Zadigは不要なのかも
- Keil C51