最新情報
ナウいマイコン 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
です。
加納 大裕 (かのう だいゆう)
-
- 2024.09.19
- 薪ストーブ、新城軽トラ市「49番ブース」、出店します。
-
- 2024.01.20
- 薪ストーブ出展 新城消防祭
-
- 2023.11.28
- SDGsへの貢献:薪ストーブ
-
- 2023.11.01
- 薪ストーブ今週末のイベント
-
- 2023.11.01
- 薪ストーブ納品 南信州うるぎ高原 風の森