RTC test on MMC/RTC peripheral board.
Note. To run this test it is necessay to uncomment I2C_RTC_WRITE_TEST in i2c library.
Toolkit:STM Development System
Location:/bipom/devtools/STM32/examples/i2c_rtc
int main(void) { delayMs(250); tprintf("\n\rMini-Max/STM32F1"); tprintf("\n\rI2C RTC TEST REV 1.01"); SOFT_I2C_RTC_Test(); return 0; } /******************************************************************************************** ; Function: SOFT_I2C_PrintData ; ; Description: Prints data buffer ; ; Inputs: buffer - pointer to data buffer ; length - length of data buffer ; ; Returns: Nothing **********************************************************************************************/ void SOFT_I2C_ATTRIBUTE SOFT_I2C_PrintData( UBYTE* buffer, UINT length) { UINT ndx; for( ndx = 0; ndx < length ; ndx++) { if (!(ndx%16)) tprintf("\n\r%04x",ndx); tprintf (" %02x",*buffer++); } } /******************************************************************************************** ; Function: SOFT_I2C_Test ; ; Description: Tests AT24C04 ; ; Inputs: Nothing ; ; Returns: Nothing **********************************************************************************************/ void SOFT_I2C_ATTRIBUTE SOFT_I2C_Test(void) { I2C_ERRCODE ec; UINT address; UBYTE pBuf[I2C_SIZE]; // // tprintf("\n\r\n\r***I2C TEST***"); // for (;;) // { // SOFT_SDA_OUTPUT; // SOFT_SDA_INPUT; // SOFT_SCL_OUTPUT; // SOFT_SCL_INPUT; // } #ifdef I2C_WRITE_TEST // WRITE TEST tprintf ("\n\rWriting."); for(address =0; address < I2C_SIZE; address++) pBuf[address]=0; // for(address =0; address < I2C_SIZE; address++) { ec = Soft_WriteAT24C04 (address,(address>>8)&0xFF); if(I2C_SUCCESS!=ec) { tprintf ("\n\rFAILED, addr=%d ec=%d",address,ec); break; } else { if (!(address%32)) tprintf ("."); } // SoftI2cDelay(10000); } if(I2C_SUCCESS==ec) { tprintf ("OK"); } #endif #ifdef I2C_READ_TEST // READ TEST tprintf ("\n\rReading."); for(address =0; address < I2C_SIZE; address++) pBuf[address]=0; // ec = Soft_ReadAT24C04 (0,pBuf,I2C_SIZE); if(I2C_SUCCESS!=ec) { tprintf ("\n\rFAILED,ec=%d",ec); } if(I2C_SUCCESS==ec) { tprintf ("OK"); } // tprintf ("\n\rVerifying."); for(address =0; address < I2C_SIZE; address++) { if(pBuf[address]!=((address>>8)&0xFF)) { tprintf ("\n\rFAILED, addr=%d ec=%d",address,ec); break; } else { if (!(address%32)) tprintf ("."); } } if(I2C_SUCCESS==ec) { tprintf ("OK"); SOFT_I2C_PrintData(pBuf,I2C_SIZE); } #endif } /******************************************************************************************** ; Function: SOFT_I2C_RTC_Test ; ; Description: Tests external RTC ; ; Inputs: Nothing ; ; Returns: Nothing **********************************************************************************************/ void SOFT_I2C_ATTRIBUTE SOFT_I2C_RTC_Test(void) { I2C_ERRCODE ec; UINT address; UBYTE pBuf[I2C_RTC_SIZE]; // // tprintf("\n\r\n\r***I2C RTC TEST***"); Soft_I2C_Config(&I2C_SETTINGS); // for (;;) // { // SOFT_SDA_OUTPUT; // SOFT_SDA_INPUT; // SOFT_SCL_OUTPUT; // SOFT_SCL_INPUT; // } #ifdef I2C_RTC_WRITE_TEST // WRITE TEST tprintf ("\n\rWriting."); for(address =0; address < I2C_RTC_SIZE; address++) pBuf[address]=0; // for(address =0; address < I2C_RTC_SIZE; address++) { ec = Soft_WriteRTC(address,(address>>8)&0xFF); if(I2C_SUCCESS!=ec) { tprintf ("\n\rFAILED, addr=%d ec=%d",address,ec); break; } // } if(I2C_SUCCESS==ec) { tprintf ("OK"); } #endif #ifdef I2C_RTC_READ_TEST READ_TEST: tprintf ("\n\rReading."); for(address =0; address < I2C_RTC_SIZE; address++) pBuf[address]=0; // for(address =0; address < I2C_RTC_SIZE; address++) { ec = Soft_ReadRTC (address,&pBuf[address]); if(I2C_SUCCESS!=ec) { tprintf ("\n\rFAILED,addr=%d ec=%d",address,ec); break; } } if(I2C_SUCCESS==ec) { tprintf ("OK Seconds= %02x", pBuf[RTC_SECOND_LOCATION]); } // delayMs(500); goto READ_TEST; #endif }