|
@@ -16,7 +16,7 @@ void RTC_Init(void) {
|
|
/* Destination: I2C TX data register. */
|
|
/* Destination: I2C TX data register. */
|
|
DMA1_Channel3->CPAR = (uint32_t)&(I2C1->TXDR);
|
|
DMA1_Channel3->CPAR = (uint32_t)&(I2C1->TXDR);
|
|
/* Set DMA data transfer length (I2C TX buffer length). */
|
|
/* Set DMA data transfer length (I2C TX buffer length). */
|
|
- DMA1_Channel3->CNDTR = RTC_TX_BUF_SIZE;
|
|
|
|
|
|
+ DMA1_Channel3->CNDTR = 3; // hardcode / magic number
|
|
/* Enable DMA channels for I2C */
|
|
/* Enable DMA channels for I2C */
|
|
DMA1_Channel3->CCR |= DMA_CCR_EN;
|
|
DMA1_Channel3->CCR |= DMA_CCR_EN;
|
|
|
|
|
|
@@ -27,11 +27,7 @@ void RTC_Init(void) {
|
|
|
|
|
|
/* Wait for I2C */
|
|
/* Wait for I2C */
|
|
while ( I2C1->ISR & I2C_ISR_BUSY ) {};
|
|
while ( I2C1->ISR & I2C_ISR_BUSY ) {};
|
|
-/*
|
|
|
|
- LL_I2C_SetSlaveAddr(I2C1, DS3231_I2C_ADDR);
|
|
|
|
- LL_I2C_SetTransferRequest(I2C1, LL_I2C_REQUEST_WRITE);
|
|
|
|
- LL_I2C_SetTransferSize(I2C1, 3); // controll addr + 2 bytes of data
|
|
|
|
-*/
|
|
|
|
|
|
+
|
|
/* Set the device address and number bytes to send. */
|
|
/* Set the device address and number bytes to send. */
|
|
I2C1->CR2 &= ~( I2C_CR2_SADD | I2C_CR2_NBYTES | I2C_CR2_RD_WRN);
|
|
I2C1->CR2 &= ~( I2C_CR2_SADD | I2C_CR2_NBYTES | I2C_CR2_RD_WRN);
|
|
I2C1->CR2 |= ( DS3231_I2C_ADDR | 3 << I2C_CR2_NBYTES_Pos );
|
|
I2C1->CR2 |= ( DS3231_I2C_ADDR | 3 << I2C_CR2_NBYTES_Pos );
|
|
@@ -71,18 +67,13 @@ void RTC_ReadAll(rtc_t * data) {
|
|
I2C1->TXDR = DS3231_ADDR_TIME;
|
|
I2C1->TXDR = DS3231_ADDR_TIME;
|
|
|
|
|
|
while ( I2C1->ISR & I2C_ISR_BUSY ) {};
|
|
while ( I2C1->ISR & I2C_ISR_BUSY ) {};
|
|
|
|
+
|
|
/* Reading all */
|
|
/* Reading all */
|
|
-/*
|
|
|
|
- LL_I2C_SetSlaveAddr(I2C1, DS3231_I2C_ADDR);
|
|
|
|
- LL_I2C_SetTransferRequest(I2C1, LL_I2C_REQUEST_READ);
|
|
|
|
- LL_I2C_SetTransferSize(I2C1, DS3231_SIZE_ALL);
|
|
|
|
-*/
|
|
|
|
I2C1->CR2 &= ~( I2C_CR2_SADD | I2C_CR2_NBYTES | I2C_CR2_RD_WRN);
|
|
I2C1->CR2 &= ~( I2C_CR2_SADD | I2C_CR2_NBYTES | I2C_CR2_RD_WRN);
|
|
I2C1->CR2 |= ( DS3231_I2C_ADDR | DS3231_SIZE_ALL << I2C_CR2_NBYTES_Pos | I2C_CR2_RD_WRN);
|
|
I2C1->CR2 |= ( DS3231_I2C_ADDR | DS3231_SIZE_ALL << I2C_CR2_NBYTES_Pos | I2C_CR2_RD_WRN);
|
|
|
|
|
|
I2C1->CR1 |= ( I2C_CR1_RXDMAEN );
|
|
I2C1->CR1 |= ( I2C_CR1_RXDMAEN );
|
|
I2C1->CR2 |= ( I2C_CR2_START );
|
|
I2C1->CR2 |= ( I2C_CR2_START );
|
|
-
|
|
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -91,6 +82,7 @@ void RTC_ReadAll(rtc_t * data) {
|
|
void RTC_WriteTimeCalendar(rtc_t * data) {
|
|
void RTC_WriteTimeCalendar(rtc_t * data) {
|
|
Flag.I2C_TX_End = 0;
|
|
Flag.I2C_TX_End = 0;
|
|
|
|
|
|
|
|
+ DMA1_Channel3->CCR &= ~DMA_CCR_EN;
|
|
DMA1_Channel3->CMAR = (uint32_t)data;
|
|
DMA1_Channel3->CMAR = (uint32_t)data;
|
|
DMA1_Channel3->CPAR = (uint32_t)&(I2C1->TXDR);
|
|
DMA1_Channel3->CPAR = (uint32_t)&(I2C1->TXDR);
|
|
DMA1_Channel3->CNDTR = DS3231_SIZE_TIME + DS3231_SIZE_CALENDAR;
|
|
DMA1_Channel3->CNDTR = DS3231_SIZE_TIME + DS3231_SIZE_CALENDAR;
|