Warning: Trying to access array offset on false in /home/c6460735/public_html/kano-x.jp/cms/wp-content/plugins/wp-sitemanager/modules/meta-manager.php on line 507

Warning: Trying to access array offset on false in /home/c6460735/public_html/kano-x.jp/cms/wp-content/plugins/wp-sitemanager/modules/meta-manager.php on line 507
ナウいマイコン PSoC4200 IO操作(複数ポート) 速度比較  2(備忘録) – 株式会社加納製作所

最新情報

ナウいマイコン PSoC4200 IO操作(複数ポート) 速度比較  2(備忘録)

PSoC4200のIO操作 複数ポート 速度比較

マイコンを使っていると
複数のポートを同時に ON/OFF したい時があります。

Arduinoですと

このように書くと思うのですが

digitalWrite(LED1,HIGH);

digitalWrite(LED2,HIGH);

digitalWrite(LED3,HIGH);

digitalWrite(LED1,LOW);

digitalWrite(LED2,LOW);

digitalWrite(LED3,LOW);

 

人間に一瞬に見えても

LED1 ON

LED2 ON

LED3 ON

LED1 OFF

LED2 OFF

LED3 OFF

のように1ポートづつON/OFFしています。

PSoC Creater では

LED1、LED2、LED3 ON

LED1、LED2、LED3 OFF

のように、同時にON/OFFできるような命令が準備されています。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Pin00 という名前で

P00

P01

P02

P03

を出力設定しました。

 

for(;;)
{
// 普通のIO操作
Pin00_Write(0x0f);
Pin00_Write(0);
}

P0の下位4bitをon/offを繰り返すだけのプログラムです。

 

 

 

 

 

 

 

 

 

 

 

 

 

HiからHiまで おおよそ 1250uS

青 p03

赤 p02

水 p01

黄 p00

です。

 

#define CY_SYS_PINS_SET_PORT(portDR, pin) \
( *(reg32 *)(portDR) |= (pin) )

#define CY_SYS_PINS_CLEAR_PORT(portDR, pin) \
( *(reg32 *)(portDR) &= pin )

int main(void)
{
CyGlobalIntEnable; /* Enable global interrupts. */

for(;;)
{
// 高速IO操作
// P00-P03 なので 上位4ビットはマスク
CY_SYS_PINS_SET_PORT(Pin00_0_DR,(0x0F & 0x0f)); // mask 0000 xxxx
CY_SYS_PINS_CLEAR_PORT(Pin00_0_DR,(0xF0 | 0xf0)); // mask 1111 xxxx
}
}

 

こんな感じにれレジスタ書換すると、さらに高速化ができるようです。

 

 

 

 

 

 

 

 

 

 

 

 

 

HiからHiまで おおよそ 500uS

青 p03

赤 p02

水 p01

黄 p00

です。

 

加納 大裕 (かのう だいゆう)

 

最新の投稿記事

加納製作所の商品開発

  • 薪ストーブ
  • メッキアノード
  • 粉体塗料
  • ミニトマト選別機

開発でお悩みの方、

まずは新たな発想を生む
私達の開発環境へお越しください。
知識・経験・ノウハウがそのお悩みを解決します。

開発のご相談