工具/软件:Code Composer Studio
我已经成功地从 ds3231读取数据。但是现在我想在 UART 上发送这个 RTC 数据、但是我的代码卡在这里
//轮询发送中断标志。
while (!(HWREG16 (baseAddress + OFS_UCBxIFG)& UCTXIFG))
{
;
}
以下是我的代码:
void main (void)
{
uint8_t i;
uint8_t 校验和;
//T_cycle=4098;//8192;//对于500Hz=8192、对于1kHz =4098
T_cycle=8192;
Duty=0;//初始灯应熄灭
//D_cycle=(uint16_t)(40.98*占空比);
d_cycle=(uint16_t)(81.92*(100占空比));//(100占空比)、因为我们使用了光耦合器
LAMP_ON=0;
Timer_A_outputPWMParam outputPWMConfig ={
Timer_A_CLOCKSOURCE_SMCLK、// SMCLK 时钟源
Timer_A_CLOCKSOURCE_DELAG_4、// SMCLK/4 = 4.096MHz
Timer_period、// 8ms
Timer_A_CAPTURECOMPARE 寄存器_1、// TA0.1上的输出
Timer_A_OUTPUTMODE_RESET_SET、//生成 PWM
Timer_Duty_cycle // 75%占空比
};
Timer_A_initContinuousModeParam continuousModeConfig ={
Timer_A_CLOCKSOURCE_ACLK、// ACLK 时钟源
Timer_A_CLOCKSOURCE_DELUGER_1、// ACLK/1 = 32kHz
Timer_A_TAIE_INTERRUPT_ENABLE、//启用溢出 ISR
Timer_A_DO 清除//清除计数器
};
EUSCI_B_I2C_initMasterParam i2cConfig =
{
EUSCI_B_I2C_CLOCKSOURCE_SMCLK、// SMCLK 时钟源
4096000、// SMCLK = 4.096MHz
EUSCI_B_I2C_SET_DATA_RATE 400KBPS、//所需的400kHz I2C 时钟
0、//无字节计数器阈值
EUSCI_B_I2C_NO_AUTO_STOP //无自动停止
};
MSP_GUI_System_setup();
//将 EM Lib 初始化为默认设置并开始转换
EMLibGUIApp_Init();
GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_P1、GPIO_PIN5、GPIO_secondary 模块功能);
Timer_A_outputPWM (timer_A0_BASE、&outputPWMConfig、T_cycle、D_cycle);
Timer_A_initContinuousMode (timer_A1_base、连续模式配置);
Timer_A_startCounter (timer_A1_base、timer_A_Continuous_mode);
WDT_HOLD (WDT_BASE);
CS_setupDCO (CS_internal_voltageR);
//设置 SMCLK = DC0 / 4 = 4.096MHz
CS_initClockSignal (CS_SMCLK、CS_clock_divider 4);
//将 P1.6和 P1.7设置为 I2C 引脚
GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P1、GPIO_PIN6 | GPIO_PIN7、GPIO_PRIMARY_MODULE_Function);
//使用 SMCLK 在400kHz 下设置 I2C 通信
EUSCI_B_I2C_initMaster (EUSCI_B0_BASE、&i2cConfig);
//设置从机地址
EUSCI_B_I2C_setSlaveAddress (EUSCI_B0_BASE、SLAVE_ADDRESS);
//启用模块以进行操作
EUSCI_B_I2C_ENABLE (EUSCI_B0_BASE);
//__delay_cycles (50);
_DELAY_CYCLES (10000000);
//启用所需的 I2C 中断
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);
//这是设计中心主循环
while (1){
//sec1=ReadRTCByte (0x68、0x00);
EMLibGUIApp_Engine();
EUSCI_A_UART_transmitData (0x0140、sec1);
}
}
空 WriteRTCByte (uint8_t i2cADD、uint8_t rtcADD、uint8_t DATA)
{
EUSCI_B_I2C_setSlaveAddress (EUSCI_B0_BASE、i2cADD);
//设置发送模式
EUSCI_B_I2C_setMode (EUSCI_B0_BASE、EUSCI_B_I2C_Transmit 模式);
_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_isBusy (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;
//指定从器件地址
EUSCI_B_I2C_setSlaveAddress (EUSCI_B0_BASE、i2cADD);
//设置发送模式
EUSCI_B_I2C_setMode (EUSCI_B0_BASE、EUSCI_B_I2C_Transmit 模式);
_DELAY_CYCLES (50);
EUSCI_B_I2C_masterSendMultiByteStart (EUSCI_B0_BASE、rtcADD);
while (EUSCI_B_I2C_isBusy (EUSCI_B0_BASE));
//指定从器件地址
EUSCI_B_I2C_setSlaveAddress (EUSCI_B0_BASE、i2cADD);
//设置接收模式
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_isBusy (EUSCI_B0_BASE));
return (i2cByte);
}//end uint8_t ReadRTCB