mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-11-08 14:43:04 +08:00
[add] dcmi and ov5640 driver.
This commit is contained in:
1 parent
c5612fd2e1
commit
10da8d4e44
16 files changed
+4522
-41
No files matched your search
@@ -69,7 +69,9 @@ if GetDepend(['RT_USING_SDIO']):
|
||||
if GetDepend(['RT_USING_AUDIO']):
|
||||
src += ['STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_sai.c']
|
||||
src += ['STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_sai_ex.c']
|
||||
|
||||
if GetDepend(['BSP_USING_DCMI']):
|
||||
src += ['STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_dcmi.c']
|
||||
|
||||
if GetDepend(['BSP_USING_FMC']):
|
||||
src += ['STM32MP1xx_HAL_Driver/Src/stm32mp1xx_ll_fmc.c']
|
||||
src += ['STM32MP1xx_HAL_Driver/Src/stm32mp1xx_ll_fsmc.c']
|
||||
|
||||
@@ -3236,7 +3236,7 @@ uint32_t SD_HighSpeed(SD_HandleTypeDef *hsd)
|
||||
{
|
||||
SD_hs[(8U*loop)+count] = SDMMC_ReadFIFO(hsd->Instance);
|
||||
}
|
||||
loop += 8U;
|
||||
loop ++;
|
||||
}
|
||||
|
||||
if((HAL_GetTick()-Timeout) >= SDMMC_DATATIMEOUT)
|
||||
@@ -3351,7 +3351,7 @@ uint32_t SD_UltraHighSpeed(SD_HandleTypeDef *hsd)
|
||||
{
|
||||
SD_hs[(8U*loop)+count] = SDMMC_ReadFIFO(hsd->Instance);
|
||||
}
|
||||
loop += 8U;
|
||||
loop ++;
|
||||
}
|
||||
|
||||
if((HAL_GetTick()-Timeout) >= SDMMC_DATATIMEOUT)
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
/*#define HAL_CRC_MODULE_ENABLED */
|
||||
/*#define HAL_CRYP_MODULE_ENABLED */
|
||||
#define HAL_DAC_MODULE_ENABLED
|
||||
/*#define HAL_DCMI_MODULE_ENABLED */
|
||||
#define HAL_DCMI_MODULE_ENABLED
|
||||
/*#define HAL_DSI_MODULE_ENABLED */
|
||||
/*#define HAL_DFSDM_MODULE_ENABLED */
|
||||
/*#define HAL_DTS_MODULE_ENABLED */
|
||||
|
||||
@@ -1397,6 +1397,129 @@ void HAL_SAI_MspInit(SAI_HandleTypeDef* hsai)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief DCMI MSP Initialization
|
||||
* This function configures the hardware resources used in this example
|
||||
* @param hdcmi: DCMI handle pointer
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_DCMI_MspInit(DCMI_HandleTypeDef* hdcmi)
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||
if(hdcmi->Instance==DCMI)
|
||||
{
|
||||
/* USER CODE BEGIN DCMI_MspInit 0 */
|
||||
|
||||
/* USER CODE END DCMI_MspInit 0 */
|
||||
/* Peripheral clock enable */
|
||||
__HAL_RCC_DCMI_CLK_ENABLE();
|
||||
|
||||
__HAL_RCC_GPIOH_CLK_ENABLE();
|
||||
__HAL_RCC_GPIOE_CLK_ENABLE();
|
||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||
__HAL_RCC_GPIOI_CLK_ENABLE();
|
||||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||
|
||||
/**DCMI GPIO Configuration
|
||||
PH9 ------> DCMI_D0
|
||||
PH10 ------> DCMI_D1
|
||||
PH11 ------> DCMI_D2
|
||||
PH12 ------> DCMI_D3
|
||||
PH14 ------> DCMI_D4
|
||||
PI4 ------> DCMI_D5
|
||||
PB8 ------> DCMI_D6
|
||||
PE6 ------> DCMI_D7
|
||||
PH8 ------> DCMI_HSYNC
|
||||
PB7 ------> DCMI_VSYNC
|
||||
PA6 ------> DCMI_PIXCLK
|
||||
*/
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_14|GPIO_PIN_8
|
||||
|GPIO_PIN_9|GPIO_PIN_12;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Alternate = GPIO_AF13_DCMI;
|
||||
HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);
|
||||
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_6;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Alternate = GPIO_AF13_DCMI;
|
||||
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
|
||||
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_8;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Alternate = GPIO_AF13_DCMI;
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_4;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Alternate = GPIO_AF13_DCMI;
|
||||
HAL_GPIO_Init(GPIOI, &GPIO_InitStruct);
|
||||
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_6;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Alternate = GPIO_AF13_DCMI;
|
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||
|
||||
HAL_NVIC_SetPriority(DCMI_IRQn, 0x03, 0x00);
|
||||
HAL_NVIC_EnableIRQ(DCMI_IRQn);
|
||||
|
||||
/* USER CODE BEGIN DCMI_MspInit 1 */
|
||||
/* USER CODE END DCMI_MspInit 1 */
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief DCMI MSP De-Initialization
|
||||
* This function freeze the hardware resources used in this example
|
||||
* @param hdcmi: DCMI handle pointer
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_DCMI_MspDeInit(DCMI_HandleTypeDef* hdcmi)
|
||||
{
|
||||
if(hdcmi->Instance==DCMI)
|
||||
{
|
||||
/* USER CODE BEGIN DCMI_MspDeInit 0 */
|
||||
|
||||
/* USER CODE END DCMI_MspDeInit 0 */
|
||||
/* Peripheral clock disable */
|
||||
__HAL_RCC_DCMI_CLK_DISABLE();
|
||||
|
||||
/**DCMI GPIO Configuration
|
||||
PH10 ------> DCMI_D1
|
||||
PH11 ------> DCMI_D2
|
||||
PH14 ------> DCMI_D4
|
||||
PH8 ------> DCMI_HSYNC
|
||||
PH9 ------> DCMI_D0
|
||||
PE6 ------> DCMI_D7
|
||||
PH12 ------> DCMI_D3
|
||||
PB7 ------> DCMI_VSYNC
|
||||
PI4 ------> DCMI_D5
|
||||
PA6 ------> DCMI_PIXCLK
|
||||
PB8 ------> DCMI_D6
|
||||
*/
|
||||
HAL_GPIO_DeInit(GPIOH, GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_14|GPIO_PIN_8
|
||||
|GPIO_PIN_9|GPIO_PIN_12);
|
||||
|
||||
HAL_GPIO_DeInit(GPIOE, GPIO_PIN_6);
|
||||
|
||||
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_7|GPIO_PIN_8);
|
||||
|
||||
HAL_GPIO_DeInit(GPIOI, GPIO_PIN_4);
|
||||
|
||||
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_6);
|
||||
|
||||
/* USER CODE BEGIN DCMI_MspDeInit 1 */
|
||||
HAL_DMA_DeInit(hdcmi->DMA_Handle);
|
||||
/* USER CODE END DCMI_MspDeInit 1 */
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function is executed in case of error occurrence.
|
||||
* @retval None
|
||||
|
||||
@@ -72,6 +72,18 @@ menu "Onboard Peripheral Drivers"
|
||||
select BSP_USING_I2C2
|
||||
default n
|
||||
|
||||
config BSP_USING_DCMI
|
||||
bool "Enable CAMERA (ov5640)"
|
||||
select BSP_USING_MFX
|
||||
select BSP_USING_PMIC
|
||||
select BSP_USING_I2C
|
||||
select BSP_USING_I2C2
|
||||
default n
|
||||
|
||||
config BSP_USING_MFX
|
||||
bool "Enable Multi Function eXpander"
|
||||
default n
|
||||
|
||||
endmenu
|
||||
|
||||
menu "On-chip Peripheral Drivers"
|
||||
|
||||
@@ -32,6 +32,14 @@ if GetDepend(['BSP_USING_AUDIO']):
|
||||
src += Glob('ports/drv_wm8994.c')
|
||||
src += Glob('ports/drv_sound.c')
|
||||
|
||||
if GetDepend(['BSP_USING_DCMI']):
|
||||
src += Glob('ports/drv_dcmi.c')
|
||||
src += Glob('ports/drv_ov5640.c')
|
||||
|
||||
if GetDepend(['BSP_USING_MFX']):
|
||||
src += Glob('ports/drv_mfx.c')
|
||||
src += Glob('ports/mfxstm32l152.c')
|
||||
|
||||
if GetDepend(['BSP_USING_OPENAMP']):
|
||||
src += Glob('CubeMX_Config/CM4/Src/ipcc.c')
|
||||
src += Glob('CubeMX_Config/CM4/Src/openamp.c')
|
||||
|
||||
@@ -23,14 +23,9 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
#define STM32_FLASH_START_ADRESS ((uint32_t)0x10000000)
|
||||
#if defined(BSP_USING_OPENAMP)
|
||||
#define STM32_FLASH_SIZE (64 * 1024)
|
||||
#else
|
||||
#define STM32_FLASH_SIZE (256 * 1024)
|
||||
#endif
|
||||
#define STM32_FLASH_SIZE (191 * 1024)
|
||||
#define STM32_FLASH_END_ADDRESS ((uint32_t)(STM32_FLASH_START_ADRESS + STM32_FLASH_SIZE))
|
||||
|
||||
|
||||
#if defined(BSP_USING_OPENAMP)
|
||||
#define STM32_SRAM_BEGIN (uint32_t)0x10030000
|
||||
#else
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,22 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2022, RT-Thread Development Team
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*
|
||||
* Change Logs:
|
||||
* Date Author Notes
|
||||
* 2020-07-27 thread-liu first version
|
||||
*/
|
||||
|
||||
#ifndef __DRV_DCMI_H__
|
||||
#define __DRV_DCMI_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,45 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2022, RT-Thread Development Team
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*
|
||||
* Change Logs:
|
||||
* Date Author Notes
|
||||
* 2020-08-08 thread-liu first version
|
||||
*/
|
||||
|
||||
#ifndef __DRV_MFX_H__
|
||||
#define __DRV_MFX_H__
|
||||
|
||||
#include "board.h"
|
||||
#include "mfxstm32l152.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef enum
|
||||
{
|
||||
BSP_IO_PIN_RESET = 0,
|
||||
BSP_IO_PIN_SET = 1
|
||||
}BSP_IO_PinStateTypeDef;
|
||||
|
||||
#define CAMERA_RST1 MFXSTM32L152_AGPIO_PIN_3
|
||||
#define CAMERA_XSDN MFXSTM32L152_AGPIO_PIN_2
|
||||
#define CARMERA_PLUG MFXSTM32L152_GPIO_PIN_12
|
||||
|
||||
void rt_mfx_init(void);
|
||||
rt_uint32_t BSP_IO_ITGetStatus(rt_uint32_t IoPin);
|
||||
void BSP_IO_ITClear(void);
|
||||
void BSP_IO_ITClearPin(rt_uint32_t IO_Pins_To_Clear);
|
||||
rt_uint8_t rt_mfx_pin_mode(rt_uint32_t IoPin, IO_ModeTypedef IoMode);
|
||||
rt_uint8_t rt_mfx_config_irq(rt_uint8_t IoIrqOutPinPolarity, rt_uint8_t IoIrqOutPinType);
|
||||
void rt_mfx_pin_write(rt_uint32_t IoPin, rt_base_t PinState);
|
||||
rt_uint32_t rt_mfx_pin_read(rt_uint32_t IoPin);
|
||||
void rt_mfx_pin_toggle(rt_uint32_t IoPin);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -798,47 +798,47 @@ static rt_err_t rt_hw_pmic_init_register(void)
|
||||
stpmu1_write_reg(BUCK_ICC_TURNOFF_REG, 0x30);
|
||||
stpmu1_write_reg(LDO_ICC_TURNOFF_REG, 0x3b);
|
||||
|
||||
/* vddcore */
|
||||
STPMU1_Regulator_Voltage_Set(STPMU1_BUCK1, 1200);
|
||||
STPMU1_Regulator_Enable(STPMU1_BUCK1);
|
||||
/* vddcore */
|
||||
STPMU1_Regulator_Voltage_Set(STPMU1_BUCK1, 1200);
|
||||
STPMU1_Regulator_Enable(STPMU1_BUCK1);
|
||||
|
||||
/* vddddr */
|
||||
STPMU1_Regulator_Voltage_Set(STPMU1_BUCK2, 1350);
|
||||
STPMU1_Regulator_Enable(STPMU1_BUCK2);
|
||||
/* vddddr */
|
||||
STPMU1_Regulator_Voltage_Set(STPMU1_BUCK2, 1350);
|
||||
STPMU1_Regulator_Enable(STPMU1_BUCK2);
|
||||
|
||||
/* vdd */
|
||||
STPMU1_Regulator_Voltage_Set(STPMU1_BUCK3, 3300);
|
||||
STPMU1_Regulator_Enable(STPMU1_BUCK3);
|
||||
/* vdd */
|
||||
STPMU1_Regulator_Voltage_Set(STPMU1_BUCK3, 3300);
|
||||
STPMU1_Regulator_Enable(STPMU1_BUCK3);
|
||||
|
||||
/* 3v3 */
|
||||
STPMU1_Regulator_Voltage_Set(STPMU1_BUCK4, 3300);
|
||||
STPMU1_Regulator_Enable(STPMU1_BUCK4);
|
||||
/* 3v3 */
|
||||
STPMU1_Regulator_Voltage_Set(STPMU1_BUCK4, 3300);
|
||||
STPMU1_Regulator_Enable(STPMU1_BUCK4);
|
||||
|
||||
/* vdda */
|
||||
STPMU1_Regulator_Voltage_Set(STPMU1_LDO1, 2900);
|
||||
STPMU1_Regulator_Enable(STPMU1_LDO1);
|
||||
/* vdda */
|
||||
STPMU1_Regulator_Voltage_Set(STPMU1_LDO1, 2900);
|
||||
STPMU1_Regulator_Enable(STPMU1_LDO1);
|
||||
|
||||
/* 2v8 */
|
||||
STPMU1_Regulator_Voltage_Set(STPMU1_LDO2, 2800);
|
||||
STPMU1_Regulator_Enable(STPMU1_LDO2);
|
||||
/* 2v8 */
|
||||
STPMU1_Regulator_Voltage_Set(STPMU1_LDO2, 2800);
|
||||
STPMU1_Regulator_Enable(STPMU1_LDO2);
|
||||
|
||||
/* vtt_ddr lod3 mode buck2/2 */
|
||||
STPMU1_Regulator_Voltage_Set(STPMU1_LDO3, 0xFFFF);
|
||||
STPMU1_Regulator_Enable(STPMU1_LDO3);
|
||||
/* vtt_ddr lod3 mode buck2/2 */
|
||||
STPMU1_Regulator_Voltage_Set(STPMU1_LDO3, 0xFFFF);
|
||||
STPMU1_Regulator_Enable(STPMU1_LDO3);
|
||||
|
||||
/* vdd_usb */
|
||||
STPMU1_Regulator_Voltage_Set(STPMU1_LDO4, 3300);
|
||||
STPMU1_Regulator_Enable(STPMU1_LDO4);
|
||||
/* vdd_usb */
|
||||
STPMU1_Regulator_Voltage_Set(STPMU1_LDO4, 3300);
|
||||
STPMU1_Regulator_Enable(STPMU1_LDO4);
|
||||
|
||||
/* vdd_sd */
|
||||
STPMU1_Regulator_Voltage_Set(STPMU1_LDO5, 2900);
|
||||
STPMU1_Regulator_Enable(STPMU1_LDO5);
|
||||
/* vdd_sd */
|
||||
STPMU1_Regulator_Voltage_Set(STPMU1_LDO5, 2900);
|
||||
STPMU1_Regulator_Enable(STPMU1_LDO5);
|
||||
|
||||
/* 1v8 */
|
||||
STPMU1_Regulator_Voltage_Set(STPMU1_LDO6, 1800);
|
||||
STPMU1_Regulator_Enable(STPMU1_LDO6);
|
||||
/* 1v8 */
|
||||
STPMU1_Regulator_Voltage_Set(STPMU1_LDO6, 1800);
|
||||
STPMU1_Regulator_Enable(STPMU1_LDO6);
|
||||
|
||||
STPMU1_Regulator_Enable(STPMU1_VREFDDR);
|
||||
STPMU1_Regulator_Enable(STPMU1_VREFDDR);
|
||||
|
||||
return RT_EOK;
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
Reference in new issue
Block a user