2017-09-20 4 views
0

MPU6050がSLEEPモードから抜け出ることはありません。私はスリープビット(ビット6)をクリアする必要があることを理解していますが、クリアを実行した後でパワーマネジメントレジスタを読み取ると0x40が返されます。ビット6はクリアされていない。MPU6050 Tiva Cダイレクトレジスタモードを使用した電力管理

はい、これは課題のためであり、私どもはライブラリなどの使用を許可されていません。私の教師は助けができず、ここで質問します。

void I2C1_Setup(void) 
{ 
//Setup I2C 1 on PORT A Pins 6, 7 

// GPIO A 

SYSCTL_RCGCGPIO |= (1<<0); while ((SYSCTL_PRGPIO & (1<<0)) != (1<<0)) {} 

GPIOA_AFSEL |= (1<<6)|(1<<7); 
GPIOA_PCTL &= ~(0xFF<<24); 
GPIOA_PCTL |= (3<<28)|(3<<24); 
GPIOA_DEN |= (1<<6)|(1<<7); 
GPIOA_ODR |= (1<<7); 

// I2C 1 

SYSCTL_RCGCI2C |= (1<<1); while ((SYSCTL_PRI2C & (1<<1)) != (1<<1)) {} 
/*  
TPR = (System Clock/(2*(SCL_LP + SCL_HP)*SCL_CLK))-1; 
TPR = (16MHz/(2*(6+4)*100000))-1; 
TPR = 7 
*/ 

I2C1_MCR = (1<<4);     //master mode 
I2C1_MTPR = (7<<0);     //100Kbps 

//Disable SLEEP mode  
I2C1_MSA = 0xD0;     // Set slave address and write mode 
I2C1_MDR = 0x6B;     // Power management register   
I2C1_MCS = 0x3;      // start run mode 
while (!((I2C1_MCS & 1) != 0)) {} 
while ((I2C1_MCS & 1) == 0) {} // poll busy 
I2C1_MDR = 0; 
I2C1_MCS = 0x7;      // stop start run mode 
while (!((I2C1_MCS & 1) != 0)) {} 
while ((I2C1_MCS & 1) == 0) {} // poll busy 
} 

を次のように私のI2Cセットアップは電源管理レジスタの値をテストするためであるが、このための戻り値が0x40のです

I2C1_MSA = 0xD0;        // transmit mode 
    I2C1_MDR = 0x6B;        // register address 
    I2C1_MCS = 3;         // start run mode 
    while (!((I2C1_MCS & 1) != 0)) {} 
    while ((I2C1_MCS & 1) != 0) {}    // poll busy 

    I2C1_MSA = 0xD1;        // receive mode 
    I2C1_MCS = 7;         // stop start run mode 
    while (!((I2C1_MCS & 1) != 0)) {} 
    while ((I2C1_MCS & 1) != 0) {}    // poll busy 
    int data; 
    data = I2C1_MDR; 

を使用しています。同じ手順を実行してWHO_AM_Iレジスタ(0x75)を調べると、スレーブアドレスが0x68であることが確認されます。

私たちはここに(https://playground.arduino.cc/Main/MPU-6050)提供される単純なスケッチを使用してArduinoの上の測定値を得ることができましたとしてMPUは、一般的に機能している知っている

私はTM4C123GH6PMとKeil社uvision5を使用しています。

ここで何が問題になるのかよく分かりません。

何か助けていただければ幸いです。

答えて

0

私は/ recを送信しようとしたときに間違った実行モードを使用していたようです。データ。 では、stop start run(0x7)を使用する代わりに、startコマンドを再送せずにstop run(0x5)を送信する必要があります。

代わりに

I2C1_MCS = 0x7;      // stop start run mode 

使用

I2C1_MCS = 0x5;      // stop run mode 
関連する問題