|
@@ -37,14 +37,14 @@ typedef enum {
|
|
|
|
|
|
/* Private define ------------------------------------------------------------*/
|
|
|
/* USER CODE BEGIN PD */
|
|
|
+#define SPI_BUFFER_SIZE 5
|
|
|
+
|
|
|
+#define RTC_RX_BUF_SIZE 0x12
|
|
|
+#define RTC_TX_BUF_SIZE 7
|
|
|
/* USER CODE END PD */
|
|
|
|
|
|
/* Private macro -------------------------------------------------------------*/
|
|
|
/* USER CODE BEGIN PM */
|
|
|
-#define SPI_BUFFER_SIZE 5
|
|
|
-
|
|
|
-#define I2C_RX_BUF_SIZE 18
|
|
|
-#define I2C_TX_BUF_SIZE 7
|
|
|
/* USER CODE END PM */
|
|
|
|
|
|
/* Private variables ---------------------------------------------------------*/
|
|
@@ -72,9 +72,9 @@ static const uint16_t nixieCathodeMap[4][10] = {
|
|
|
{0x0200, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100}
|
|
|
};
|
|
|
static const uint8_t nixieCathodeMask[4][2] = {{0x00, 0x3f}, {0xc0, 0x0f}, {0xf0, 0x03}, {0xc0, 0x00}};
|
|
|
-static uint8_t tubesBuffer[SPI_BUFFER_SIZE];
|
|
|
-static uint8_t i2cBufTX[I2C_TX_BUF_SIZE];
|
|
|
-static uint8_t i2cBufRX[I2C_RX_BUF_SIZE];
|
|
|
+static uint8_t tubesBuffer[SPI_BUFFER_SIZE] = {0};
|
|
|
+static uint8_t i2cBufTX[RTC_TX_BUF_SIZE] = {0};
|
|
|
+static uint8_t i2cBufRX[RTC_RX_BUF_SIZE] = {0};
|
|
|
|
|
|
/* USER CODE END PV */
|
|
|
|
|
@@ -147,7 +147,6 @@ int main(void)
|
|
|
MX_TIM16_Init();
|
|
|
MX_TIM17_Init();
|
|
|
/* USER CODE BEGIN 2 */
|
|
|
- RTC_Init();
|
|
|
// __enable_irq();
|
|
|
//LL_Init1msTick(rcc_clocks.HCLK_Frequency);
|
|
|
//LL_mDelay(1);
|
|
@@ -178,14 +177,14 @@ int main(void)
|
|
|
/* Destination: I2C RX data register. */
|
|
|
DMA1_Channel2->CPAR = (uint32_t)&(I2C1->RXDR);
|
|
|
/* Set DMA data transfer length (I2C RX buffer length). */
|
|
|
- DMA1_Channel2->CNDTR = I2C_RX_BUF_SIZE; //?
|
|
|
+ DMA1_Channel2->CNDTR = RTC_RX_BUF_SIZE;
|
|
|
|
|
|
/* Source: Address of the I2C TX buffer. */
|
|
|
DMA1_Channel3->CMAR = (uint32_t)&i2cBufTX;
|
|
|
/* Destination: I2C TX data register. */
|
|
|
DMA1_Channel3->CPAR = (uint32_t)&(I2C1->TXDR);
|
|
|
/* Set DMA data transfer length (I2C TX buffer length). */
|
|
|
- DMA1_Channel3->CNDTR = I2C_TX_BUF_SIZE; //?
|
|
|
+ DMA1_Channel3->CNDTR = RTC_TX_BUF_SIZE;
|
|
|
|
|
|
/* Enable SPI+DMA transfer */
|
|
|
SPI1->CR2 |= SPI_CR2_TXDMAEN;
|
|
@@ -195,11 +194,13 @@ int main(void)
|
|
|
DMA1_Channel2->CCR |= DMA_CCR_EN; // LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_2);
|
|
|
DMA1_Channel3->CCR |= DMA_CCR_EN; // LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_3);
|
|
|
|
|
|
- /* */
|
|
|
- IN15_OFF;
|
|
|
/* USER CODE END 2 */
|
|
|
|
|
|
/* USER CODE BEGIN WHILE */
|
|
|
+ RTC_Init();
|
|
|
+
|
|
|
+ IN15_OFF;
|
|
|
+
|
|
|
/* Infinite loop */
|
|
|
while (1)
|
|
|
{
|
|
@@ -250,10 +251,9 @@ static void RTC_Init(void) {
|
|
|
/* Clear flags */
|
|
|
Flag.I2C_RX_End = 0;
|
|
|
Flag.I2C_TX_End = 0;
|
|
|
-
|
|
|
+ return;
|
|
|
/* Wait for I2C */
|
|
|
while ( I2C1->ISR & I2C_ISR_BUSY ) {};
|
|
|
- //I2C1->CR1 &= ~I2C_CR1_PE;
|
|
|
|
|
|
/* Fill buffer with register address and register value */
|
|
|
i2cBufTX[0] = DS3231_CONTROL_ADDR;
|
|
@@ -261,33 +261,38 @@ static void RTC_Init(void) {
|
|
|
i2cBufTX[2] = 0x0; // disable 32 kHz output
|
|
|
|
|
|
LL_I2C_SetSlaveAddr(I2C1, I2C_ADDR_RTC);
|
|
|
- LL_I2C_SetTransferRequest(I2C1, LL_I2C_REQUEST_WRITE);
|
|
|
+// LL_I2C_SetTransferRequest(I2C1, LL_I2C_REQUEST_WRITE);
|
|
|
LL_I2C_SetTransferSize(I2C1, 3); // controll addr + 2 bytes of data
|
|
|
- LL_I2C_EnableDMAReq_TX(I2C1);
|
|
|
- //I2C1->CR1 |= I2C_CR1_PE;
|
|
|
- LL_I2C_GenerateStartCondition(I2C1);
|
|
|
+// LL_I2C_EnableDMAReq_TX(I2C1);
|
|
|
+// LL_I2C_GenerateStartCondition(I2C1);
|
|
|
|
|
|
/* Set AUTOEND mode, the device address and number bytes to send. */
|
|
|
// I2C1->CR2 &= ~( I2C_CR2_SADD | I2C_CR2_NBYTES);
|
|
|
// I2C1->CR2 = ( I2C_ADDR_RTC << I2C_CR2_SADD_Pos | 3 << I2C_CR2_NBYTES_Pos );
|
|
|
/* Enable I2C DMA requests. */
|
|
|
-// I2C1->CR1 |= ( I2C_CR1_TXDMAEN );
|
|
|
+ I2C1->CR1 |= ( I2C_CR1_TXDMAEN );
|
|
|
/* Send a start signal. */
|
|
|
-// I2C1->CR2 |= ( I2C_CR2_START );
|
|
|
+ I2C1->CR2 |= ( I2C_CR2_START );
|
|
|
/* (DMA is now running.) */
|
|
|
}
|
|
|
|
|
|
static void RTC_ReadAll(void) {
|
|
|
-/*
|
|
|
- while ( I2C1->ISR & I2C_ISR_BUSY ) {};
|
|
|
|
|
|
+ while ( I2C1->ISR & I2C_ISR_BUSY ) {};
|
|
|
+/*
|
|
|
+ DMA1_Channel3->CMAR = (uint32_t)&i2cBufTX;
|
|
|
+ DMA1_Channel3->CPAR = (uint32_t)&(I2C1->TXDR);
|
|
|
+ DMA1_Channel3->CNDTR = RTC_TX_BUF_SIZE;
|
|
|
+*/
|
|
|
LL_I2C_SetSlaveAddr(I2C1, I2C_ADDR_RTC);
|
|
|
LL_I2C_SetTransferRequest(I2C1, LL_I2C_REQUEST_WRITE);
|
|
|
LL_I2C_SetTransferSize(I2C1, 1);
|
|
|
- i2cBufTX[0] = DS3231_TIME_CAL_ADDR;
|
|
|
- LL_I2C_EnableDMAReq_TX(I2C1);
|
|
|
+// i2cBufTX[0] = DS3231_TIME_CAL_ADDR;
|
|
|
+// LL_I2C_EnableDMAReq_TX(I2C1);
|
|
|
LL_I2C_GenerateStartCondition(I2C1);
|
|
|
-*/
|
|
|
+ while ( !( I2C1->CR2 & I2C_CR2_START ) ) {};
|
|
|
+ I2C1->TXDR = 0x0;
|
|
|
+
|
|
|
while ( I2C1->ISR & I2C_ISR_BUSY ) {};
|
|
|
|
|
|
Flag.I2C_RX_End = 0;
|