技術はメシのタネ

底辺プログラマで技術の向上を目指しているけれどやりたい事が無くて困っている

夏休みの宿題【TMS320F2837xS Delfino】

仕事が終わらないまま職場を追い出され、連休に突入してしまった。
仕事なんてものは職場の外へ持ち出すべきではないのだが(法律や仕事のべき論ではなく、精神衛生の話)、非常に残念なことにこの夏期休暇、天候に恵まれそうにない。
んじゃーまあいっちょ仕事しますか、というわけで、お家で調べ物です。


www.ti.com


といっても、ただひたすらにgoogle翻訳に英文を食わせるだけなのですけれどもね。


Analog Subsystem

このアナログサブシステムモジュールについては、この章で説明します。


8.1 Analog Subsystem

このデバイスのアナログモジュールには、ADC(アナログ - デジタルコンバータ)、温度センサ、バッファ付きデジタル/アナログコンバータ(DAC)、コンパレータサブシステム(CMPSS)などがあります。


8.1.1 Features

アナログサブシステムには次の機能があります。

  • フレキシブルなリファレンス電圧
    • VREFHIAとVREFLOA、VREFHIBとVREFLOB、VREFHICとVREFLOC、VREFHIDとVREFLODは外部から供給される基準電圧ピン
      • ADCとバッファ付きDACで選択可能
    • VDAC外部から供給される基準電圧ピン
      • バッファ付きDACとコンパレータサブシステムDACで選択可能
      • 低基準はVSSAです。
  • フレキシブルなピンの使用
    • ADC入力と多重化されたバッファ付きDACおよびコンパレータ・サブシステム機能
  • オフセット自己校正用のすべてのADCのVREFLOへの内部接続


8.1.2 Block Diagram

サブシステムブロック図には、さまざまな統合アナログモジュールとデバイスピンの接続が示されています。
これらのピンは2つのカテゴリに分類されます。アナログモジュールの入出力端子とリファレンス端子です。

リファレンスピン、VREFHIA〜VRFHID、およびVREFLOA〜VREFLODは、ADCへのリファレンスを外部から供給するために使用できます。
VREFHIAを使用してDAC AとDAC Bに基準電圧を供給し、VREFHIBを使用してDAC Cにリファレンスを供給することもできます。

アナログモジュールの入出力は、デフォルトではすべてADC入力です。
CMPSS入力に接続するピンは、それ以上の動作なしに、かつADC入力としての使用を同時に防止することなく、CMPSSに使用することができます。
DAC出力をイネーブルにする必要があります。 これにより、チャネルがADC入力として同時に使用されることはありません(ただし、必要に応じてADCを使用してDAC出力電圧をサンプリングすることができます)。

VDACリファレンスピンを使用して、DAC A、DAC B、およびDAC C、およびCMPSSモジュール内のDACの代替範囲を設定できます(CMPSS DACはデフォルトでVDDAおよびVSSAを参照します)。
このピンをリファレンスとして使用すると、チャネルがADC入力として使用されなくなります(ただし、必要に応じてADCを使用してVDAC電圧をサンプリングできます)。
リファレンスの選択は、各CMPSSまたはバッファ付きDACのモジュールごとに設定可能で、選択はモジュールのコンフィギュレーションレジスタを介して行われます。

アナログサブシステムのブロック図は、次の図に示されています。

  • Figure 8-1. Analog Subsystem Block Diagram (337-Ball ZWT)
  • Figure 8-2. Analog Subsystem Block Diagram (176-Pin PTP)
  • Figure 8-3. Analog Subsystem Block Diagram (100-Pin PZP)
    (図 省略)


NOTES:

  • すべてのアナログピンがすべてのデバイスで使用できるわけではありません。
    使用可能なピンを特定するには、特定のデバイスのデータシートを参照してください。
  • ご使用のデバイスのデータシートを参照して、VREFHIおよびVREFLOの許容電圧範囲を決定してください。
  • VREFHIピンには外付けコンデンサが必要です。
    必要な特定の値については、データシートを参照してください。
  • バッファ付きDACモジュールの場合、VREFHIxまたはVDACがハイリファレンスとして選択されているかどうかに関係なく、VSSAはローレファレンスになります。
  • CMPSSモジュールの場合、VDACまたはVDDAが高基準として選択されているかどうかに関わらず、VSSAは低基準になります。


8.1.3 Lock Registers

LOCKレジスタのTSNSCTLビットをセットすると、TSNSCTLレジスタのそれ以上の変更は無効になります。


8.2 Registers

8.2.1 Analog Subsystem Base Addresses

Table 8-1. Analog Subsystem Base Address Table

Device Registers Register Name Start Address End Address
AnalogSubsysRegs ANALOG_SUBSYS_REGS 0x0005_D180 0x0005_D1FF


8.2.2 ANALOG_SUBSYS_REGS Registers

表8-2に、ANALOG_SUBSYS_REGSのメモリマップレジスタを示します。
表8-2にリストされていないすべてのレジスタオフセットアドレスは予約された場所とみなされ、レジスタの内容は変更しないでください。

Table 8-2. ANALOG_SUBSYS_REGS Registers

Offset Acronym Register Name Write Protection
20h INTOSC1TRIM Internal Oscillator 1 Trim Register EALLOW
22h INTOSC2TRIM Internal Oscillator 2 Trim Register EALLOW
26h TSNSCTL Temperature Sensor Control Register EALLOW
2Eh LOCK Lock Register EALLOW
36h ANAREFTRIMA Analog Reference Trim A Register EALLOW
38h ANAREFTRIMB Analog Reference Trim B Register EALLOW
3Ah ANAREFTRIMC Analog Reference Trim C Register EALLOW
3Ch ANAREFTRIMD Analog Reference Trim D Register EALLOW

複合ビットアクセスタイプは、小さなテーブルセルに収まるようにエンコードされます。
表8-3に、このセクションのアクセスタイプに使用されるコードを示します。

Table 8-3. ANALOG_SUBSYS_REGS Access Type Codes

Access Type Code Description
Read Type
R R Read
R=0 R Read
Write Type
W W Write
WOnce W Write
Reset or Default Value
-n リセット後の値
またはデフォルト値


8.2.2.1 INTOSC1TRIM Register (Offset = 20h) [reset = 0h]

Internal Oscillator 1 Trim Register Table 8-4. INTOSC1TRIM Register Field Descriptions

Bit Field Type Reset Description
31-24 RESERVED R 0h Reserved
23-16 RESERVED R 0h Reserved
15-12 RESERVED R 0h Reserved
11-0 VALFINETRIM R/W 0h

Oscillator Value Fine Trim Bits.

このレジスタは、TI Errataまたはその他の文書で特に指示されていない限り、変更してはなりません。

このレジスタの内容を変更すると、このモジュールがデータシートの仕様外で動作する可能性があります。


8.2.2.2 INTOSC2TRIM Register (Offset = 22h) [reset = 0h]

Internal Oscillator 2 Trim Register

Table 8-5. INTOSC2TRIM Register Field Descriptions
→Table 8-4. INTOSC1TRIM Register Field Descriptionsと同じ内容のため割愛。


8.2.2.3 TSNSCTL Register (Offset = 26h) [reset = 0h

Temperature Sensor Control Register
Table 8-6. TSNSCTL Register Field Descriptions


Bit Field Type Reset Description
15-1 RESERVED R 0h Reserved
0 ENABLE R/W 0h

Temperature Sensor Enable.

このビットにより、ADCへの温度センサ出力が可能になります。

・0:無効

・1:有効


8.2.2.4 LOCK Register (Offset = 2Eh) [reset = 0h]

Lock Register
Table 8-7. LOCK Register Field Descriptions


Bit Field Type Reset Description
31 RESERVED R 0h Reserved
30 RESERVED R 0h Reserved
29 RESERVED R 0h Reserved
28 RESERVED R 0h Reserved
27 RESERVED R 0h Reserved
26 RESERVED R 0h Reserved
25 RESERVED R 0h Reserved
24 RESERVED R 0h Reserved
23 RESERVED R 0h Reserved
22 RESERVED R 0h Reserved
21 RESERVED R 0h Reserved
20 RESERVED R 0h Reserved
19 RESERVED R 0h Reserved
18-7 RESERVED R 0h Reserved
6 RESERVED R 0h Reserved
5 RESERVED R 0h Reserved
4 RESERVED R 0h Reserved
3 TSNSCTL R/WOnce 0h

Temperature Sensor Control Register Lock.

このビットをセットすると、将来のそれぞれのレジスタへの書き込みが無効になります。

このビットはリセットによってのみクリアできます。

2 RESERVED R 0h Reserved
1 RESERVED R 0h Reserved
0 RESERVED R 0h Reserved


8.2.2.5 ANAREFTRIMA Register (Offset = 36h) [reset = 0h]

Analog Reference Trim A Register

Table 8-8. ANAREFTRIMA Register Field Descriptions

Bit Field Type Reset Description
31-24 RESERVED R 0h Reserved
23-16 RESERVED R 0h Reserved
15-11 IREFTRIM R/W 0h

Reference Current Trim.

このビットフィールドは、基準電流トリム値を定義します。

・0x0:Untrimmed

・その他すべての値:Trimmed

10-6 BGSLOPETRIM R/W 0h

Bandgap Slope Trim.

このビットフィールドは、バンドギャップスロープトリム値を定義します。

・0x0:Untrimmed

・その他すべての値:Trimmed

5-0 BGVALTRIM R/W 0h

Bandgap Value Trim.

このビットフィールドは、バンドギャップ電圧オフセットトリム値を定義します。

・0x0:Untrimmed

・その他すべての値:Trimmed


8.2.2.6 ANAREFTRIMB Register (Offset = 38h) [reset = 0h]

Analog Reference Trim B Register

Table 8-9. ANAREFTRIMB Register Field Descriptions
→Table 8-8. ANAREFTRIMA Register Field Descriptionsと同じ内容のため割愛

8.2.2.7 ANAREFTRIMC Register (Offset = 3Ah) [reset = 0h]

Analog Reference Trim C Register

Table 8-10. ANAREFTRIMC Register Field Descriptions
→Table 8-8. ANAREFTRIMA Register Field Descriptionsと同じ内容のため割愛


8.2.2.8 ANAREFTRIMD Register (Offset = 3Ch) [reset = 0h]

Analog Reference Trim D Register

Table 8-11. ANAREFTRIMD Register Field Descriptions
→Table 8-8. ANAREFTRIMA Register Field Descriptionsと同じ内容のため割愛



時間切れにつき、宿題終了。

この手のドキュメントは英語で書かれていることもさることながら、ハードウェアの細かな動作や動作原理の説明をしているだけなのか、それともドライバなどのソフトウェア側で何かしてあげないといけないということを語っているのかの区別が付きづらくて困る。

もーちょっと組み込みエンジニアに分かり易く書いていただけないモノかしら。

「退屈なことはPythonにやらせよう」を読む(随時更新)

本書を読む理由

曲がりなりにもITスキルを有し、ITエンジニアを名乗り、日々プログラミングしている人間が、何故に本書を読むのか。
それはまあ、ブログタイトルの通りである。
「底辺プログラマで技術の向上を目指しているけれどやりたい事が無くて困っている」。
どちらかというと、pythonそのものではなく、自動化できる処理にどのようなものがあるのかが知りたくて、本書を手に取った次第である。


python力……たったの5か……ゴミめ……

でぇじょぶだ、Cなら30くらいはある!
(読者たる私のプログラミング能力を問われた気がした)
python自体に関しては、多少入門書や入門サイトを眺めて、文法をコンソール上で確認した程度。
知らないことの方が多い。


訳者まえがき

なんか意識高い系なこと書いてあんな……。

なん・・・だと・・・?
本書で紹介しているモジュールを使って、Word、Excelからデータを取り出す……?
そんなことが!?
(先ほどのゆで汁!?でお馴染みの全部捨てた女の子の画像を思い出して頂きたい)

なお、本書には、クラスや、ジェネレータ、リスト内包表記といったPythonの高度な機能の説明はありません。

この辺のことについてはこれらで確認しようと思っている。

基礎Python 基礎シリーズ

基礎Python 基礎シリーズ


まえがき

本書を読むと、次のような作業を自動化できるらしい。

  • 何千個ものファイルを移動し、名前を変え、フォルダに分ける。
    →.cmdとか.shでバッチ処理くらいは作れると思う。
  • オンラインのフォーム(申し込み画面)を、キーボードを使わずに入力する。
    →ちょろめを始めとして、最近のwebブラウザならみんなやってくれるんじゃないの?
  • Webサイトが更新されたら、自動的にファイルをダウンロードしたりテキストをコピーする。
    RSSを受け取るところまでしか想像できない。これは有益そう。
  • Excelスプレッドシートを更新・整形する
    →今はサクラエディタ正規表現で変換したりしてるので、これは助かるかも。
  • 電子メールをチェックして、事前に用意しておいた返事を送信する
    →なんか、インシデントが怖ぇな……。

推奨のコーディングスタイルに反することがありますが(例えば、グローバル変数の使用)、その代わりコードが簡単で習得しやすくなっています。

ふーん、推奨のコーディングスタイルとかあるのか。
あとで調べてみよう。

pythonのプログラミング環境については、`Visual Studio Code`で準備した。
ついでなので、`pylint`も導入してみた。

あ、本書のすべてのプログラムは`python3`で動作するように書かれているそうだ。


第Ⅰ部Pythonプログラミングの基礎

1章Python入門

  • 1.1 式をインタラクティブシェルに入力する
  • 1.2 整数、浮動小数点数、文字列型
  • 1.3 文字列の連結と複製
  • 1.4 変数に値を格納する
    • 1.4.1 代入文
    • 1.4.2 変数名
      Pythonの公式コーディングスタイルPEP8
      変数名はアンダースコアでつなぐスタイルが望ましいのか。

この辺のことは [これ](Dive Into Python 3 日本語版) を読んだ時に一通り確認した。

  • 1.5 最初のプログラム

本書記載の最初のプログラム、`hello.py`を`pylint`にかけてみると、スコアは4.44 / 10であった。
原文ママをここに転載するのは気が引けるので、後で`pylint`スコアを高めたものを掲載。

hello.py

"""このプログラムは挨拶を表示して名前と年齢を尋ねる"""
# -*- coding: utf-8 -*-

print('Hello world!')  # ❷
print('What is your name?') # 名前を尋ねる

MY_NAME = input()  # ❸

print('It is good to meet you, ' + MY_NAME)  # ❹
print('The length of your name is:')  # 名前の長さを表示 ❺
print(len(MY_NAME))
print('What is your age?') # 年齢を尋ねる ❻

MY_AGE = input()

print('You will be ' + str(int(MY_AGE) + 1) + ' in a year.') # 来年の年齢を表示

あまり修正する意味を感じないな……。

  • 1.6 プログラムを分析する
    • 1.6.1 コメント
      pythonの行末までのコメントは#
    • 1.6.2 print()関数
    • 1.6.3 input()関数
      →C言語で同じようなことをするのに比べると、随分と簡単に実現できる。
      PEP8では、const変数は大文字にするのが推奨の模様。

    • 1.6.4 ユーザー名を表示する

      式は常にひとつの値に評価されるのでしたね。

実は、このinput()関数、もっと便利に使用できる。

print('Hello world!')  # ❷
# print('What is your name?') # 名前を尋ねる

MY_NAME = input('What is your name? : ')  # ❸

input()関数の引数に、入力を促す(ためだけに使用するわけじゃないけど)ための文字列を取ることが出来るのだ。
便利~。

  • 1.6 プログラムを分析する
    • 1.6.5 len()関数
    • 1.6.6 str(), int(), float()関数
      →len()もそうだが、そもそも、こういうチェックの甘そうなソースコードを見ると意地悪したくなるのがプログラマーの性だ。
      ‘What is your name?'と聞かれたところで、意地悪して18などの整数を入力してみる。
      すると、"It is good to meet you, 18"と平然と返してきた。
      ……当然である。
      なぜって、input()関数はキーボードから入力されたものを"文字列"にして返す関数だからだ。
      整数値、浮動小数点数値を入力しても、"数値"→数"字"→文字列になってしまうのである。
      クソっ、よく出来てやがるな……!!
      いわゆるキャスト系の関数にも特に目新しいことは無いかな。
      なお、"What is your age?“と訊かれた際に"aaaa"などと入力すると、キャストがうまくできずにValueErrorとなる。




(以下、随時追加更新していく予定。)




(余談。本文中に下記への言及がまだ出てきてないけど、これからなのかな?)

github.com

Windowsのメモリダンプを解析するまで

これを連発されたので、イベントビューアから原因を探ろうとしたら、再起動時のバグチェックでダンプ残したって言うので見ようと思ったら、サクラエディタじゃあ見られなかったのね。
まあそこらへんは各自ググってもらうとして、簡単に言うと、VisualStudioとデバッグ閲覧用のソフト、2つをダウンロードする必要があった。

マシンの設定のせいかどうかはよくわからないんだけども、VisualStudioも閲覧ソフトも、インストーラでインストール完了、って言いながら、実際にはもう一回インストーラ起動して他にも必要なファイルをダウンロードさせないといけないという謎手順はどこかに誘導を書いておいて欲しかったな。



ダンプを閲覧するのに必要なツールがwindbg.exeって言うんだけど、実は管理者権限で実行して、おまけにダンプファイルのドラッグアンドドロップじゃあ解析始めない、っていうのはググってみた結果の中にはどこにも書いてなかったと思う。
のでメモ。
管理者権限無しで実行してダンプファイルをドラッグアンドドロップすると、読み込めませんってダイアログが表示される。
管理者権限で実行してドラッグアンドドロップすると、今度はダンプファイルが開かない。
ファイルメニューのOpen Crash DumpからMEMORY.DUMPを選ばないと開けないようになっていた。
ちなみにこれはWinDbg 10.0.14321.1024 AMD64の話である。



なお、ようやくダンプ解析の準備が整ったところで、累積的な更新プログラムによるアップデートが入ったので、またしばらくは様子見することになった。