投稿

MSP432 Interrupt_disableSleepOnIsrExit();

イメージ
 Interrupt_disableSleepOnIsrExit(); systickやタイマー、ADCなどでインターラプトをかけ、ハンドラーへ飛び処理をする。 Interrupt_disableSleepOnIsrExit();を置くのを忘れて、いつもハマるのでメモ。 これを置かないと、ハンドラーに入るとmainに戻ってこない。戻すため、 Interrupt_disableSleepOnIsrExit();ハンドラーの処理が終わったらこの命令を置いておく。 ******************** 動作の確認 Resource Exploerから検索でsystickを入れて、DriverLibのサンプルプログラムをインポートする。リネームするなりして、これを送り込んで動作を確認しておく。オンボードのLEDがチカチカと。 ここからが動作の確認。 Printfを使いたいので、以前の手順でprintfOverride.cをコピーしておく。詳しい手順は ここ 。 #include <stdio.h>//printf を他のインクルードに続けて追加する。その後mainの上の箇所で、変数を一つ定義しておく。 uint8_t count=0; UARTを使えるように、 const eUSCI_UART_ConfigV1 uartConfig = {         EUSCI_A_UART_CLOCKSOURCE_SMCLK,          // SMCLK Clock Source         78,                                     // BRDIV = 78         2,                        ...

MSP432 ERROR: the connected device is not msp432p401r

イメージ
cortex_m4_0: * warning *: the connected device is not msp432p401r ・・・ といったエラーが出て書き込めなくなった。 迂闊に、クロックを48MHzに設定しようとするとこうなるらしい・・・対処法も一応乗っていて、 https://www.ti.com/lit/ug/slau597f/slau597f.pdf?ts=1623375496064&ref_url=https%253A%252F%252Fwww.google.com%252F のFAQにの通りに・・・ View -- Target configurationsと進んで、MSP432P401R.ccxmlを右クリック。Launch Selected configrationを選択 最初は、Texas・・・と1つしか見えていないんで、右クリックしてshow all core Non Debuggable devicesが見えるが階層が隠れているので表示し、これをConnect Targetを選択して接続する。 接続したら、Script-defalt-MS432_Factory_Resetを選択する。 すると中身を消去しに行ってくれて、デバッグをとめて、リスタートすると工場出荷時に戻る。 ってってやって直ぐに戻ってくれれば苦労はしない! 結果決め手がわからないうちに、戻った・・・・ 1・まずすべての結線なんかははずして、”身軽”に 2・MS432_Factory_Resetを選択、デバッグモードを一度止めたら、USBを抜いてさして。 ってなことを繰り返しているうちに、元に戻った・・・・同じ症状が出てここにきてくれた方、申し訳ない。いえることは、データシートの手順の通りを信じて何度かしていればもとに戻るということ。

MSP432 ADS8341

イメージ
  ADS8341 https://www.tij.co.jp/jp/lit/ds/symlink/ads8341.pdf?ts=1623405262771&ref_url=https%253A%252F%252Fwww.tij.co.jp%252Fproduct%252Fjp%252FADS8341%253FkeyMatch%253DADS8341%2526tisearch%253Dsearch-everything 16ビットの4チャンネルADC。 SPIの設定 const eUSCI_SPI_MasterConfig spiMasterConfig2 = {         EUSCI_B_SPI_CLOCKSOURCE_SMCLK,             // SMCLK Clock Source         12000000,                                  // SMCLK = DCO = 12000000         1200000,                                  // SPICLK = 12000000         EUSCI_B_SPI_MSB_FIRST,                     // MSB First         EUSCI_B_SPI_PHASE_DATA_CAPTURED_ONFIRST_CHANGED_ON_NE...

MSP432 DAC8555

イメージ
4チャンネルの16bitDACのDAC8555をMSPから制御  特徴はバッファを2つもっていて、同時に4つチャンネルを変更することもできる点。 https://www.tij.co.jp/jp/lit/ds/symlink/dac8555.pdf?ts=1623402965967&ref_url=https%253A%252F%252Fwww.tij.co.jp%252Fproduct%252Fjp%252FDAC8555 データシートを見ながら、電源回りにパスコン等をつけて回路を形成。Vrefには、 ISL21080CIH315Z-TK(基準電圧1.5V)を利用し動作確認をしている。 各ピンの機能を簡単に。データシートの要約。すべての動きを試した訳ではない。 IOVDD:ロジック回路の電圧。MSP432の場合は、3.3Vだが、5.0Vのロジックと混在する時には、ここに与える電圧で変更する RST:LOWの時リセットされて、ゼロかまたは、Vrefの中間の値の出力にする。リセット時にゼロか、中間の値にするのかを選択するのがRSTSEL。中間にしたい場合はHIGHに接続、ゼロにしたい場合はGNDに接続。 ENABLE:読んで字のごとく。動作時にはLOWにする。HIGHだとSPIのコマンドを受け付けない。 LDAC:ソフト的にバッファーの値をアップデートし出力を変更できるが、このピンを使ってハード的にもできる。 【動作】 よくあるDACと同じで最初の8ビットがコントロールビットを送りこんで、続いて16ビットの設定したい値のデータを送信する。 LD1,LD0の組み合わせで、チャンネル1~4までまずはデータを送ってから、同時に電圧出力を変化させる事もできるし、各チャンネルを個別に次々に電圧を変更していく事もできる。このあたりは、データシートに任せて、後者で実装する。この時、LD0=0,LD=1にすることになる。DACSelect1,0は進数でチャンネルを設定するところ。PD0は、パワーモードの選択。DACなので特段苦労することはないかと。  /* Transmitting data to slave */  MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P3, GPIO_PIN0);  MAP_SPI...

MSP432 UART printf to PC

イメージ
  マルチビットを読み込むのは、以前できていたので、今度は文字列をPCの送付する。 こちらはコードを書くというより、printfを使えるようにする。 https://43oh.com/2015/05/how-to-add-printf-support-for-the-msp432-launchpad-serial-port/ の通り。 手順 【前準備】 https://github.com/bluehash/MSP432Launchpad に行って、[↓CODE]のボタンをクリックしてDownLoad zipを選択してファイルをダウンロード。ZIPを解凍する。 必要なのは printfOverride.c というファイルで、これをCCSのプロジェクトにドラッグ、コピーするか、移動してくるか?聞かれるがコピー。 printfOverride.cを開いて、13行目にdriverlib.hをインクルードしているが、パスが通っていないので、#include <ti/devices/msp432p4xx/driverlib/driverlib.h>に置き換えをする。 準備はこれで終わり。 【使い方】 普通のc言語でprintfを使うので #include <stdio.h> をインクルードしておく。UARTなどの設定は、これまで通り。 ダウンロードしたフォルダーに例があるように普通にprintfが使える。 printf("\r\nPrintf support for the launchpad\r\n"); printf("Decimal(10) :%d\r\n", 10); printf("Hex(10)     :%x\r\n", 10); printf("float       :%f\r\n", 4.32); 以下は例。スイッチを押すとコンソールに、0から9までカウントアップしていき表示する例。 /* --COPYRIGHT--,BSD  * Copyright (c) 2017, Texas Instruments Incorporated  * All rights reserved.  *  * Redis...

MSP432 how to change heap size

イメージ
  ".sysmem" section with default size of 0x800, use the -heap.... という警告。エラーではいのでビルトはできる 大きな容量が必要なインクルードファイル、例えば#include <stdio.h>とかを読み込むと出てくるようになる。 ヒープ領域とは、動的に確保と解放を繰り返せるメモリ領域のこと。ヒープ領域はデータの仮置き場といったところ。 対処:CCSのProject Explorerで当該のプロジェクトを右クリック。 一番したにPropertiesがあるので開く。 Linkerの下に、Basis Optionsというのがあるので選択する。ここに Heap size for C/C++ dynamic memory allocation (--heap_size_ -heap) という欄があるので、ここに数字を入れる。320とかにしておく。 リンクのスイッチを入れてくれるようになる。 これで警告は消えてくれる。

中華格安ロジアナ

イメージ
 中華のロジアナ24MHz8チャンネルを購入してみました。 アマゾンからポチリ 。 説明書もなんにももちろんないんですが、先人の方々がそのあたりは詳しく説明してくださっているので、参考にソフトをインストールして設定しました。 参考にしたページ: https://jsdkk.com/blog/mugita/?p=748 https://sigrok.org/ 実はインストールが上手くいかず。途中で1度停止し、その後は全く受け付けない症状になりました。いろいろ(手動でWINUSBをインストールとか・・・・)しても、参考ページにあるように、 Saleae Logic with 8channels というデバイスが表示されない現象が発生し、USBを抜き差しすると現れるようになったものの、いざ選択するとUSBが切り離されて、デバイスが認識されない状態でした。 →解決した方法: https://www.saleae.com/ja/downloads/ 本家の方は勝手に使うなと怒るんでしょうが、本家側のソフトをインストールしました。ドライバーが適正にインストールされるからでしょう。本家ソフトでも動きますし、PulseViewでも問題なく動くように。 SPIの信号を見た例。SPIのスレーブ側の問題なのか?コーディングの問題なのか?大量に時間を消費していましたが、これは便利。ある意味、これまでが馬鹿らしい。 また、whileでループしている時間の実測とかが正確に把握可能。 Timerの正確さとかちょっと知りたいとかが簡単にできる。 次はオシロスコープが欲しいのでした・・・

MSP432 Timer

イメージ
 MSP432には4つの16ビットタイマーと2の32ビットタイマーがあり、CCRが5つ。 CCR(Caputure/Compare register)の略のはず。 Exampleを一つ開いてみる。1秒おきにオンボードのLEDが点滅するという例題。ある意味正確な時間のLチカ。 timer_a_upmode_gpio_toggleを選択しIMPORTする。本家のExampleなのでエラーもでないから、ビルトして書き込みをしてみる。 P1.0に接続されたLEDが点滅 ソースコードを解釈していく /* Application Defines  */ #define TIMER_PERIOD    0x2DC6 10進数では11718。 const Timer_A_UpModeConfig upConfig = {         TIMER_A_CLOCKSOURCE_SMCLK,              // SMCLK Clock Source         TIMER_A_CLOCKSOURCE_DIVIDER_64,          // SMCLK/1 = 3MHz         TIMER_PERIOD,                           // 5000 tick period         TIMER_A_TAIE_INTERRUPT_DISABLE,         // Disable Timer interrupt         TIMER_A_CCIE_CCR0_INTERRUPT_ENABLE ,    // Enable CCR0 interrupt ...

MSP432 UARTによるPCとの通信

イメージ
  MSP-EXP432P401Rの説明書 の回路図を見ると、 ピンP1.2と、P1.3はXDS110-ETとつながっていて、UARTのRXD,TXDになっている。これらのピンとPCとの通信することができる。DriverLibのExampleをインポートして動作を確認してみる。 インポートしたらさすがにエラーはないので、ビルトして書き込みを行う。 PCと接続されているCOMポートの番号をデバイスマネジャーで確認する。上の場合は8番側。シリアルの通信ターミナルを開いてキーボードに何か書いて送付するとエコーバックしてくる。 ArduinoIDEをインストールしているならCOMを8番に設定して、シリアルモニタを代用するでもOK 送信した文字がそのままバックして画面に出てくるってしろもの。 でこれで、ボーレートとか必要ところだけ編集すればまあ動かせる。 const eUSCI_UART_ConfigV1 uartConfig = {         EUSCI_A_UART_CLOCKSOURCE_SMCLK,          // SMCLK Clock Source         78,                                     // BRDIV = 78         2,                                       // UCxBRF = 2         0,                    ...

MSP432 MAX5144 via SPI

イメージ
sa  MSP432でSPIでDACのMAX5144を制御する。 Arduino や STM32 ですでに以前テストはしている。その時と同じくISL21080CIH315Z-TK(基準電圧1.5V)を用意して基準電圧として利用した。 ここまでで、ADCやSSD1306のOLEDやスイッチのテストをしてきているので、OLEDに設定電圧にちゃんと出力されているかを計測して表示するまでの記録。 SPIの設定→ピンのアサイン→SPIモードのEnable→実際の送信という流れ。  *                    MAX 5144 DAC  *                     ------------------  *                  |1 REF        GND 10 |  * 2,3 and 4   |2 CS         VCC  9 |  * pull up w   |3 SCLK       RFB  8 |  *    1k          |4 DIN        INV  7 |  * Vcc--10k-- |5 CLR        OUT  6 | CLRの端子を10KでVccと接続。ここを接続しないで実験していて半日以上無駄にした・・・。 【SPIの設定】 /* SPI Master Configuration Parameter */ const eUSCI_SPI_MasterC...