726 lines
18 KiB
C
726 lines
18 KiB
C
|
|
#include "basic_include.h"
|
||
|
|
|
||
|
|
#include "hal/i2c.h"
|
||
|
|
#include "hal/i2s.h"
|
||
|
|
#include "hal/timer_device.h"
|
||
|
|
#include "hal/pwm.h"
|
||
|
|
#include "hal/capture.h"
|
||
|
|
#include "hal/netdev.h"
|
||
|
|
#include "hal/spi.h"
|
||
|
|
#include "hal/spi_nor.h"
|
||
|
|
|
||
|
|
#include "lib/ota/fw.h"
|
||
|
|
#include "lib/rpc/cpurpc.h"
|
||
|
|
|
||
|
|
#include "dev/uart/hguart_v2.h"
|
||
|
|
#include "dev/uart/hguart_v4.h"
|
||
|
|
#include "dev/dma/dw_dmac.h"
|
||
|
|
#include "dev/gpio/hggpio_v4.h"
|
||
|
|
#include "dev/dma/hg_m2m_dma.h"
|
||
|
|
#include "dev/crc/hg_crc.h"
|
||
|
|
#include "dev/timer/hgtimer_v4.h"
|
||
|
|
#include "dev/timer/hgtimer_v7.h"
|
||
|
|
#include "dev/vpp/hgvpp.h"
|
||
|
|
#include "dev/prc/hgprc.h"
|
||
|
|
#include "dev/csi/hgdvp.h"
|
||
|
|
#include "dev/of/hgof.h"
|
||
|
|
#include "dev/csc/hgcsc.h"
|
||
|
|
#include "dev/lcdc/hglcdc.h"
|
||
|
|
#include "dev/lcdc/hgdsi.h"
|
||
|
|
#include "dev/jpg/hgjpg.h"
|
||
|
|
#include "dev/scale/hgscale.h"
|
||
|
|
#include "lib/rpc/cpurpc.h"
|
||
|
|
#include "hal/i2c.h"
|
||
|
|
#include "dev/gen/hggen420.h"
|
||
|
|
#include "dev/gen/hggen422.h"
|
||
|
|
#include "dev/spi/hgspi_v3.h"
|
||
|
|
#include "dev/spi/hgspi_xip.h"
|
||
|
|
#include "dev/h264/hg264.h"
|
||
|
|
#include "dev/dual/hgdual_org.h"
|
||
|
|
#include "dev/mipi_csi/hgmipi_csi.h"
|
||
|
|
#include "dev/i2c/hgi2c_v1.h"
|
||
|
|
#include "dev/i2s/hgi2s_v0.h"
|
||
|
|
#include "dev/osd_enc/hgosd_enc.h"
|
||
|
|
#include "lib/sdhost/sdhost.h"
|
||
|
|
#include "dev/isp/hgisp_v0.h"
|
||
|
|
//#include "dev/isp/hgftusb3_v0.h"
|
||
|
|
#include "dev/pwm/hgpwm_v0.h"
|
||
|
|
#include "dev/dma2d/hg_dma2d_v0.h"
|
||
|
|
#include "lib/syscfg/syscfg.h"
|
||
|
|
#include "syscfg.h"
|
||
|
|
#include "dev/usb/hgusb20_v1_dev_api.h"
|
||
|
|
#include "dev/sysaes/hg_sysaes_v3.h"
|
||
|
|
#include "dev/adc/hgadc_v1.h"
|
||
|
|
#include "dev/usb/usb11_v0/hgusb11_v0_dev_api.h"
|
||
|
|
#include "dev/usb/usb11_v0/hgusb11_v0_host_api.h"
|
||
|
|
#include "dev/audio/components/hg_audio_v0.h"
|
||
|
|
#include "dev/para_in/hgpara_in.h"
|
||
|
|
#include "dev/sha/hgsha_v1.h"
|
||
|
|
#include "dev/xspi/hg_xspi_psram.h"
|
||
|
|
#include "lib/net/ethphy/eth_mdio_bus.h"
|
||
|
|
#include "lib/net/ethphy/eth_phy.h"
|
||
|
|
#include "lib/net/ethphy/phy/ip101g.h"
|
||
|
|
#include "dev/emac/hg_gmac_eva_v2.h"
|
||
|
|
|
||
|
|
|
||
|
|
#define DEV_SENSOR_MASTER_IIC_DEVID (ISP_CSI0_ID)
|
||
|
|
#define DEV_SENSOR_SLAVE_IIC_DEVID (ISP_CSI1_ID)
|
||
|
|
|
||
|
|
extern struct dma_device *m2mdma;
|
||
|
|
extern void *console_handle;
|
||
|
|
extern void device_burst_set(void);
|
||
|
|
|
||
|
|
|
||
|
|
struct hgusb20_dev usb20_dev = {
|
||
|
|
.usb_hw = (void *)USB20_BASE,
|
||
|
|
.ep_irq_num = USB20MC_IRQn,
|
||
|
|
.dma_irq_num = USB20DMA_IRQn,
|
||
|
|
//.flags = BIT(HGUSB20_FLAGS_FULL_SPEED),
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hgusb11_dev usb11_dev = {
|
||
|
|
.usb_hw = (void *)USB11_BASE,
|
||
|
|
.ep_irq_num = USB11_MC_IRQn,
|
||
|
|
.dma_irq_num = USB11_DMA_IRQn,
|
||
|
|
.p_comm = &usb11_dev.comm_dat,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hgusb11_host usb11_host = {
|
||
|
|
.usb_hw = (void *)USB11_BASE,
|
||
|
|
.ep_irq_num = USB11_MC_IRQn,
|
||
|
|
.dma_irq_num = USB11_DMA_IRQn,
|
||
|
|
.p_comm = &usb11_dev.comm_dat,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hgpara_in para_in = {
|
||
|
|
.hw = (void *)PARA_IN_BASE,
|
||
|
|
.irq_num = PARA_IN_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hg_crc crc32_module = {
|
||
|
|
.hw = (void *)CRC_BASE,
|
||
|
|
.irq_num = CRC_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hg_sysaes_v3 sysaes = {
|
||
|
|
.hw = (void *)SYS_AES_BASE,
|
||
|
|
.irq_num = SYS_AES_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hguart_v2 uart0 = {
|
||
|
|
.hw = UART0_BASE,
|
||
|
|
.irq_num = UART0_IRQn
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hguart_v2 uart1 = {
|
||
|
|
.hw = UART1_BASE,
|
||
|
|
.irq_num = UART1_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hguart_v4 uart4 = {
|
||
|
|
.hw = UART4_BASE,
|
||
|
|
.irq_num = UART4_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hguart_v4 uart5 = {
|
||
|
|
.hw = UART5_BASE,
|
||
|
|
.irq_num = UART5_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hguart_v4 uart6 = {
|
||
|
|
.hw = UART6_BASE,
|
||
|
|
.irq_num = UART6_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hggpio_v4 gpioa = {
|
||
|
|
.hw = GPIOA_BASE,
|
||
|
|
.irq_num = GPIOA_IRQn,
|
||
|
|
.pin_num = {PA_0, PA_15},
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hggpio_v4 gpiob = {
|
||
|
|
.hw = GPIOB_BASE,
|
||
|
|
.irq_num = GPIOB_IRQn,
|
||
|
|
.pin_num = {PB_0, PB_15},
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hggpio_v4 gpioc = {
|
||
|
|
.hw = GPIOC_BASE,
|
||
|
|
.irq_num = GPIOC_IRQn,
|
||
|
|
.pin_num = {PC_0, PC_15},
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hggpio_v4 gpiod = {
|
||
|
|
.hw = GPIOD_BASE,
|
||
|
|
.irq_num = GPIOD_IRQn,
|
||
|
|
.pin_num = {PD_0, PD_15},
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hggpio_v4 gpioe = {
|
||
|
|
.hw = GPIOE_BASE,
|
||
|
|
.irq_num = GPIOE_IRQn,
|
||
|
|
.pin_num = {PE_0, PE_3},
|
||
|
|
};
|
||
|
|
|
||
|
|
struct mem_dma_dev mem_dma = {
|
||
|
|
.hw = (void *)M2M_DMA_BASE,
|
||
|
|
#if CONFI_CORE_M2M_DMA
|
||
|
|
.irq_num = {M2M_DMA0_IRQn, M2M_DMA1_IRQn},
|
||
|
|
#else
|
||
|
|
.irq_num = {M2M_DMA0_IRQn, M2M_DMA1_IRQn, M2M_DMA2_IRQn},
|
||
|
|
#endif
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hgadc_v1 adc0 = {
|
||
|
|
.hw = ADKEY_BASE,
|
||
|
|
.irq_num = ADKEY0_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hglcdc lcdc = {
|
||
|
|
.hw = LCDC_BASE,
|
||
|
|
.irq_num = LCD_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hgdsi dsic = {
|
||
|
|
.hw = MIPI_DSI_BASE,
|
||
|
|
.irq_num = 0,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hgjpg jpg0 = {
|
||
|
|
.hw = MJPEG0_BASE,
|
||
|
|
#ifdef FPGA_SUPPORT
|
||
|
|
.thw = MJPEG0_TAB_BASE,
|
||
|
|
#else
|
||
|
|
.thw = MJPEG0_TAB_BASE,
|
||
|
|
#endif
|
||
|
|
.huf_hw = MJPEG_HUFF_BASE,
|
||
|
|
|
||
|
|
.irq_num = MJPEG01_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hgjpg jpg1 = {
|
||
|
|
.hw = MJPEG1_BASE,
|
||
|
|
#ifdef FPGA_SUPPORT
|
||
|
|
.thw = MJPEG1_TAB_BASE,
|
||
|
|
#else
|
||
|
|
.thw = MJPEG1_TAB_BASE,
|
||
|
|
#endif
|
||
|
|
.huf_hw = MJPEG_HUFF_BASE,
|
||
|
|
|
||
|
|
.irq_num = MJPEG01_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hgsdh sdh = {
|
||
|
|
.hw = SDHOST_BASE,
|
||
|
|
.irq_num = SDHOST_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hgdvp dvp = {
|
||
|
|
.hw = DVP_BASE,
|
||
|
|
.irq_num = DVP_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hgmipi_csi csi0 = {
|
||
|
|
.hw = MIPI_CSI0_BASE,
|
||
|
|
.irq_num = MIPI_CSI2_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hgmipi_csi csi1 = {
|
||
|
|
.hw = MIPI_CSI1_BASE,
|
||
|
|
.irq_num = MIPI1_CSI2_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hgvpp vpp = {
|
||
|
|
.hw = VPP_BASE,
|
||
|
|
.irq_num = VPP_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hgprc prc = {
|
||
|
|
.hw = PRC_BASE,
|
||
|
|
.irq_num = PRC_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hgscale scale1 = {
|
||
|
|
.hw = SCALE1_BASE,
|
||
|
|
.irq_num = SCALE1_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hgscale scale2 = {
|
||
|
|
.hw = SCALE2_BASE,
|
||
|
|
.irq_num = SCALE2_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hgscale scale3 = {
|
||
|
|
.hw = SCALE3_BASE,
|
||
|
|
.irq_num = SCALE3_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hggen420 gen420 = {
|
||
|
|
.hw = GEN420_BASE,
|
||
|
|
.irq_num = GEN420_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hggen422 gen422 = {
|
||
|
|
.hw = GEN422_BASE,
|
||
|
|
.irq_num = GEN422_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hg264 h264 = {
|
||
|
|
.hw = H264_REG_BASE,
|
||
|
|
.irq_num = H264ENC_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hgdual dual = {
|
||
|
|
.hw = DUAL_ORG_BASE,
|
||
|
|
.irq_num = DUAL_ORG_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hgosd osdenc = {
|
||
|
|
.hw = OSD_ENC_BASE,
|
||
|
|
.irq_num = OSD_ENC_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hgcsc csc = {
|
||
|
|
.hw = CSC_BASE,
|
||
|
|
.irq_num = CSC_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hgtimer_v4 timer0 = {
|
||
|
|
.hw = TIMER0_BASE,
|
||
|
|
.irq_num = TIM0_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hgtimer_v4 timer1 = {
|
||
|
|
.hw = TIMER1_BASE,
|
||
|
|
.irq_num = TIM1_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hgtimer_v4 timer2 = {
|
||
|
|
.hw = TIMER2_BASE,
|
||
|
|
.irq_num = TIM2_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hgtimer_v4 timer3 = {
|
||
|
|
.hw = TIMER3_BASE,
|
||
|
|
.irq_num = TIM3_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
|
||
|
|
struct hgtimer_v7 simple_timer5 = {
|
||
|
|
.hw = SIMPLE_TIMER5_BASE,
|
||
|
|
.irq_num = STMR5_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hgspi_v3 spi0 = {
|
||
|
|
.hw = SPI0_BASE,
|
||
|
|
.irq_num = SPI0_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hgspi_v3 spi1 = {
|
||
|
|
.hw = SPI1_BASE,
|
||
|
|
.irq_num = SPI1_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hgspi_v3 spi2 = {
|
||
|
|
.hw = SPI2_BASE,
|
||
|
|
.irq_num = SPI2_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hgspi_xip spi7 = {
|
||
|
|
.hw = QSPI_BASE,
|
||
|
|
.ddr = 0,
|
||
|
|
.xip = 1,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hgcqspi cqspi = {
|
||
|
|
.hw = (void *)QSPI_BASE,
|
||
|
|
.irq_num = QSPI_IRQn,
|
||
|
|
.opened = 0,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hgi2c_v1 iic1 = {
|
||
|
|
.hw = IIC1_BASE,
|
||
|
|
.irq_num = SPI1_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hgi2c_v1 iic2 = {
|
||
|
|
.hw = IIC2_BASE,
|
||
|
|
.irq_num = SPI2_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hgpwm_v0 pwm = {
|
||
|
|
.channel[0] = (void *) &timer0,
|
||
|
|
.channel[1] = (void *) &timer1,
|
||
|
|
.channel[2] = (void *) &timer2,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hgisp_v0 isp = {
|
||
|
|
.hw = IMAGE_ISP_BASE,
|
||
|
|
.data_hw = ISP_R_GAMMA_BASE,
|
||
|
|
.irq_num = IMG_ISP_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hgdma2d_v0 dma2d = {
|
||
|
|
.hw = DMA2D_BASE,
|
||
|
|
.fgclut = DMA2D_FGCLUT_BASE,
|
||
|
|
.bgclut = DMA2D_BGCLUT_BASE,
|
||
|
|
.irq_num = DMA2D_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct spi_nor_flash flash0 = {
|
||
|
|
.spidev = (struct spi_device *)&spi7,
|
||
|
|
.spi_config = {12000000, SPI_CLK_MODE_0, SPI_WIRE_NORMAL_MODE, 0},
|
||
|
|
.vendor_id = 0,
|
||
|
|
.product_id = 0,
|
||
|
|
.size = 0x200000, /* Special External-Flash Size */
|
||
|
|
.block_size = 0x10000,
|
||
|
|
.sector_size = 0x1000,
|
||
|
|
.page_size = 4096,
|
||
|
|
.mode = SPI_NOR_XIP_MODE,
|
||
|
|
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hg_audio_v0 auadc = {
|
||
|
|
.hw = AUDIO_BASE,
|
||
|
|
.irq_num = AUDIO_SUBSYS1_IRQn,
|
||
|
|
.p_comm = (void *)&auadc.comm_dat,
|
||
|
|
.comm_dat.comm_bits.ana_rfb_level = 0, //set_rfb = (1 << ana_rfb_level)
|
||
|
|
.comm_dat.comm_bits.ana_rin_level = 1, //set_rin = (1 << ana_rin_level)
|
||
|
|
// .comm_dat.comm_bits.ana_driver_version = 1,
|
||
|
|
.dev_type = AUDIO_TYPE_AUADC,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hg_audio_v0 audac = {
|
||
|
|
.hw = AUDIO_BASE,
|
||
|
|
.irq_num = AUDIO_SUBSYS0_IRQn,
|
||
|
|
.p_comm = (void *)&auadc.comm_dat,
|
||
|
|
.dev_type = AUDIO_TYPE_AUDAC,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hg_audio_v0 auasrc = {
|
||
|
|
.hw = AUDIO_ASRC_BASE,
|
||
|
|
.p_comm = (void *)&auadc.comm_dat,
|
||
|
|
.dev_type = AUDIO_TYPE_AUASRC,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hg_audio_v0 aueq = {
|
||
|
|
.hw = AUDIO_EQ_BASE,
|
||
|
|
.p_comm = (void *)&auadc.comm_dat,
|
||
|
|
.dev_type = AUDIO_TYPE_AUEQ,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hg_audio_v0 aufade = {
|
||
|
|
.hw = AUDIO_BASE,
|
||
|
|
.p_comm = (void *)&auadc.comm_dat,
|
||
|
|
.dev_type = AUDIO_TYPE_AUFADE,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hgi2s_v0 i2s0 = {
|
||
|
|
.hw = IIS0_BASE,
|
||
|
|
.irq_num = IIS0_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hgi2s_v0 i2s1 = {
|
||
|
|
.hw = IIS1_BASE,
|
||
|
|
.irq_num = IIS1_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hgsha_v1 sha = {
|
||
|
|
.hw = (void *)SHA_BASE,
|
||
|
|
.irq_num = SHA_IRQn,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct ethernet_mdio_bus mdio_bus0;
|
||
|
|
|
||
|
|
struct ethernet_phy_device ethernet_phy0 = {
|
||
|
|
.addr = 0x01,
|
||
|
|
.drv = &ip101g_driver,
|
||
|
|
};
|
||
|
|
|
||
|
|
struct hg_gmac_eva_v2 gmac = {
|
||
|
|
.hw = GMAC_BASE,
|
||
|
|
.irq_num = GMAC_IRQn,
|
||
|
|
.tx_buf_size = 4 * 1024,
|
||
|
|
.rx_buf_size = 8 * 1024,
|
||
|
|
.modbus_devid = HG_ETH_MDIOBUS0_DEVID,
|
||
|
|
.phy_devid = HG_ETHPHY0_DEVID,
|
||
|
|
.mdio_pin = PB_6,
|
||
|
|
.mdc_pin = PB_7,
|
||
|
|
.rgmii_en = 0,
|
||
|
|
};
|
||
|
|
|
||
|
|
static void core_vdd_voltage()
|
||
|
|
{
|
||
|
|
uint32 core_vdd_voltage = 0;
|
||
|
|
sar_adc_sample_one_channel(ADC_CHANNEL_CORE_VDD, &core_vdd_voltage);
|
||
|
|
os_printf("CoreVdd Voltage:%.2fV\r\n", ((double)core_vdd_voltage/2048.0)*3.0);
|
||
|
|
}
|
||
|
|
|
||
|
|
void device_init(void)
|
||
|
|
{
|
||
|
|
extern uint32_t get_flash_cap();
|
||
|
|
uint32_t flash_size = get_flash_cap();
|
||
|
|
if (flash_size > 0) {
|
||
|
|
flash0.size = flash_size;
|
||
|
|
}
|
||
|
|
|
||
|
|
hg_crc_attach(HG_CRC_DEVID, &crc32_module);
|
||
|
|
hg_sysaes_v3_attach(HG_HWAES0_DEVID, &sysaes);
|
||
|
|
hggpio_v4_attach(HG_GPIOA_DEVID, &gpioa);
|
||
|
|
hggpio_v4_attach(HG_GPIOB_DEVID, &gpiob);
|
||
|
|
pmu_vccsd_power_set(1, VCCSD_33);
|
||
|
|
hggpio_v4_attach(HG_GPIOC_DEVID, &gpioc);
|
||
|
|
hggpio_v4_attach(HG_GPIOD_DEVID, &gpiod);
|
||
|
|
hggpio_v4_attach(HG_GPIOE_DEVID, &gpioe);
|
||
|
|
hgadc_v1_attach(HG_ADC0_DEVID, &adc0);
|
||
|
|
hguart_v2_attach(HG_UART0_DEVID, &uart0);
|
||
|
|
hguart_v2_attach(HG_UART1_DEVID, &uart1);
|
||
|
|
hguart_v4_attach(HG_UART4_DEVID, &uart4);
|
||
|
|
hgtimer_v4_attach(HG_TIMER0_DEVID, &timer0);
|
||
|
|
hgtimer_v4_attach(HG_TIMER1_DEVID, &timer1);
|
||
|
|
hgtimer_v4_attach(HG_TIMER2_DEVID, &timer2);
|
||
|
|
hgtimer_v4_attach(HG_TIMER3_DEVID, &timer3);
|
||
|
|
hgtimer_v7_attach(HG_SIMTMR5_DEVID, &simple_timer5);
|
||
|
|
|
||
|
|
|
||
|
|
hgi2s_v0_attach(HG_IIS0_DEVID, &i2s0);
|
||
|
|
hgi2s_v0_attach(HG_IIS1_DEVID, &i2s1);
|
||
|
|
|
||
|
|
#ifndef SINGLE_CORE
|
||
|
|
sysctrl_cpu1_softrst_en();
|
||
|
|
sysctrl_cpu1_clk_en();
|
||
|
|
cpu_splock_init(CPU0_SPLCK_BASE, CPU_SPINLOCK_IRQn);
|
||
|
|
#endif
|
||
|
|
uart_open((struct uart_device *)&uart0, 921600); //for CPU0
|
||
|
|
uart_open((struct uart_device *)&uart1, 921600); //for CPU1
|
||
|
|
|
||
|
|
#if USB_EN
|
||
|
|
#if USB_HOST_EN
|
||
|
|
hgusb20_host_attach(HG_USBDEV_DEVID, &usb20_dev);
|
||
|
|
#else
|
||
|
|
hgusb20_dev_attach(HG_USBDEV_DEVID, &usb20_dev);
|
||
|
|
#endif
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if USB11_EN
|
||
|
|
hgusb11_v0_dev_attach(HG_USB11DEV_DEVID, &usb11_dev);
|
||
|
|
hgusb11_v0_host_attch(HG_USB11HOST_DEVID, &usb11_host);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if LCD_EN
|
||
|
|
hglcdc_attach(HG_LCDC_DEVID,&lcdc);
|
||
|
|
hgdsi_attach(HG_DSI_DEVID,&dsic);
|
||
|
|
#endif
|
||
|
|
hgosdenc_attach(HG_OSD_ENC_DEVID,&osdenc);
|
||
|
|
|
||
|
|
#if ISP_EN
|
||
|
|
hgisp_v0_attach(HG_ISP_DEVID, &isp);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if DVP_EN
|
||
|
|
hgdvp_attach(HG_DVP_DEVID,&dvp);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if MIPI_CSI_EN
|
||
|
|
hgmipi_csi_attach(HG_MIPI_CSI_DEVID,&csi0);
|
||
|
|
hgmipi_csi_attach(HG_MIPI1_CSI_DEVID,&csi1);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if VPP_EN
|
||
|
|
hgvpp_attach(HG_VPP_DEVID,&vpp);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if H264_EN
|
||
|
|
hg264_attach(HG_H264_DEVID, &h264);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if SDH_EN
|
||
|
|
hgsdh_attach(HG_SDIOHOST_DEVID, &sdh);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if SCALE_EN
|
||
|
|
hgscale1_attach(HG_SCALE1_DEVID, &scale1);
|
||
|
|
hgscale2_attach(HG_SCALE2_DEVID, &scale2);
|
||
|
|
hgscale3_attach(HG_SCALE3_DEVID, &scale3);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if DMA2D_EN
|
||
|
|
hgdma2d_v0_attach(HG_DMA2D_DEVID, &dma2d);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if PARA_IN_EN
|
||
|
|
hgpara_in_attach(HG_PARA_IN_DEVID, ¶_in);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if GMAC_EN
|
||
|
|
eth_mdio_bus_attach(HG_ETH_MDIOBUS0_DEVID, &mdio_bus0);
|
||
|
|
eth_phy_attach(HG_ETHPHY0_DEVID, ðernet_phy0);
|
||
|
|
hg_gmac_v2_attach(HG_GMAC_DEVID, &gmac);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
hgpwm_v0_attach(HG_PWM0_DEVID, &pwm);
|
||
|
|
|
||
|
|
hgdual_attach(HG_DUALORG_DEVID,&dual);
|
||
|
|
hgcsc_attach(HG_CSC_DEVID,&csc);
|
||
|
|
|
||
|
|
hggen420_attach(HG_GEN420_DEVID,&gen420);
|
||
|
|
hggen422_attach(HG_GEN422_DEVID,&gen422);
|
||
|
|
hgprc_attach(HG_PRC_DEVID,&prc);
|
||
|
|
|
||
|
|
|
||
|
|
console_handle = &uart0;
|
||
|
|
|
||
|
|
#if SD_MODE_TYPE != 2
|
||
|
|
hgspi_v3_attach(HG_SPI0_DEVID, &spi0);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
hgspi_v3_attach(HG_SPI1_DEVID, &spi1);
|
||
|
|
hgspi_v3_attach(HG_SPI2_DEVID, &spi2);
|
||
|
|
|
||
|
|
hgspi_xip_attach(HG_SPI7_DEVID, &spi7);
|
||
|
|
|
||
|
|
spi_nor_attach(&flash0, HG_FLASH0_DEVID);
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
hgi2c_v1_attach(HG_I2C1_DEVID, &iic1);
|
||
|
|
#if SD_MODE_TYPE != 3
|
||
|
|
hgi2c_v1_attach(HG_I2C2_DEVID, &iic2);
|
||
|
|
#endif
|
||
|
|
hg_audio_v0_attach(HG_AUADC_DEVID, &auadc);
|
||
|
|
hg_audio_v0_attach(HG_AUDAC_DEVID, &audac);
|
||
|
|
hg_audio_v0_attach(HG_AUASRC_DEVID, &auasrc);
|
||
|
|
hg_audio_v0_attach(HG_AUEQ_DEVID, &aueq);
|
||
|
|
hg_audio_v0_attach(HG_AUFADE_DEVID, &aufade);
|
||
|
|
|
||
|
|
hgsha_v1_attach(HG_SHA_DEVID, &sha);
|
||
|
|
|
||
|
|
hg_m2m_dma_dev_attach(HG_M2MDMA_DEVID, &mem_dma);
|
||
|
|
|
||
|
|
m2mdma = (struct dma_device *)&mem_dma;
|
||
|
|
|
||
|
|
void sysctrl_mipi_lcd_h264_mjpeg_clk_init(void);
|
||
|
|
sysctrl_mipi_lcd_h264_mjpeg_clk_init();
|
||
|
|
|
||
|
|
#if JPG_EN
|
||
|
|
hgjpg_attach(HG_JPG0_DEVID, &jpg0);
|
||
|
|
hgjpg_attach(HG_JPG1_DEVID, &jpg1);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
extern struct hg_xspi ospi;
|
||
|
|
hg_xspi_attach(HG_XSPI_DEVID, &ospi);
|
||
|
|
|
||
|
|
device_burst_set();
|
||
|
|
os_printf(KERN_INFO"CPU0 init!\r\n");
|
||
|
|
core_vdd_voltage();
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
void device_burst_set(void)
|
||
|
|
{
|
||
|
|
*(unsigned int *) 0x400201d0 = 0xffffffff;
|
||
|
|
*(unsigned int *) 0x400201d4 = 0xffffffff;
|
||
|
|
|
||
|
|
// SYSCTRL->AHB2AHB_FIFO_CTRL = 0X1FFFFF7;
|
||
|
|
|
||
|
|
ll_sysctrl_dma2ahb_burst_set(DMA2AHB_BURST_CH_DUAL_ORG0_WR, DMA2AHB_BURST_SIZE_256);
|
||
|
|
ll_sysctrl_dma2ahb_burst_set(DMA2AHB_BURST_CH_DUAL_ORG1_WR, DMA2AHB_BURST_SIZE_256);
|
||
|
|
ll_sysctrl_dma2ahb_burst_set(DMA2AHB_BURST_CH_DUAL_ORG_RD, DMA2AHB_BURST_SIZE_256);
|
||
|
|
ll_sysctrl_dma2ahb_burst_set(DMA2AHB_BURST_CH_ROTATE_IN_RD, DMA2AHB_BURST_SIZE_32);
|
||
|
|
|
||
|
|
ll_sysctrl_dma2ahb_burst_set(DMA2AHB_BURST_CH_M2M0_WR, DMA2AHB_BURST_SIZE_256);
|
||
|
|
ll_sysctrl_dma2ahb_burst_set(DMA2AHB_BURST_CH_M2M0_RD, DMA2AHB_BURST_SIZE_256);
|
||
|
|
ll_sysctrl_dma2ahb_burst_set(DMA2AHB_BURST_CH_M2M1_WR, DMA2AHB_BURST_SIZE_256);
|
||
|
|
ll_sysctrl_dma2ahb_burst_set(DMA2AHB_BURST_CH_M2M1_RD, DMA2AHB_BURST_SIZE_256);
|
||
|
|
ll_sysctrl_dma2ahb_burst_set(DMA2AHB_BURST_CH_SDHOST1_WR, DMA2AHB_BURST_SIZE_256);
|
||
|
|
ll_sysctrl_dma2ahb_burst_set(DMA2AHB_BURST_CH_M2M2_RD, DMA2AHB_BURST_SIZE_256);
|
||
|
|
|
||
|
|
//ll_sysctrl_dma2ahb_burst_set(DMA2AHB_BURST_CH_SCALE3_Y_WR, DMA2AHB_BURST_SIZE_256);
|
||
|
|
//ll_sysctrl_dma2ahb_burst_set(DMA2AHB_BURST_CH_SCALE3_U_WR, DMA2AHB_BURST_SIZE_256);
|
||
|
|
//ll_sysctrl_dma2ahb_burst_set(DMA2AHB_BURST_CH_SCALE3_V_WR, DMA2AHB_BURST_SIZE_256);
|
||
|
|
ll_sysctrl_dma2ahb_burst_set(DMA2AHB_BURST_CH_VPP_Y_WR, DMA2AHB_BURST_SIZE_256);
|
||
|
|
ll_sysctrl_dma2ahb_burst_set(DMA2AHB_BURST_CH_VPP_U_WR, DMA2AHB_BURST_SIZE_256);
|
||
|
|
ll_sysctrl_dma2ahb_burst_set(DMA2AHB_BURST_CH_GMAC_RX_WR, DMA2AHB_BURST_SIZE_256);
|
||
|
|
|
||
|
|
SCHED->BW_STA_CYCLE = DEFAULT_SYS_CLK; //SCHED BW static
|
||
|
|
SCHED->CTRL_CON |= BIT(0) | BIT(1) | BIT(6);
|
||
|
|
|
||
|
|
// gpio_iomap_output(PC_0, GPIO_IOMAP_OUT_QSPI_OSPI_MNT_O_0); //CS
|
||
|
|
// gpio_iomap_output(PC_1, GPIO_IOMAP_OUT_QSPI_OSPI_MNT_O_1); //CLK
|
||
|
|
// gpio_iomap_output(PC_2, GPIO_IOMAP_OUT_QSPI_OSPI_MNT_O_2); //CS
|
||
|
|
// gpio_iomap_output(PC_3, GPIO_IOMAP_OUT_QSPI_OSPI_MNT_O_3); //CLK
|
||
|
|
// gpio_iomap_output(PC_4, GPIO_IOMAP_OUT_QSPI_OSPI_MNT_O_4); //CS
|
||
|
|
// gpio_iomap_output(PC_9, GPIO_IOMAP_OUT_QSPI_OSPI_MNT_O_5); //CLK
|
||
|
|
//SYSCTRL->IOFUNCMASK8 |= BIT(1);
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
struct gpio_device *gpio_get(uint32 pin)
|
||
|
|
{
|
||
|
|
if (pin >= gpioa.pin_num[0] && pin <= gpioa.pin_num[1]) {
|
||
|
|
return (struct gpio_device *)&gpioa;
|
||
|
|
} else if (pin >= gpiob.pin_num[0] && pin <= gpiob.pin_num[1]) {
|
||
|
|
return (struct gpio_device *)&gpiob;
|
||
|
|
} else if (pin >= gpioc.pin_num[0] && pin <= gpioc.pin_num[1]) {
|
||
|
|
return (struct gpio_device *)&gpioc;
|
||
|
|
} else if (pin >= gpiod.pin_num[0] && pin <= gpiod.pin_num[1]) {
|
||
|
|
return (struct gpio_device *)&gpiod;
|
||
|
|
}else if (pin >= gpioe.pin_num[0] && pin <= gpioe.pin_num[1]) {
|
||
|
|
return (struct gpio_device *)&gpioe;
|
||
|
|
}
|
||
|
|
return NULL;
|
||
|
|
}
|
||
|
|
|
||
|
|
int32 syscfg_info_get(struct syscfg_info *pinfo, const char *name)
|
||
|
|
{
|
||
|
|
#if SYSCFG_ENABLE
|
||
|
|
if (strcmp(name, "syscfg") == 0) {
|
||
|
|
pinfo->flash1 = &flash0;
|
||
|
|
pinfo->flash2 = &flash0;
|
||
|
|
pinfo->size = pinfo->flash1->sector_size;
|
||
|
|
pinfo->addr1 = pinfo->flash1->size - (2 * pinfo->size);
|
||
|
|
pinfo->addr2 = pinfo->flash1->size - pinfo->size;
|
||
|
|
printf("syscfg: pinfo->size:%d sys_config:%d sector_size:%d\r\n",pinfo->size,sizeof(struct sys_config),pinfo->flash1->sector_size);
|
||
|
|
ASSERT((pinfo->addr1 & ~(pinfo->flash1->sector_size - 1)) == pinfo->addr1);
|
||
|
|
ASSERT((pinfo->addr2 & ~(pinfo->flash2->sector_size - 1)) == pinfo->addr2);
|
||
|
|
ASSERT((pinfo->size >= sizeof(struct sys_config)) &&
|
||
|
|
(pinfo->size == (pinfo->size & ~(pinfo->flash1->sector_size - 1))));
|
||
|
|
} else if (strcmp(name, "bluetooth") == 0) {
|
||
|
|
pinfo->flash1 = &flash0;
|
||
|
|
pinfo->flash2 = &flash0;
|
||
|
|
pinfo->size = pinfo->flash1->sector_size;
|
||
|
|
pinfo->addr1 = pinfo->flash1->size - (pinfo->size << 2);
|
||
|
|
pinfo->addr2 = pinfo->flash1->size - ((pinfo->size << 1) + pinfo->size);
|
||
|
|
printf("bluetooth: pinfo->size:%d sector_size:%d\r\n",pinfo->size, pinfo->flash1->sector_size);
|
||
|
|
ASSERT((pinfo->addr1 & ~(pinfo->flash1->sector_size - 1)) == pinfo->addr1);
|
||
|
|
ASSERT((pinfo->addr2 & ~(pinfo->flash2->sector_size - 1)) == pinfo->addr2);
|
||
|
|
} else if (strcmp(name, "recorder") == 0) {
|
||
|
|
pinfo->flash1 = &flash0;
|
||
|
|
pinfo->flash2 = &flash0;
|
||
|
|
pinfo->size = pinfo->flash1->sector_size;
|
||
|
|
pinfo->addr1 = pinfo->flash1->size - (6 * pinfo->size);
|
||
|
|
pinfo->addr2 = pinfo->flash1->size - (5 * pinfo->size);
|
||
|
|
printf("recorder: pinfo->size:%d sector_size:%d\r\n",pinfo->size, pinfo->flash1->sector_size);
|
||
|
|
ASSERT((pinfo->addr1 & ~(pinfo->flash1->sector_size - 1)) == pinfo->addr1);
|
||
|
|
ASSERT((pinfo->addr2 & ~(pinfo->flash2->sector_size - 1)) == pinfo->addr2);
|
||
|
|
} else {
|
||
|
|
return -1;
|
||
|
|
}
|
||
|
|
return 0;
|
||
|
|
|
||
|
|
#else
|
||
|
|
return -1;
|
||
|
|
#endif
|
||
|
|
}
|
||
|
|
|
||
|
|
int32 ota_fwinfo_get(struct ota_fwinfo *pinfo)
|
||
|
|
{
|
||
|
|
uint32_t loader_bytes = get_boot_loader_offset();
|
||
|
|
pinfo->flash0 = &flash0;
|
||
|
|
pinfo->flash1 = &flash0;
|
||
|
|
pinfo->addr0 = 0 + loader_bytes;
|
||
|
|
pinfo->addr1 = (flash0.size / 2) + loader_bytes;
|
||
|
|
return 0;
|
||
|
|
}
|