2016-11-22 48 views
0

我有一个Tiva C微控制器tm4c123gxl我一直在尝试一段时间使用板上的I2C模块与数字加速度计没有结果,我一直试图设置MDR寄存器具有一定的值发送,但它保持为0Tiva C无法更改MDR寄存器的值

这里是我用于初始化的代码,直到到达部分,我设置了MDR寄存器即时使用一步一步调试我最初运行代码到的I2C3_MDR_R = 0x2D;

void PortDInit(void) 
{ 
volatile unsigned long delay=0; 
    SYSCTL_RCGCI2C_R|=0x8;    //1-set clock of I2C of module 3 
    delay = SYSCTL_RCGC2_R;   //2-delay to allow clock to stabilize 
    SYSCTL_RCGC2_R |= 0x00000008;  //3-port D clock 
    delay = SYSCTL_RCGC2_R;   //4-delay to allow clock to stabilize  
    GPIO_PORTD_AFSEL_R |= 0x03;  //5-alternate function set for I2C mode 
    GPIO_PORTD_DEN_R |=0x03;   //6-enable digital functionality for PA6 and PA7 
    GPIO_PORTD_ODR_R|=0x02;     //7-enable open drain mode for I2CSDA register of port A 
    GPIO_PORTD_PCTL_R = 0x00000033; //8-set PCTL to I2C mode 
    I2C3_MCR_R= 0x00000010;      // 9-intialize the i2c master 
    I2C3_MTPR_R = 0x00000007;     // 10-number of system clock cycles in 1 scl period 
I2C3_MSA_R = 0x3A // set slave address and read write bit 
I2C3_MDR_R = 0x2D;         // data to be sent BREAK POINT HERE using single step here yields MDR with same value = 0 
I2C3_MCS_R = 0x00000003;         // follow transmit condition 
    while(I2C3_MCS_R &= 0x40 == 1);     // wait bus is busy sending data 
    if(I2C3_MCS_R&=0x04 ==1) 
    { 
     //handle error in communication 
    } 
    else 
    { 
     //success in transmission 
    } 

分配步骤我做了什么来达到这个代码

  • 仔细了解I2C协议是如何工作等
  • 检查数据表,并按照initalization步骤中提到有步步这让我这个代码
  • 我知道我应该用tivaware库,这将是更容易,但使用 寄存器可以帮助我了解的更多的东西是如何工作的, IM还是学生
  • 的第一我没有数字使能线它不是提到 是为I2C而激活,但它的只有逻辑应该还有 ,因为我们正在使用我试图与两个产生相同 输出MDR = 0
  • 我使用莱凯勒4作为我的IDE和IM观看 I2C模块3的寄存器的值来知道数字值是否将数据放在MDR中

希望有人帮忙 谢谢。

+2

是“mdr = 0”,如“我有一个示波器/逻辑分析仪的引脚,我可以看到一个零字节正在传输”或在“我不明白这个数据寄存器如何工作”?如果是后者,请注意数据表中关于读取敏感性的内容。我不明白这一部分,但通常不应该认为写入双向数据/ FIFO类型寄存器的任何内容都可以被再次读回。 – Notlikethat

+0

@不记得那个mdr = 0既不是在keil中,你可以选择查看微控制器不同端口的值,它的工作方式与逻辑分析器完全相同,但它显示哪些端口和哪些寄存器包含哪些数据 –

回答

0

这是一个长镜头,但这里有云:

在您的意见

,第6步说

//6-enable digital functionality for PA6 and PA7 

但似乎你在GPIO_PORTD工作...

也许它一评论错字(你的意思是PD6和PD7) 但只是仔细检查你正在寻找合适的针脚...

祝你好运!