static int __devinit ds3234_probe(struct spi_device *spi) { struct rtc_device *rtc; unsigned char tmp; int res; spi->mode = SPI_MODE_3; spi->bits_per_word = 8; spi_setup(spi); res = ds3234_get_reg(&spi->dev, DS3234_REG_SECONDS, &tmp); if (res != 0) return res; /* Control settings * * CONTROL_REG * BIT 7 6 5 4 3 2 1 0 * EOSC BBSQW CONV RS2 RS1 INTCN A2IE A1IE * * 0 0 0 1 1 1 0 0 * * CONTROL_STAT_REG * BIT 7 6 5 4 3 2 1 0 * OSF BB32kHz CRATE1 CRATE0 EN32kHz BSY A2F A1F * * 1 0 0 0 1 0 0 0 */ ds3234_get_reg(&spi->dev, DS3234_REG_CONTROL, &tmp); ds3234_set_reg(&spi->dev, DS3234_REG_CONTROL, tmp & 0x1c); ds3234_get_reg(&spi->dev, DS3234_REG_CONT_STAT, &tmp); ds3234_set_reg(&spi->dev, DS3234_REG_CONT_STAT, tmp & 0x88); /* Print our settings */ ds3234_get_reg(&spi->dev, DS3234_REG_CONTROL, &tmp); dev_info(&spi->dev, "Control Reg: 0x%02x\n", tmp); ds3234_get_reg(&spi->dev, DS3234_REG_CONT_STAT, &tmp); dev_info(&spi->dev, "Ctrl/Stat Reg: 0x%02x\n", tmp); rtc = rtc_device_register("ds3234", &spi->dev, &ds3234_rtc_ops, THIS_MODULE); if (IS_ERR(rtc)) return PTR_ERR(rtc); dev_set_drvdata(&spi->dev, rtc); return 0; }
void ds3234_set_time() { ds3234_set_reg(DS3234_REG_SECONDS, bin2bcd(now_t.tm_sec)); ds3234_set_reg(DS3234_REG_MINUTES, bin2bcd(now_t.tm_min)); ds3234_set_reg(DS3234_REG_HOURS, bin2bcd(now_t.tm_hour) & 0x3f); /* 0 = Sun */ ds3234_set_reg(DS3234_REG_DAY, bin2bcd(now_t.tm_wday + 1)); ds3234_set_reg(DS3234_REG_DATE, bin2bcd(now_t.tm_mday)); /* 0 = Jan */ ds3234_set_reg(DS3234_REG_MONTH, bin2bcd(now_t.tm_mon + 1)); /* Assume 20YY although we just want to make sure not to go negative. */ if (now_t.tm_year > 100) now_t.tm_year -= 100; ds3234_set_reg(DS3234_REG_YEAR, bin2bcd(now_t.tm_year)); }
static int ds3234_set_time(struct device *dev, struct rtc_time *dt) { ds3234_set_reg(dev, DS3234_REG_SECONDS, bin2bcd(dt->tm_sec)); ds3234_set_reg(dev, DS3234_REG_MINUTES, bin2bcd(dt->tm_min)); ds3234_set_reg(dev, DS3234_REG_HOURS, bin2bcd(dt->tm_hour) & 0x3f); /* 0 = Sun */ ds3234_set_reg(dev, DS3234_REG_DAY, bin2bcd(dt->tm_wday + 1)); ds3234_set_reg(dev, DS3234_REG_DATE, bin2bcd(dt->tm_mday)); /* 0 = Jan */ ds3234_set_reg(dev, DS3234_REG_MONTH, bin2bcd(dt->tm_mon + 1)); /* Assume 20YY although we just want to make sure not to go negative. */ if (dt->tm_year > 100) dt->tm_year -= 100; ds3234_set_reg(dev, DS3234_REG_YEAR, bin2bcd(dt->tm_year)); return 0; }
int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration----------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* Configure the system clock */ SystemClock_Config(); /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART3_UART_Init(); MX_SPI1_Init(); MX_SPI2_Init(); /* USER CODE BEGIN 2 */ uint8_t init_bytes[] = { 0x07, 0x40, 0xC0, 0x01, 0x00, 0x8C, 0x8E, 0x00 }; for (int i = 0; i < 2; i++) { HAL_GPIO_WritePin(SPI_CS_GPIO_Port, SPI_CS_Pin, GPIO_PIN_RESET); HAL_SPI_Transmit(&hspi1, (uint8_t*) (&init_bytes[i]), 1, 1000); HAL_GPIO_WritePin(SPI_CS_GPIO_Port, SPI_CS_Pin, GPIO_PIN_SET); } for (int i = 0; i < 0x16; i++) { HAL_GPIO_WritePin(SPI_CS_GPIO_Port, SPI_CS_Pin, GPIO_PIN_RESET); HAL_SPI_Transmit(&hspi1, (uint8_t*) (&init_bytes[2]), 1, 1000); HAL_SPI_Transmit(&hspi1, (uint8_t*) (&init_bytes[4]), 1, 1000); init_bytes[2]++; HAL_GPIO_WritePin(SPI_CS_GPIO_Port, SPI_CS_Pin, GPIO_PIN_SET); } HAL_GPIO_WritePin(SPI_CS_GPIO_Port, SPI_CS_Pin, GPIO_PIN_RESET); HAL_SPI_Transmit(&hspi1, (uint8_t*) (&init_bytes[5]), 1, 1000); HAL_GPIO_WritePin(SPI_CS_GPIO_Port, SPI_CS_Pin, GPIO_PIN_SET); // ds3234_set_time(); vfd_display(); ds3234_set_reg(DS3234_REG_CONTROL, 0x00); // vfd_write_display_flag(0x03, 0x04); // vfd_write_display_flag(0x0F, 0x03); while (1) { }; /* USER CODE END 2 */ /* USER CODE BEGIN RTOS_MUTEX */ /* add mutexes, ... */ /* USER CODE END RTOS_MUTEX */ /* USER CODE BEGIN RTOS_SEMAPHORES */ /* add semaphores, ... */ /* USER CODE END RTOS_SEMAPHORES */ /* USER CODE BEGIN RTOS_TIMERS */ /* start timers, add new ones, ... */ /* USER CODE END RTOS_TIMERS */ /* Create the thread(s) */ /* definition and creation of defaultTask */ osThreadDef(defaultTask, StartDefaultTask, osPriorityIdle, 0, 128); defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL); /* definition and creation of myTask02 */ osThreadDef(myTask02, StartTask02, osPriorityNormal, 0, 128); myTask02Handle = osThreadCreate(osThread(myTask02), NULL); /* definition and creation of myTask03 */ osThreadDef(myTask03, StartTask03, osPriorityNormal, 0, 128); myTask03Handle = osThreadCreate(osThread(myTask03), NULL); /* definition and creation of myTask01 */ osThreadDef(myTask01, StartTask01, osPriorityNormal, 0, 128); myTask01Handle = osThreadCreate(osThread(myTask01), NULL); /* definition and creation of myTask04 */ osThreadDef(myTask04, StartTask04, osPriorityNormal, 0, 128); myTask04Handle = osThreadCreate(osThread(myTask04), NULL); /* USER CODE BEGIN RTOS_THREADS */ /* add threads, ... */ /* USER CODE END RTOS_THREADS */ /* USER CODE BEGIN RTOS_QUEUES */ /* add queues, ... */ /* USER CODE END RTOS_QUEUES */ /* Start scheduler */ osKernelStart(); /* We should never get here as control is now taken by the scheduler */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ char i = 0; while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin); HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin); HAL_GPIO_TogglePin(LED3_GPIO_Port, LED3_Pin); HAL_GPIO_TogglePin(LED4_GPIO_Port, LED4_Pin); aTxBuffer[30] = ((i++) % 10) + '0'; HAL_UART_Transmit(&huart3, aTxBuffer, RXBUFFERSIZE, 5000); HAL_Delay(1000); } /* USER CODE END 3 */ }