Part Number: MSP430I2041
Tool/software: Code Composer Studio
I have successfully read the data from the ds3231 .But now i want to send this rtc data on UART but my code got stuck here
//Poll for transmit interrupt flag.
while(!(HWREG16(baseAddress + OFS_UCBxIFG) & UCTXIFG))
{
;
}
here is my Code:
void main(void)
{
uint8_t i;
uint8_t checksum;
//T_cycle=4098;//8192;// For 500Hz=8192, for 1Khz=4098
T_cycle=8192;
Duty=0;//Initially LAMP should be OFF
//D_cycle=(uint16_t)(40.98*Duty);
D_cycle=(uint16_t)(81.92*(100-Duty)); // (100-duty) as we have used Optocoupler
LAMP_ON=0;
Timer_A_outputPWMParam outputPWMConfig = {
TIMER_A_CLOCKSOURCE_SMCLK, // SMCLK Clock Source
TIMER_A_CLOCKSOURCE_DIVIDER_4, // SMCLK/4 = 4.096 MHz
TIMER_PERIOD, // 8ms
TIMER_A_CAPTURECOMPARE_REGISTER_1, // Output on TA0.1
TIMER_A_OUTPUTMODE_RESET_SET, // Generate PWM
TIMER_DUTY_CYCLE // 75% Duty Cycle
};
Timer_A_initContinuousModeParam continuousModeConfig = {
TIMER_A_CLOCKSOURCE_ACLK, // ACLK Clock Source
TIMER_A_CLOCKSOURCE_DIVIDER_1, // ACLK/1 = 32kHz
TIMER_A_TAIE_INTERRUPT_ENABLE, // Enable Overflow ISR
TIMER_A_DO_CLEAR // Clear Counter
};
EUSCI_B_I2C_initMasterParam i2cConfig =
{
EUSCI_B_I2C_CLOCKSOURCE_SMCLK, // SMCLK Clock Source
4096000, // SMCLK = 4.096MHz
EUSCI_B_I2C_SET_DATA_RATE_400KBPS, // Desired I2C Clock of 400kHz
0, // No byte counter threshold
EUSCI_B_I2C_NO_AUTO_STOP // No Autostop
};
MSP_GUI_System_setup();
// Initialize the EM Lib to default settings and start conversions
EMLibGUIApp_Init();
GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P1,GPIO_PIN5,GPIO_SECONDARY_MODULE_FUNCTION);
Timer_A_outputPWM(TIMER_A0_BASE, &outputPWMConfig,T_cycle,D_cycle);
Timer_A_initContinuousMode(TIMER_A1_BASE, &continuousModeConfig);
Timer_A_startCounter(TIMER_A1_BASE, TIMER_A_CONTINUOUS_MODE);
WDT_hold(WDT_BASE);
CS_setupDCO(CS_INTERNAL_RESISTOR);
// Setting SMCLK = DC0 / 4 = 4.096 MHz
CS_initClockSignal(CS_SMCLK, CS_CLOCK_DIVIDER_4);
// Setting P1.6 and P1.7 as I2C pins
GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P1,GPIO_PIN6 | GPIO_PIN7,GPIO_PRIMARY_MODULE_FUNCTION);
// Setting up I2C communication at 400kHz using SMCLK
EUSCI_B_I2C_initMaster(EUSCI_B0_BASE, &i2cConfig);
// Settings slave address
EUSCI_B_I2C_setSlaveAddress(EUSCI_B0_BASE, SLAVE_ADDRESS);
// Enable the module for operation
EUSCI_B_I2C_enable(EUSCI_B0_BASE);
// __delay_cycles(50);
__delay_cycles(10000000);
// Enable needed I2C interrupts
EUSCI_B_I2C_clearInterrupt(EUSCI_B0_BASE, EUSCI_B_I2C_TRANSMIT_INTERRUPT0 | EUSCI_B_I2C_NAK_INTERRUPT);
EUSCI_B_I2C_enableInterrupt(EUSCI_B0_BASE, EUSCI_B_I2C_TRANSMIT_INTERRUPT0 | EUSCI_B_I2C_NAK_INTERRUPT);
EUSCI_B_I2C_clearInterrupt(EUSCI_B0_BASE, EUSCI_B_I2C_RECEIVE_INTERRUPT0 | EUSCI_B_I2C_NAK_INTERRUPT);
EUSCI_B_I2C_enableInterrupt(EUSCI_B0_BASE, EUSCI_B_I2C_RECEIVE_INTERRUPT0 | EUSCI_B_I2C_NAK_INTERRUPT);
__delay_cycles(10000000);
// WriteRTCByte(0x68,0x00,0x00,0x00,0x09,0x03,0x1E,0x0C,0x14);
// WriteRTCByte(0x68,0x00,0x00);
sec1=0;
sec1=ReadRTCByte(0x68,0x01);
// This is the Design Centers Main Loop
while(1){
//sec1=ReadRTCByte(0x68,0x00);
EMLibGUIApp_Engine();
EUSCI_A_UART_transmitData(0x0140,sec1);
}
}
void WriteRTCByte(uint8_t i2cAdd, uint8_t rtcAdd, uint8_t data)
{
EUSCI_B_I2C_setSlaveAddress(EUSCI_B0_BASE, i2cAdd);
//Set Transmit mode
EUSCI_B_I2C_setMode(EUSCI_B0_BASE, EUSCI_B_I2C_TRANSMIT_MODE);
__delay_cycles(50);
EUSCI_B_I2C_masterSendMultiByteStart(EUSCI_B0_BASE, rtcAdd);
EUSCI_B_I2C_masterSendMultiByteNext(EUSCI_B0_BASE, data);
EUSCI_B_I2C_masterSendMultiByteStop(EUSCI_B0_BASE);
while(EUSCI_B_I2C_isBusBusy(EUSCI_B0_BASE));
}//end void WriteRTCByte(uint8_t i2cAdd, uint8_t rtcAdd, uint8_t data)
uint8_t ReadRTCByte(uint8_t i2cAdd, uint8_t rtcAdd)
{
uint8_t i2cByte;
//Specify slave address
EUSCI_B_I2C_setSlaveAddress(EUSCI_B0_BASE, i2cAdd);
//Set Transmit mode
EUSCI_B_I2C_setMode(EUSCI_B0_BASE, EUSCI_B_I2C_TRANSMIT_MODE);
__delay_cycles(50);
EUSCI_B_I2C_masterSendMultiByteStart(EUSCI_B0_BASE, rtcAdd);
while(EUSCI_B_I2C_isBusBusy(EUSCI_B0_BASE));
//Specify slave address
EUSCI_B_I2C_setSlaveAddress(EUSCI_B0_BASE, i2cAdd);
//Set receive mode
EUSCI_B_I2C_setMode(EUSCI_B0_BASE, EUSCI_B_I2C_RECEIVE_MODE);
EUSCI_B_I2C_masterReceiveStart(EUSCI_B0_BASE);
i2cByte = EUSCI_B_I2C_masterReceiveSingle(EUSCI_B0_BASE);
EUSCI_B_I2C_masterReceiveMultiByteStop(EUSCI_B0_BASE);
__delay_cycles(50);
while(EUSCI_B_I2C_isBusBusy(EUSCI_B0_BASE));
return(i2cByte);
}//end uint8_t ReadRTCB