2016-11-22 30 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) 但只是仔細檢查你正在尋找合適的針腳...

祝你好運!