-
検索結果
-
トピック: I2C Read/Write Bit設定について
現在I2Cセンサを使用するソフトウェアの開発を行っています。
I2Cを取り扱うのが初めてのため、基本的な質問で恐縮ですがRead/Write Bitについてお教えください。
MSP430側をマスターとし、スレーブアドレス:0x28のセンサと通信を行います。
通信の流れとして、スレーブアドレス0x28をUCB0I2CSAに渡すのが一番最初のステップになると思っています。
この時、Read/Write Bitの設定はどのように行ったら良いのでしょうか。
最初はスレーブアドレスを1Bitシフトし7Bit~1Bitでアドレス設定,0BitにRead/Writeを設定すれば良いのかと思い、UCB0I2CSAに8Bit渡すつもりでした。
しかしユーザーガイドの38.4.9 UCBxI2CSA Registerにて9~7Bitは無視されるとの記載があり混乱しています。
認識間違い等ございましたらご教授頂けますと幸いです。
下記にI2Cレジスタの初期設定等を示します。
今回割り込みを使用しない形での実装で進めています。
void initGPIO()
{
// Disable Interrupts before altering Port Mapping registers
__disable_interrupt();
// Enable Write-access to modify port mapping registers
PMAPPWD = 0x02D52;//I2C Pins
P2SEL |= BIT1 | BIT2;
P2MAP1 = PM_UCB0SCL;
P2MAP2 = PM_UCB0SDA;
// Disable Write-Access to modify port mapping registers
PMAPPWD = 0;
}void initI2C()
{
UCB0CTL1 |= UCSWRST; // Enable SW reset
UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC; // I2C Master, synchronous mode
UCB0CTL1 = UCSSEL_2 + UCSWRST; // Use SMCLK(20MHz), keep SW reset
UCB0BR0 = 200; // fSCL = SMCLK/200 = ~100kHz
UCB0BR1 = 0;
UCB0I2CSA = 0x28; // Slave Address is 0x28
UCB0CTL1 &= ~UCSWRST; // Clear SW reset, resume operation
}トピック: WDTが効かない
マイコンは、MSP430FR6972を使用しております。
開発環境は、CCS v12を使用しております。
クロックは4Mhzと32Khzを外部入力しております
WDTを1秒でタイムアウトするように設定しております。現場のマイコンでフリーズする現象が起きており、
リセットをすると動き始めるため、WDTが効いていないように思えます。デバッグ用にソフトウェアで無限ループとなるように動作させたところ、
正常にWDTが効くことが確認できております。
1秒と10msのタイマを使って、内部処理をしているため、
そのタイミングでWDTをクリアしております。
以下コードの抜粋になります。#define WatchDog (WDTPW | WDTCNTCL | WDTSSEL__ACLK | WDTIS_4); // 1s 32kHzの時に1秒
volatile unsigned char interrupt_timer0_triggered = 0;
volatile unsigned char interrupt_timer1_triggered = 0;int main(void)
{
WDTCTL = WatchDog;
SFRIE1 |= WDTIE; // Enable WDT interrupt
_delay_cycles(4000); // 1ms
initialize(); // 初期化処理呼び出し
g_sysrstiv = SYSRSTIV;
while (1){
if (interrupt_timer0_triggered){
// 10ミリ秒周期タイマのタイムアウト
timer0();
WDTCTL = WatchDog;
}
if (interrupt_timer1_triggered){
// 1秒周期タイマのタイムアウト
timer1();
WDTCTL = WatchDog;
}
__bis_SR_register(LPM3_bits + GIE);}
}//interrupt_timer0_triggered,interrupt_timer1_triggeredはタイマ割り込み発生時に1となります。
フリーズしているのにWDTが効かなるケースは御座いますでしょうか。
トピック: TPS659037のSlave Address
お世話になります。
PMIC TPS659037のI2C Slave Addressについて伺います。
本ICのデータシートの Table 5-7. I2C Address Configurationを見ますと、
I2C_SPIレジスタ ID_I2C1[3:0]の値によってSlave Addressが規定されております。
一方、Register MapでI2C_SPIレジスタの値を確認しますと、Reset時の値が’X’となっており、
ドキュメントからはどちらが正解か読み取れません。なお、実機で確認したところ0x58-5Bとなっておりました。
どこを参照すればよいかご教示願います。