迷走の果て・Tiny Objects

迷走する日々の覚え書きです。自分で分かってることは省略してますので、念のため。

PSoC Designer5.0 beta 新しいユーザーモジュール SHADOWREGS

psocshadowreg

ユーザーモジュールがいくつか追加されている。
Misc Digitalには
OneShot
PWD
SHADOWREGS

SHADOWREGSのデータシートを読んでいてピンときた。
あるポートのピンをpullUpにして1を出力しておくとプルアップ抵抗付きの入力ポートとして使える。
プルアップ抵抗を外付けする必要がないのでスイッチをつなぐのに便利・・なはずなんだけど同じポートの他のピンをビット操作するとスイッチが反応しなくなることがある。
以前相当悩まされたことがある。

SHADOWREGSを使うとこの問題から開放される(はず・・まだ試してないんですわ^^;;)

例えば
PRT0DR = 0x02;
とするところを

Port0_Data_Shade = 0x02;
PRT0DR = Port0_Data_Shade;
としておけばいいらしい。
また
PRT0DR ^= 0x01;

Port0_Data_Shade ^= 0x01;
PRT0DR = Port0_Data_Shade;
とするといいのだそうだ。

データシートから引用しておく。

Example
An application uses P0[0] as a sourcing LED output, and P0[1] as a pulled-up input for a normally open switch connected to ground. After setting the drive mode registers for port 0, the firmware initializes the LED to off and enables the input with the following C statement.

PRT0DR = 0x02;

Without a shadow, register, the firmware toggles the LED by the following C statement.


PRT0DR ^= 0x01;

On the initial LED toggle operation, the value read from PRT0DR is 0x00 if the switch is closed, and 0x02 if the switch is open. Performing the XOR operation to toggle the LED results in 0x01 (0x00 XOR 0x01) if the switch is closed but 0x03 (0x02 XOR 0x01) if the switch is open when the initial toggle occurs. Toggling the LED when the switch is closed causes P0[1] to be driven to 0V internally. When the switch is opened, the value read from PRT0DR is still 0x01 because the voltage on P0[1] is still 0V. The switch input has been inadvertently disabled.

The solution is to always manipulate the shadow register first, then copy the shadow register value into the port data register. The following C statements initialize the LED output and the switch input.

Port0_Data_Shade = 0x02;
PRT0DR = Port0_Data_Shade;

The following code toggles the LED without affecting the switch input

Port0_Data_Shade ^= 0x01;
PRT0DR = Port0_Data_Shade;

関連記事
スポンサーサイト

コメント

Designerのイメージが随分変ったみたいですね~。
情報ありがとうございます。
個人的には、日本語に対応っていうのが結構嬉しかったり。

はじめまして。
前からPSoC Express で作ったプロジェクトファイルをDesignerで開くと、SHADOWREGSがぞろぞろ出てきたりしていました。Expressでビルドするとき、レジスタを直接いじるための隠しモジュールだったんでしょうね。
いつから仕込まれていたのやら?

Re: SHADOW PORTっていうのですか?

> 同じポートの他のピンをビット操作するとスイッチが反応しなくなることがある。
これ嵌りました。って自分の場合は、他のビットでActive-H(Pull-Down抵抗)のSW入力使った設計してしまって、SWとは無関係のところ、PRT0DR ^= 0x01 なんてことしたらSWがONになってしましました。

コメントの投稿

管理者にだけ表示を許可する

トラックバック

この記事へのトラックバックURL
http://edycube.blog.fc2.com/tb.php/377-7d856b9c

 | HOME | 

文字サイズの変更

プロフィール

edy

最新記事一覧(サムネイル画像付き)

DABP発振回路を使ってキャパシタのESRを測定する構想(2)断念 2018/02/15
Androidアプリ:Resonance Calculator LC共振回路の計算に便利 2018/02/03
DABP発振回路を使ってキャパシタのESRを測定する構想(1)追記あり 2018/01/27
スマホとmicro:bitをBluetoothでつなぎたいのだが・・・。 2018/01/27
Androidアプリ:Signal Generator 2017/12/31
エレコム EHP-AHR192 を試す。(1) 2017/12/17
AliExpressでお買い物:TPS60403テスト 2017/12/02
AliExpressでお買い物:スイッチトキャパシタ電圧コンバータ三種(1) 2017/11/29
ATmega328 Maximum Frequency vs. VCC 2017/11/26
AC電力計(2) 2017/11/19

全記事表示リンク

全ての記事を表示する

リンク

このブログをリンクに追加する

月別アーカイブ

02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  04  03  02  12  11  10  09  07  05  04  03  04  03  01  12  11  10  08  07  06  05  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  04  02  01  12  10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  10  09  08  07  06  05  04  03  02  01 

カテゴリ

プログラミング (0)
freescale (1)
AVR (3)
テルミン (16)
緊急警報放送 (3)
78K (1)
PSoC (295)
地上デジタル放送 (2)
電子工作 (434)
HX711 (2)
ACS712 (6)
数学 (6)
パソコン (12)
PLC (14)
未分類 (39)
ブログ関係 (20)
スカイプ (37)
ロボット (1)
LTSpice (8)
OCXO (0)
arduino (32)
maxima (1)
フランクリン発振回路 (3)
GPS (3)
DTMF (1)
Linux (1)
KOMAINO (7)
Android (1)

タグリスト

最近のコメント

最近のトラックバック

メールフォーム

名前:
メール:
件名:
本文:

検索フォーム

アクセス

RSSリンクの表示

ブログリンク

FC2Ad

まとめ

Template by たけやん