Browse Source

I2C work.

Vladimir N. Shilov 3 years ago
parent
commit
16e53cf971
1 changed files with 30 additions and 25 deletions
  1. 30 25
      Src/main.c

+ 30 - 25
Src/main.c

@@ -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;