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を使用しています。
ここで何が問題になるのかよく分かりません。
何か助けていただければ幸いです。