帶RTC的I2C總線鐵電存儲器FM31256的設(shè)計(jì)
P5OUT |=RTC_SCL;// SCL=1
delay(IIC_DELAY);
P5OUT =~ RTC_SCL;// SCL=0}
void FM31256_Send_noAck( void ) {/*FM31256不應(yīng)答程序*/
P5OUT |=RTC_SCL;// SCL=1
delay(IIC_DELAY);
P5OUT =~ RTC_SCL;// SCL=0}
說明:SCL線是高電平時,SDA線從高電平向低電平切換,表示起始條件;當(dāng)SCL是高電平時,SDA線由低電平向高電平切換,表示停止條件。相關(guān)的確認(rèn)時鐘脈沖由主機(jī)產(chǎn)生,在確認(rèn)的時鐘脈沖器件發(fā)送方釋放SDA(高電平),在此期間接收方須將SDA拉低。
void FM31256_transfByte_to_IIC( unsigned char tran_byte ) {/* CPU字節(jié)發(fā)送程序*/
unsigned char i , current_bit =0x80;
P5OUT =~ RTC_SCL;
delay(IIC_DELAY);
for( i=0; i =7; i++ ) {
if ( tran_byte current_bit )
P6OUT |= RTC_SDA;
else
P6OUT =~ RTC_SDA;
current_bit >>=1;
delay(IIC_DELAY);
P5OUT |=RTC_SCL;//SCL=1
delay(IIC_DELAY);
P5OUT =~ RTC_SCL;//SCL=0
delay(IIC_DELAY);
}
}
unsigned char FM31256_receByte_from_IIC( void ){/*CPU字節(jié)接收程序*/
unsigned char mvalue, i, rece_data =0;
P6DIR =~ RTC_SDA;//設(shè)置為輸入方向
P5OUT =~ RTC_SCL; //SCL=0
delay(IIC_DELAY);
for(i=0;i8;i++) {
rece_data = rece_data1;
P5OUT |=RTC_SCL;//SCL=1
delay(IIC_DELAY);
mvalue = P6IN RTC_SDA;//當(dāng)前位的值
if( mvalue )//接收位為高
rece_data = rece_data | 0x01;
else//接收位為低
rece_data = rece_data 0xFE;
P5OUT =~ RTC_SCL;//SCL=0
delay(IIC_DELAY);
}
P6DIR |=RTC_SDA;//P6.6輸出
return(rece_data);//返回收到的字節(jié)
}
說明:發(fā)送到SDA線上的每個字節(jié)須為8位。tran_byte為CPU要發(fā)送的字節(jié),CPU讀入的數(shù)據(jù)存儲在rece_data中。對FM31256存儲器可以直接對當(dāng)前地址進(jìn)行“讀”操作,也可以連續(xù)“讀/寫”多個字節(jié)而無須逐一指定地址。依據(jù)上述一般步驟,對存儲器的訪問操作可歸納為3種基本操作: ① 設(shè)置當(dāng)前操作目標(biāo)地址; ② 寫入數(shù)據(jù); ③ 讀出數(shù)據(jù)。
訪問存儲器操作有多種,如內(nèi)存“寫”、當(dāng)前地址或順序連續(xù)“讀”和隨機(jī)地址“讀”操作。在控制程序中,需要向FM31256內(nèi)存中寫入并讀出給定參數(shù)、故障信息等數(shù)據(jù)。內(nèi)存讀/寫的方法如下:
內(nèi)存寫操作,首先由CPU發(fā)送從機(jī)地址,然后是內(nèi)存16位地址,主機(jī)通過設(shè)置從機(jī)地址字節(jié)的最低位為0聲明一個寫操作;接收應(yīng)答信號后,CPU向FM31256發(fā)送數(shù)據(jù)的每個字節(jié),之后器件又產(chǎn)生應(yīng)答信號,任何數(shù)量的連續(xù)字節(jié)可以被寫入,以停止信號結(jié)束傳輸。有兩種類型的讀操作:當(dāng)前地址讀操作和隨機(jī)地址讀操作。讀操作同樣先由CPU發(fā)送從機(jī)地址,主機(jī)通過設(shè)置從機(jī)地址字節(jié)的最低位為1聲明一個讀操作。當(dāng)要進(jìn)行隨機(jī)讀操作時,還要在讀取數(shù)據(jù)之前,發(fā)送16位內(nèi)存地址之后讀取任意個字節(jié),每個字節(jié)后應(yīng)跟隨應(yīng)答信號,以停止信號結(jié)束傳輸。
在電磁鑄軋電源控制裝置的主控程序中,還將調(diào)用時鐘刷新函數(shù)Flash_time()、時鐘寫入函數(shù)Write_time()、寄存器寫入函數(shù)Register_write()和寄存器讀出函數(shù)Register_read()。
啟動RTC和WatchDog的流程圖如圖4所示。
圖4 啟動RTC和WatchDog的流程圖
結(jié)語
將鐵電存儲器用于電磁鑄軋電源控制裝置中,與MSP430系列單片機(jī)相結(jié)合,充分發(fā)揮了其強(qiáng)大的功能;同時取代了傳統(tǒng)的EEPROM和實(shí)時時鐘芯片,既降低了硬件成本,又簡化了軟件設(shè)計(jì)。
評論