VSF Documented
device.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright(C)2009-2022 by VSF Team *
3 * *
4 * Licensed under the Apache License, Version 2.0 (the "License"); *
5 * you may not use this file except in compliance with the License. *
6 * You may obtain a copy of the License at *
7 * *
8 * http://www.apache.org/licenses/LICENSE-2.0 *
9 * *
10 * Unless required by applicable law or agreed to in writing, software *
11 * distributed under the License is distributed on an "AS IS" BASIS, *
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13 * See the License for the specific language governing permissions and *
14 * limitations under the License. *
15 * *
16 ****************************************************************************/
17
18/*============================ INCLUDES ======================================*/
19
20#include "hal/vsf_hal_cfg.h"
21
22/*============================ MACROS ========================================*/
23
24#if defined(__VSF_HEADER_ONLY_SHOW_ARCH_INFO__)
25
26/*\note first define basic info for arch. */
28# define VSF_ARCH_PRI_NUM 64
29# define VSF_ARCH_PRI_BIT 6
30
31// aic8800 rtoa_al need this
32# define VSF_KERNEL_CFG_QUEUE_HAS_RX_NOTIFIED ENABLED
33
34// aic8800 sdk defined dma_addr_t to uint32_t
35# define VSF_ARCH_DMA_ADDR_T uint32_t
36#elif defined(__VSF_HAL_SHOW_VENDOR_INFO__)
37
38# define __VSF_HEADER_ONLY_SHOW_VENDOR_INFO__
39# include "chip.h"
40
41#else
42
43#ifndef __HAL_DEVICE_AIC_AIC8800_H__
44#define __HAL_DEVICE_AIC_AIC8800_H__
45
46/*============================ INCLUDES ======================================*/
47
48#include "common.h"
49
50/*============================ MACROS ========================================*/
51
52#define VSF_HW_FLASH_CFG_BASE_ADDRESS 0x08000000
53#define VSF_HW_FLASH_CFG_ERASE_SECTORE_SIZE 0x1000
54#define VSF_HW_FLASH_CFG_WRITE_SECTORE_SIZE 0x100
55#define __ROM_APITBL_BASE ((unsigned int *)0x00000180UL)
56#define __ROM_FlashChipSizeGet \
57 ((unsigned int (*)(void))__ROM_APITBL_BASE[2])
58#define __ROM_FlashErase \
59 ((int (*)(unsigned int a4k, unsigned int len))__ROM_APITBL_BASE[4])
60#define __ROM_FlashWrite \
61 ((int (*)(unsigned int adr, unsigned int len, unsigned int buf))__ROM_APITBL_BASE[5])
62#define __ROM_FlashRead \
63 ((int (*)(unsigned int adr, unsigned int len, unsigned int buf))__ROM_APITBL_BASE[6])
64#define __ROM_FlashCacheInvalidRange \
65 ((void (*)(unsigned int adr, unsigned int len))__ROM_APITBL_BASE[8])
66
67
68#ifndef VSF_AIC8800_USB_CFG_SPEED
69# define VSF_AIC8800_USB_CFG_SPEED USB_SPEED_HIGH
70// AIC8800 has problem with usbh disconnect detecting level in high speed mode,
71// use port disable as a replacement
72# define VSF_DWCOTG_HCD_WORKAROUND_PORT_DISABLE_AS_DISCONNECT ENABLED
73#endif
74
75#define USB_OTG_COUNT 1
76// required by dwcotg, define the max ep number of dwcotg include ep0
77#define USB_DWCOTG_MAX_EP_NUM 16
78
79#define USB_OTG0_IRQHandler USBDMA_IRQHandler
80#define USB_OTG0_CONFIG \
81 .dc_ep_num = 4 << 1, \
82 .hc_ep_num = 5, \
83 .reg = (void *)AIC_USB_BASE, \
84 /* vk_dwcotg_hw_info_t */ \
85 .buffer_word_size = 948, \
86 .speed = VSF_AIC8800_USB_CFG_SPEED, \
87 .dma_en = true, \
88 .ulpi_en = true, \
89 .utmi_en = false, \
90 .vbus_en = false,
91
92 //GPIOB2 ~ GPIOB15 default function is GPIO
93
94#define VSF_HW_GPIO_PORT_COUNT 2
95#define VSF_HW_GPIO_PIN_COUNT 16
96#define VSF_HW_GPIO_EXTI_PORT_MASK 0x01 // only PORTA support external interrupt
97
98#define VSF_HW_GPIO_FUNCTION_MAX 10 // All Function 10 ~ Function 15 is invalid
99#define VSF_HW_GPIO0_BASE_ADDRESS (0x40504000UL)
100#define VSF_HW_GPIO0_IOMUX_REG_BASE (0x40503000)
101// GPIOA0 : SWCLK
102// GPIOA1 : SWD
103// GPIOA8 : UART0_RX
104// GPIOA9 : UART0_TX
105#define VSF_HW_GPIO0_MAP {1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}
106#define VSF_HW_GPIO0_GPIO_PIN_MASK (0x00000000) // PORTA is not pmic port, only used to compile, ignore it's value
107#define VSF_HW_GPIO0_IRQ_IDX GPIO_IRQn
108#define VSF_HW_GPIO0_IRQ GPIO_IRQHandler
109#define VSF_HW_GPIO0_IS_PMIC false
110#define VSF_HW_GPIO1_BASE_ADDRESS (0x50011000UL)
111#define VSF_HW_GPIO1_IOMUX_REG_BASE (0x50012000)
112// GPIOB0: PSI_SCL
113// GPIOB1: PSI_SDA
114#define VSF_HW_GPIO1_MAP {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
115#define VSF_HW_GPIO1_GPIO_PIN_MASK (0x0000FFFC) // GPIOB0 and GPIOB1 default function is not GPIO
116#define VSF_HW_GPIO1_IRQ_IDX 0 // TODO
117#define VSF_HW_GPIO1_IRQ GPIOB_IRQHandler
118#define VSF_HW_GPIO1_IS_PMIC true
119
120#define VSF_HW_RNG_COUNT 1
121#define VSF_HW_RNG_BITLEN 32
122#define VSF_HW_RNG0_IRQHandler TRNG_IRQHandler
123#define VSF_HW_RNG0_CONFIG \
124 .reg = (void *)AIC_TRNG_BASE, \
125 .pclk = CSC_PCLKME_TRNG_EN_BIT,
126
127// uart0 is already used in the library(include interrupt) and debug_uart
128#define VSF_HW_USART_COUNT 2
129#define VSF_HW_USART_MASK ((1 << 1) | (1 << 2))
130#define VSF_HW_USART1_REG AIC_UART1_BASE
131#define VSF_HW_USART2_REG AIC_UART2_BASE
132
133#define VSF_HW_I2C_COUNT 1
134#define VSF_HW_I2C0_IRQ_IDX I2CM_IRQn
135#define VSF_HW_I2C0_IRQ I2CM_IRQHandler
136#define VSF_HW_I2C0_REG (AIC_I2CM_TypeDef *)AIC_I2CM0_BASE
137#define VSF_HW_I2C0_PCLKME_EN_BIT CSC_PCLKME_I2CM_EN_BIT
138
139#define VSF_HW_SPI_COUNT 1
140#define VSF_HW_SPI0_IRQ_IDX SPI_IRQn
141#define VSF_HW_SPI0_IRQ SPI0_IRQHandler
142#define VSF_HW_SPI0_RXDMA_IRQ_IDX DMA08_IRQn
143#define VSF_HW_SPI0_TXDMA_IRQ_IDX DMA09_IRQn
144#define VSF_HW_SPI0_RXDMA_IRQ DMA08_IRQHandler
145#define VSF_HW_SPI0_TXDMA_IRQ DMA09_IRQHandler
146#define VSF_HW_SPI0_RXDMA_CH_IDX DMA_CHANNEL_SPI0_RX
147#define VSF_HW_SPI0_TXDMA_CH_IDX DMA_CHANNEL_SPI0_TX
148#define VSF_HW_SPI0_RXDMA_CID REQ_CID_SPI_RX
149#define VSF_HW_SPI0_TXDMA_CID REQ_CID_SPI_TX
150#define VSF_HW_SPI0_PCLKME_EN_BIT CSC_PCLKME_SPI_EN_BIT
151#define VSF_HW_SPI0_OCLKME_EN_BIT CSC_OCLKME_SPI_EN_BIT
152#define VSF_HW_SPI0_HCLKME_EN_BIT CSC_HCLKME_DMA_EN_BIT
153
154#define VSF_HW_SDIO_COUNT 1
155#define VSF_HW_SDIO0_IRQ_IDX SDMMC_IRQn
156#define VSF_HW_SDIO0_IRQ SDMMC_IRQHandler
157#define VSF_HW_SDIO0_REG (AIC_SDMMC_TypeDef *)AIC_SDMMC_BASE
158
159#define VSF_HW_I2S_COUNT 2
160#define VSF_HW_I2S0_REG (HWP_AUD_PROC_T *)REG_AUD_PROC_BASE
161#define VSF_HW_I2S0_IDX 0
162#define VSF_HW_I2S0_OCLK (CSC_OCLKME_AUDIO_PROC_EN_BIT | CSC_OCLKME_BCK0_EN_BIT)
163#ifndef VSF_HW_I2S0_RXPATH
164# define VSF_HW_I2S0_RXPATH AUD_PATH_RX01
165#endif
166#ifndef VSF_HW_I2S0_RXDMA_CH
167# define VSF_HW_I2S0_RXDMA_CH DMA_CH_1
168# define VSF_HW_I2S0_RXDMA_IRQN DMA01_IRQn
169#endif
170#ifndef VSF_HW_I2S0_TXPATH
171# define VSF_HW_I2S0_TXPATH AUD_PATH_TX01
172#endif
173#ifndef VSF_HW_I2S0_TXDMA_CH
174# define VSF_HW_I2S0_TXDMA_CH DMA_CH_4
175# define VSF_HW_I2S0_TXDMA_IRQN DMA04_IRQn
176#endif
177#define VSF_HW_I2S1_REG (HWP_AUD_PROC_T *)REG_AUD_PROC_BASE
178#define VSF_HW_I2S1_IDX 1
179#define VSF_HW_I2S1_OCLK (CSC_OCLKME_AUDIO_PROC_EN_BIT | CSC_OCLKME_BCK1_EN_BIT)
180#ifndef VSF_HW_I2S1_RXPATH
181# define VSF_HW_I2S1_RXPATH AUD_PATH_RX01
182#endif
183#ifndef VSF_HW_I2S1_RXDMA_CH
184# define VSF_HW_I2S1_RXDMA_CH DMA_CH_3
185# define VSF_HW_I2S1_RXDMA_IRQN DMA03_IRQn
186#endif
187#ifndef VSF_HW_I2S1_TXPATH
188# define VSF_HW_I2S1_TXPATH AUD_PATH_TX01
189#endif
190#ifndef VSF_HW_I2S1_TXDMA_CH
191# define VSF_HW_I2S1_TXDMA_CH DMA_CH_2
192# define VSF_HW_I2S1_TXDMA_IRQN DMA02_IRQn
193#endif
194
195#define VSF_HW_ADC_COUNT 1
196
197#define VSF_HW_PWM_COUNT 1
198#define VSF_HW_PWM0_BASE_ADDRESS 0x50014000
199#define VSF_HW_PWM0_CHANNAL_COUNT 6
200#define VSF_HW_PWM0_TIMER_COUNT 3
201
202#define VSF_AIC_PWM_COUNT 3
203#define VSF_AIC_PWM0_CHANNAL_COUNT 1
204#define VSF_AIC_PWM0_CHANNAL_COUNT 1
205#define VSF_AIC_PWM1_CHANNAL_COUNT 1
206#define VSF_AIC_PWM2_CHANNAL_COUNT 1
207
208#define VSF_HW_FLASH_COUNT 1
209#define VSF_HW_RTC_COUNT 1
210
211#define VSF_HW_TIMER_COUNT 6
212#define VSF_HW_TIMER0_BASE_ADDRESS (AIC_TIM0_BASE + 0x20 * 0)
213#define VSF_HW_TIMER0_IRQN TIMER00_IRQn
214#define VSF_HW_TIMER0_OCLK_EN_BIT CSC_OCLKME_TIMER00_EN_BIT
215#define VSF_HW_TIMER0_PCLK_EN_BIT CSC_PCLKME_TIMER0_EN_BIT
216#define VSF_HW_TIMER0_IRQHandler TIMER00_IRQHandler
217
218#define VSF_HW_TIMER1_BASE_ADDRESS (AIC_TIM0_BASE + 0x20 * 1)
219#define VSF_HW_TIMER1_IRQN TIMER01_IRQn
220#define VSF_HW_TIMER1_OCLK_EN_BIT CSC_OCLKME_TIMER01_EN_BIT
221#define VSF_HW_TIMER1_PCLK_EN_BIT CSC_PCLKME_TIMER0_EN_BIT
222#define VSF_HW_TIMER1_IRQHandler TIMER01_IRQHandler
223
224#define VSF_HW_TIMER2_BASE_ADDRESS (AIC_TIM0_BASE + 0x20 * 2)
225#define VSF_HW_TIMER2_IRQN TIMER02_IRQn
226#define VSF_HW_TIMER2_OCLK_EN_BIT CSC_OCLKME_TIMER02_EN_BIT
227#define VSF_HW_TIMER2_PCLK_EN_BIT CSC_PCLKME_TIMER0_EN_BIT
228#define VSF_HW_TIMER2_IRQHandler TIMER02_IRQHandler
229
230#define VSF_HW_TIMER3_BASE_ADDRESS (AIC_TIM1_BASE + 0x20 * 0)
231#define VSF_HW_TIMER3_IRQN TIMER10_IRQn
232#define VSF_HW_TIMER3_OCLK_EN_BIT CSC_OCLKME_TIMER10_EN_BIT
233#define VSF_HW_TIMER3_PCLK_EN_BIT CSC_PCLKME_TIMER1_EN_BIT
234#define VSF_HW_TIMER3_IRQHandler TIMER10_IRQHandler
235
236#define VSF_HW_TIMER4_BASE_ADDRESS (AIC_TIM1_BASE + 0x20 * 1)
237#define VSF_HW_TIMER4_IRQN TIMER11_IRQn
238#define VSF_HW_TIMER4_OCLK_EN_BIT CSC_OCLKME_TIMER11_EN_BIT
239#define VSF_HW_TIMER4_PCLK_EN_BIT CSC_PCLKME_TIMER1_EN_BIT
240#define VSF_HW_TIMER4_IRQHandler TIMER11_IRQHandler
241
242#define VSF_HW_TIMER5_BASE_ADDRESS (AIC_TIM1_BASE + 0x20 * 2)
243#define VSF_HW_TIMER5_IRQN TIMER12_IRQn
244#define VSF_HW_TIMER5_OCLK_EN_BIT CSC_OCLKME_TIMER12_EN_BIT
245#define VSF_HW_TIMER5_PCLK_EN_BIT CSC_PCLKME_TIMER1_EN_BIT
246#define VSF_HW_TIMER5_IRQHandler TIMER12_IRQHandler
247
248#define VSF_HW_WDT_COUNT 1
249#define VSF_HW_WDT0_BASE_ADDRESS AIC_WDT0_BASE
250#define VSF_HW_WDT0_IRQN WDT0_IRQn
251#define VSF_HW_WDT0_OCLK_EN_BIT (CSC_OCLKME_RTC_WDG0_EN_BIT | CSC_OCLKMD_RTC_ALWAYS_DIS_BIT)
252#define VSF_HW_WDT0_PCLK_EN_BIT CSC_PCLKME_WDG0_EN_BIT
253#define VSF_HW_WDT0_IRQHandler WDT0_IRQHandler
254
255/*============================ MACROFIED FUNCTIONS ===========================*/
256/*============================ TYPES =========================================*/
257/*============================ GLOBAL VARIABLES ==============================*/
258/*============================ LOCAL VARIABLES ===============================*/
259/*============================ PROTOTYPES ====================================*/
260
261#endif // __HAL_DEVICE_AIC_AIC8800_H__
262#endif // __VSF_HEADER_ONLY_SHOW_ARCH_INFO__
263/* EOF */