首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tiva C不能更改MDR寄存器的值

Tiva C不能更改MDR寄存器的值
EN

Stack Overflow用户
提问于 2016-11-22 20:39:41
回答 1查看 239关注 0票数 0

我有一个tm4c123gxl微控制器,我已经尝试了一段时间使用电路板上的I2C模块,但没有结果,我一直在尝试用一定的值设置MDR寄存器,但它保持为0。

下面是我用于初始化的代码,直到到达我设置MDR寄存器im的部分--使用逐步调试--我最初将代码运行到I2C3_MDR_R = 0x2D;的赋值步骤

代码语言:javascript
复制
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协议的工作原理等。
  • 检查数据表,然后按照上面提到的逐个步骤执行,这使我看到了下面的代码。
  • 我知道我应该使用能感知的库,这样会更容易,但是使用寄存器可以帮助我更好地理解每件事情是如何工作的,我还是个学生。
  • 一开始,我没有数字启用线,因为没有提到它是为I2C激活的,但这是唯一符合逻辑的,因为我们正在使用数字值,我尝试了这两种方法都产生了相同的输出mdr=0。
  • 我使用kil4作为我的IDE和im,查看I2C模块3的寄存器值,以确定数据是否放置在MDR中。

希望有人能帮忙谢谢。

EN

回答 1

Stack Overflow用户

发布于 2016-12-18 06:25:15

这是一个很长的机会,但这里说:

在你的评论中,第6步说

代码语言:javascript
复制
//6-enable digital functionality for PA6 and PA7

但看来你在研究GPIO_PORTD..。

也许这是一个注释错误(您的意思是PD6和PD7),但是请再次检查一下您正在查看的是正确的引脚.

祝好运!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40751185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档