久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > DSP SPI口和串行EEPROM在變頻器中的應用

DSP SPI口和串行EEPROM在變頻器中的應用

作者: 時間:2009-05-11 來源:網絡 收藏

  以下是讀狀態寄存器子程序:

  unsigned int RSDR_(void)

  { unsigned int readspibuftrue;

  *PC1=0xBF; /*置低STE引腳,從而選通*/

  *DAT=RDSR; /*發送x5168的讀狀態寄存器命令字*/

  while((*SPISTS0x40)!=0x40){} /*等待SPI寫結束*/

  readspibuftrue=*SPIBUF; /*讀SPIBUF寄存器,清除SPI INT FLAG 位*/

  *SPIDAT=0; /*發送偽數據*/

  while((*SPISTS0x40)!=0x40){} /*等待SPI讀/寫結束*/

  readspibuftrue=*SPIBUF; /*讀SPIBUF寄存器,讀取狀態寄存器*/

  return readspibuftrue;

  }

  二、寫操作

  a).在試圖向器件寫入數據前必須首先通過發送WREN指令來設置寫使能鎖存WEL(見圖4)。/CS 先被拉低,接著向器件輸入WREN指令(00000110B)。在指令的所有的8位傳送完后,/CS 必須被拉高。如果用戶在發送完WREN指令后,沒有將/CS 拉高而繼續寫操作則該寫操作將被忽略。

圖4 寫使能時序圖

  串行寫使能命令子程序如下:

  void WREN_X5168(void) /*寫使能*/

  { *SPIPC1=0xBF; /*置低SPISTE引腳,從而選通X5168*/

  *SPIDAT=WREN; /*發送X5168的寫使能命令字*/

  while((*SPISTS0x40)!=0x40){} /*等待SPI寫結束*/

  readspibuf=*SPIBUF; /*讀SPIBUF寄存器,清除SPI INT FLAG 位*/

  *SPIPC1|=0x40; /*置高SPISTE引腳,從而禁止X5168*/

  }

  b).為了向存儲器陣列寫入數據用戶接著發送寫WRITE 指令(00000010B),跟著是16位地址和被寫入的數據。任何不用的地址位都被指令為“0”,寫操作最少要用32個時鐘,/CS 必須為低并在該操作期間一直保持為低。如果地址計數器達到一頁的末端而時鐘還在繼續,時計數器將返回至該頁的首地址,并覆蓋任何之前已寫入的數據。對于將完成的頁面寫操作(字節或頁面寫)而言,在寫入的最后一個數據的位0被同時輸入后,/CS只能被拉高。如果它在其它任何時候被拉高則不能完成寫操作(見圖5)。

圖5 寫陣列時序圖

  以下是寫EEPROM陣列子程序,RA_ADDR為存儲要寫數據數組的首地址,EEP_ADDR為要寫入的EEPROM首地址,N要存儲數據的個數。

  void WRITE_X5168(unsigned int * RA_ADDR, unsigned int EEP_ADDR, unsigned int N)

  { unsigned int I;

  WREN_X5168(); /*寫使能*/

  *SPIPC1=0xBF; /*置低SPISTE引腳,從而選通X5168*/

  *SPIDAT=WRITE; /*發送x5168的寫狀態寄存器命令字*/

  while((*SPISTS0x40)!=0x40){} /*等待SPI寫結束*/

  readspibuf=*SPIBUF; /*讀SPIBUF寄存器,清除SPI INT FLAG 位*/

  *SPIDAT=EEP_ADDR>>8; /*先發送高位地址在發送低位地址*/

  while((*SPISTS0x40)!=0x40){} /*等待SPI寫結束*/

  readspibuf=*SPIBUF; /*讀SPIBUF寄存器,清除SPI INT FLAG 位*/

  *SPIDAT=EEP_ADDR; /*先發送高位地址在發送低位地址*/

  while((*SPISTS0x40)!=0x40){} /*等待SPI寫結束*/

  readspibuf=*SPIBUF; /*讀SPIBUF寄存器,清除SPI INT FLAG 位*/

  for (I=0;I

  { *SPIDAT =*(RA_ADDR+I)>>8 ; /*發送數據用數組傳送,傳送數據高八位*/

  while((*SPISTS0x40)!=0x40){} /*等待SPI寫結束*/

  readspibuf=*SPIBUF; /*讀SPIBUF寄存器,清除SPI INT FLAG 位*/

  *SPIDAT =*(RA_ADDR+I) ; /*發送數據用數組傳送,傳送數據第八位*/

  while((*SPISTS0x40)!=0x40){} /*等待SPI寫結束*/

  readspibuf=*SPIBUF; /*讀SPIBUF寄存器,清除SPI INT FLAG 位*/

  }

  *SPIPC1|=0x40; /*置高SPISTE引腳,從而禁止X5168*/

  }

  c).為向狀態寄存器寫數據,在WRSR指令(00000001B)之后應跟隨被寫入的數據(見圖6),數據位0和位1必須為“0”。

圖6 寫狀態寄存器時序圖

  以下是寫狀態寄存器子程序:

  void WRSR_X5168(unsigned int COM) /*寫狀態*/

  { WREN_X5168(); /*寫使能*/

  *SPIPC1=0xBF; /*置低SPISTE引腳,從而選通X5168*/

  *SPIDAT=WRSR; /*發送X5168的寫狀態寄存器命令字*/

  while((*SPISTS0x40)!=0x40){} /*等待SPI寫結束*/

  readspibuf=*SPIBUF; /*讀SPIBUF寄存器,清除SPI INT FLAG 位*/

  *SPIDAT=COM; /*STATUS_REG發送狀態字*/

  while((*SPISTS0x40)!=0x40){} /*等待SPI寫結束*/

  readspibuf=*SPIBUF; /*讀SPISTS寄存器,清除SPI INT FLAG 位*/

  *SPIPC1|=0x40; /*置高SPISTE引腳,從而禁止X5168*/

  TIMEDEL(5); /*延時1us*/

  }

  以上子程序實現了DSP對X5168的讀寫功能,在主程序中調用這些子程序就可實現對X5168的操作。

5 結束語

  由于篇幅的原因,本文沒有過多的講述DSP的串行外設接口和X5168的各項特性,這些說明書上都有敘述且很具體。而是把重點放在了講述DSP擴展EEPROM應用的軟硬件設計,該設計已成功應用在筆者開發的變頻器中,經過反復測試,運行可靠。


上一頁 1 2 下一頁

關鍵詞: TMS320F240 SPI EEPROM X5168

評論


相關推薦

技術專區

關閉