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/*============================ MACROS ========================================*/
20
21#ifdef __VSF_HEADER_ONLY_SHOW_ARCH_INFO__
22
23/*\note first define basic info for arch. */
25# define VSF_ARCH_PRI_NUM 8
26# define VSF_ARCH_PRI_BIT 3
27
28# define VSF_DEV_COMMON_SWI_NUM 32
29
30#elif defined(__VSF_HAL_SHOW_VENDOR_INFO__)
31
32/*\note __VSF_HAL_SHOW_VENDOR_INFO__ is defined to include vendor information only.
33 * Vendor information means the registers/structures/macros from vendor SDK.
34 * Usually these information are not visible from user side to avoid name-space pollution.
35 */
36
37# define __VSF_HEADER_ONLY_SHOW_VENDOR_INFO__
38# include "./vendor/libraries/cmsis/cm4/device_support/at32f402_405.h"
39
40#else
41
42#ifndef __HAL_DEVICE_COMMON_ATTERY_AT32F402_405_H__
43#define __HAL_DEVICE_COMMON_ATTERY_AT32F402_405_H__
44
45/*============================ MACROS ========================================*/
46
47// user configurations with default value
48
49// HW definition
50
51// SWI
52
53#define VSF_DEV_COMMON_SWI_LIST \
54 43, 46, 47, 48, 49, 50, 61, 62, \
55 63, 64, 65, 66, 70, 78, 79, 80, \
56 84, 86, 87, 88, 89, 90, 91, 93, \
57 95, 96, 97, 98, 99, 100, 101, 102
58
59// RAM
60
61#ifndef VSF_HW_RAM_COUNT
62# define VSF_HW_RAM_COUNT 1
63#endif
64#if VSF_HW_RAM_COUNT >= 1 && !defined(VSF_HW_RAM0_ADDR)
65# define VSF_HW_RAM0_ADDR 0x20000000
66#endif
67
68// FLASH
69
70#ifndef VSF_HW_FLASH_COUNT
71# define VSF_HW_FLASH_COUNT 1
72#endif
73#if VSF_HW_FLASH_COUNT >= 1
74# define VSF_HW_FLASH0_ADDR 0x08000000
75# define VSF_HW_FLASH0_REG FLASH
76# define VSF_HW_FLASH0_IRQN 4 // FLASH_IRQn
77#endif
78
79// GPIO: PORT0..PORT3, PORT5
80
81#ifndef VSF_HW_GPIO_PORT_MASK
82# ifdef VSF_HW_GPIO_PORT_COUNT
83# define VSF_HW_GPIO_PORT_MASK ((1 << VSF_HW_GPIO_PORT_COUNT) - 1)
84# else
85# define VSF_HW_GPIO_PORT_MASK 0x2F
86# endif
87#endif
88#if VSF_HW_GPIO_PORT_MASK & ~0x2F
89# error invalid VSF_HW_GPIO_PORT_MASK
90#endif
91
92#ifndef VSF_HW_GPIO_PIN_COUNT
93# define VSF_HW_GPIO_PIN_COUNT 16
94#endif
95#ifndef VSF_HW_GPIO_FUNCTION_MAX
96# define VSF_HW_GPIO_FUNCTION_MAX 16
97#endif
98
99#if VSF_HW_GPIO_PORT_MASK & (1 << 0)
100# define VSF_HW_GPIO_PORT0_REG GPIOA
101# ifndef VSF_HW_GPIO_PORT0_MASK
102# define VSF_HW_GPIO_PORT0_MASK 0xFFFF
103# elif VSF_HW_GPIO_PORT0_MASK & ~0xFFFF
104# error invalid VSF_HW_GPIO_PORT0_MASK
105# endif
106#endif
107#if VSF_HW_GPIO_PORT_MASK & (1 << 1)
108# define VSF_HW_GPIO_PORT1_REG GPIOB
109# ifndef VSF_HW_GPIO_PORT1_MASK
110# define VSF_HW_GPIO_PORT1_MASK 0xFFFF
111# elif VSF_HW_GPIO_PORT1_MASK & ~0xFFFF
112# error invalid VSF_HW_GPIO_PORT1_MASK
113# endif
114#endif
115#if VSF_HW_GPIO_PORT_MASK & (1 << 2)
116# define VSF_HW_GPIO_PORT2_REG GPIOC
117# ifndef VSF_HW_GPIO_PORT2_MASK
118# define VSF_HW_GPIO_PORT2_MASK 0xFFFF
119# elif VSF_HW_GPIO_PORT2_MASK & ~0xFFFF
120# error invalid VSF_HW_GPIO_PORT2_MASK
121# endif
122#endif
123#if VSF_HW_GPIO_PORT_MASK & (1 << 3)
124# define VSF_HW_GPIO_PORT3_REG GPIOD
125# ifndef VSF_HW_GPIO_PORT3_MASK
126# define VSF_HW_GPIO_PORT3_MASK 0x0004
127# elif VSF_HW_GPIO_PORT3_MASK & ~0xFFFF
128# error invalid VSF_HW_GPIO_PORT3_MASK
129# endif
130#endif
131#if VSF_HW_GPIO_PORT_MASK & (1 << 5)
132# define VSF_HW_GPIO_PORT5_REG GPIOF
133# ifndef VSF_HW_GPIO_PORT5_MASK
134# define VSF_HW_GPIO_PORT5_MASK 0x08F3
135# elif VSF_HW_GPIO_PORT5_MASK & ~0x08F3
136# error invalid VSF_HW_GPIO_PORT5_MASK
137# endif
138#endif
139
140// DMA
141
142#define VSF_HW_DMA_COUNT 2
143#define VSF_HW_DMA_MASK 0x6
144#define VSF_HW_DMA_CHANNEL_NUM 7
145#define VSF_HW_DMA1_REG DMA1
146#define VSF_HW_DMA1_EN VSF_HW_EN_DMA1
147#define VSF_HW_DMA1_RST VSF_HW_RST_DMA1
148# define VSF_HW_DMA1_CHANNEL0_IRQN 11
149# define VSF_HW_DMA1_CHANNEL1_IRQN 12
150# define VSF_HW_DMA1_CHANNEL2_IRQN 13
151# define VSF_HW_DMA1_CHANNEL3_IRQN 14
152# define VSF_HW_DMA1_CHANNEL4_IRQN 15
153# define VSF_HW_DMA1_CHANNEL5_IRQN 16
154# define VSF_HW_DMA1_CHANNEL6_IRQN 17
155#define VSF_HW_DMA2_REG DMA2
156#define VSF_HW_DMA2_EN VSF_HW_EN_DMA2
157#define VSF_HW_DMA2_RST VSF_HW_RST_DMA2
158# define VSF_HW_DMA2_CHANNEL0_IRQN 56
159# define VSF_HW_DMA2_CHANNEL1_IRQN 57
160# define VSF_HW_DMA2_CHANNEL2_IRQN 58
161# define VSF_HW_DMA2_CHANNEL3_IRQN 59
162# define VSF_HW_DMA2_CHANNEL4_IRQN 60
163# define VSF_HW_DMA2_CHANNEL5_IRQN 68
164# define VSF_HW_DMA2_CHANNEL6_IRQN 69
165
166// EXTI
167
168#define VSF_HW_EXTI_COUNT 1
169#define VSF_HW_EXTI_MASK 1
170#ifndef VSF_HW_EXTI_CHANNEL_COUNT
171# define VSF_HW_EXTI_CHANNEL_COUNT 22
172#endif
173#ifndef VSF_HW_EXTI_CHANNEL_MASK
174# define VSF_HW_EXTI_CHANNEL_MASK 0x77FFFF
175#endif
176#ifndef VSF_HW_EXTI_IRQ_NUM
177# define VSF_HW_EXTI_IRQ_NUM 11
178#endif
179
180#if VSF_HW_EXTI_MASK & (1 << 0)
181# define VSF_HW_EXTI0_REG EXINT
182# define VSF_HW_EXTI0_IRQ_NUM 11
183# define VSF_HW_EXTI0_IRQ0_MASK (1 << 0)
184# define VSF_HW_EXTI0_IRQ0_IRQN 6 // EXINT0_IRQn
185# define VSF_HW_EXTI0_IRQ1_MASK (1 << 1)
186# define VSF_HW_EXTI0_IRQ1_IRQN 7 // EXINT1_IRQn
187# define VSF_HW_EXTI0_IRQ2_MASK (1 << 2)
188# define VSF_HW_EXTI0_IRQ2_IRQN 8 // EXINT1_IRQn
189# define VSF_HW_EXTI0_IRQ3_MASK (1 << 3)
190# define VSF_HW_EXTI0_IRQ3_IRQN 9 // EXINT1_IRQn
191# define VSF_HW_EXTI0_IRQ4_MASK (1 << 4)
192# define VSF_HW_EXTI0_IRQ4_IRQN 10 // EXINT1_IRQn
193# define VSF_HW_EXTI0_IRQ5_MASK (0x1F << 5)
194# define VSF_HW_EXTI0_IRQ5_IRQN 23 // EXINT9_5_IRQn
195# define VSF_HW_EXTI0_IRQ6_MASK (0x3F << 9)
196# define VSF_HW_EXTI0_IRQ6_IRQN 40 // EXINT15_10_IRQn
197# define VSF_HW_EXTI0_IRQ7_MASK (1 << 16)
198# define VSF_HW_EXTI0_IRQ7_IRQN 1 // PVM_IRQn
199# define VSF_HW_EXTI0_IRQ8_MASK (1 << 17)
200# define VSF_HW_EXTI0_IRQ8_IRQN 41 // ERTCAlarm_IRQn
201# define VSF_HW_EXTI0_IRQ9_MASK (1 << 18)
202# define VSF_HW_EXTI0_IRQ9_IRQN 42 // OTGFS1_WKUP_IRQn
203# define VSF_HW_EXTI0_IRQ10_MASK (1 << 20)
204# define VSF_HW_EXTI0_IRQ10_IRQN 76 // OTGHS_WKUP_IRQn
205#endif
206
207// USART: USART1..USART8
208
209#ifndef VSF_HW_USART_MASK
210# ifdef VSF_HW_USART_COUNT
211# define VSF_HW_USART_MASK ((1 << VSF_HW_USART_COUNT) - 1)
212# else
213# define VSF_HW_USART_MASK 0x01FE
214# endif
215#endif
216#if VSF_HW_USART_MASK & ~0x01FE
217# error invalid VSF_HW_USART_MASK
218#endif
219
220#if VSF_HW_USART_MASK & (1 << 1)
221# define VSF_HW_USART1_REG USART1
222# define VSF_HW_USART1_CLK VSF_HW_CLK_USART1
223# define VSF_HW_USART1_EN VSF_HW_EN_USART1
224# define VSF_HW_USART1_RST VSF_HW_RST_USART1
225# define VSF_HW_USART1_SYNC true
226# define VSF_HW_USART1_IRQN 37 // USART1_IRQn
227#endif
228#if VSF_HW_USART_MASK & (1 << 2)
229# define VSF_HW_USART2_REG USART2
230# define VSF_HW_USART2_CLK VSF_HW_CLK_USART2
231# define VSF_HW_USART2_EN VSF_HW_EN_USART2
232# define VSF_HW_USART2_RST VSF_HW_RST_USART2
233# define VSF_HW_USART2_SYNC true
234# define VSF_HW_USART2_IRQN 38 // USART2_IRQn
235#endif
236#if VSF_HW_USART_MASK & (1 << 3)
237# define VSF_HW_USART3_REG USART3
238# define VSF_HW_USART3_CLK VSF_HW_CLK_USART3
239# define VSF_HW_USART3_EN VSF_HW_EN_USART3
240# define VSF_HW_USART3_RST VSF_HW_RST_USART3
241# define VSF_HW_USART3_SYNC true
242# define VSF_HW_USART3_IRQN 39 // USART3_IRQn
243#endif
244#if VSF_HW_USART_MASK & (1 << 4)
245# define VSF_HW_USART4_REG USART4
246# define VSF_HW_USART4_CLK VSF_HW_CLK_USART4
247# define VSF_HW_USART4_EN VSF_HW_EN_USART4
248# define VSF_HW_USART4_RST VSF_HW_RST_USART4
249# define VSF_HW_USART4_SYNC true
250# define VSF_HW_USART4_IRQN 52 // USART4_IRQn
251#endif
252#if VSF_HW_USART_MASK & (1 << 5)
253# define VSF_HW_USART5_REG USART5
254# define VSF_HW_USART5_CLK VSF_HW_CLK_USART5
255# define VSF_HW_USART5_EN VSF_HW_EN_USART5
256# define VSF_HW_USART5_RST VSF_HW_RST_USART5
257# define VSF_HW_USART5_SYNC true
258# define VSF_HW_USART5_IRQN 53 // USART5_IRQn
259#endif
260#if VSF_HW_USART_MASK & (1 << 6)
261# define VSF_HW_USART6_REG USART6
262# define VSF_HW_USART6_CLK VSF_HW_CLK_USART6
263# define VSF_HW_USART6_EN VSF_HW_EN_USART6
264# define VSF_HW_USART6_RST VSF_HW_RST_USART6
265# define VSF_HW_USART6_SYNC true
266# define VSF_HW_USART6_IRQN 71 // USART6_IRQn
267#endif
268#if VSF_HW_USART_MASK & (1 << 7)
269# define VSF_HW_USART7_REG UART7
270# define VSF_HW_USART7_CLK VSF_HW_CLK_UART7
271# define VSF_HW_USART7_EN VSF_HW_EN_UART7
272# define VSF_HW_USART7_RST VSF_HW_RST_UART7
273# define VSF_HW_USART7_SYNC false
274# define VSF_HW_USART7_IRQN 82 // UART7_IRQn
275#endif
276#if VSF_HW_USART_MASK & (1 << 8)
277# define VSF_HW_USART8_REG UART8
278# define VSF_HW_USART8_CLK VSF_HW_CLK_UART8
279# define VSF_HW_USART8_EN VSF_HW_EN_UART8
280# define VSF_HW_USART8_RST VSF_HW_RST_UART8
281# define VSF_HW_USART8_SYNC false
282# define VSF_HW_USART8_IRQN 83 // UART8_IRQn
283#endif
284
285// SPI: SPI1..SPI3
286
287#ifndef VSF_HW_SPI_MASK
288# ifdef VSF_HW_SPI_COUNT
289# define VSF_HW_SPI_MASK ((1 << VSF_HW_SPI_COUNT) - 1)
290# else
291# define VSF_HW_SPI_MASK 0x0E
292# endif
293#endif
294#if VSF_HW_SPI_MASK & ~0x0E
295# error invalid VSF_HW_SPI_MASK
296#endif
297
298#if VSF_HW_SPI_MASK & (1 << 1)
299# define VSF_HW_SPI1_REG SPI1
300# define VSF_HW_SPI1_CLK VSF_HW_CLK_SPI1
301# define VSF_HW_SPI1_EN VSF_HW_EN_SPI1
302# define VSF_HW_SPI1_RST VSF_HW_RST_SPI1
303# define VSF_HW_SPI1_IRQN 35 // SPI1_IRQn
304#endif
305#if VSF_HW_SPI_MASK & (1 << 2)
306# define VSF_HW_SPI2_REG SPI2
307# define VSF_HW_SPI2_CLK VSF_HW_CLK_SPI2
308# define VSF_HW_SPI2_EN VSF_HW_EN_SPI2
309# define VSF_HW_SPI2_RST VSF_HW_RST_SPI2
310# define VSF_HW_SPI2_IRQN 36 // SPI2_IRQn
311#endif
312#if VSF_HW_SPI_MASK & (1 << 3)
313# define VSF_HW_SPI3_REG SPI3
314# define VSF_HW_SPI3_CLK VSF_HW_CLK_SPI3
315# define VSF_HW_SPI3_EN VSF_HW_EN_SPI3
316# define VSF_HW_SPI3_RST VSF_HW_RST_SPI3
317# define VSF_HW_SPI3_IRQN 51 // SPI3_IRQn
318#endif
319
320// I2C: I2C1..I2C3
321
322#ifndef VSF_HW_I2C_MASK
323# ifdef VSF_HW_I2C_COUNT
324# define VSF_HW_I2C_MASK ((1 << VSF_HW_I2C_COUNT) - 1)
325# else
326# define VSF_HW_I2C_MASK 0x0E
327# endif
328#endif
329#if VSF_HW_I2C_MASK & ~0x0E
330# error invalid VSF_HW_I2C_MASK
331#endif
332
333#if VSF_HW_I2C_MASK & (1 << 1)
334# define VSF_HW_I2C1_REG I2C1
335# define VSF_HW_I2C1_CLK VSF_HW_CLK_I2C1
336# define VSF_HW_I2C1_EN VSF_HW_EN_I2C1
337# define VSF_HW_I2C1_RST VSF_HW_RST_I2C1
338# define VSF_HW_I2C1_EVENT_IRQN 31 // I2C1_EVT_IRQn
339# define VSF_HW_I2C1_ERROR_IRQN 32 // I2C1_ERR_IRQn
340#endif
341#if VSF_HW_I2C_MASK & (1 << 2)
342# define VSF_HW_I2C2_REG I2C2
343# define VSF_HW_I2C2_CLK VSF_HW_CLK_I2C2
344# define VSF_HW_I2C2_EN VSF_HW_EN_I2C2
345# define VSF_HW_I2C2_RST VSF_HW_RST_I2C2
346# define VSF_HW_I2C2_EVENT_IRQN 33 // I2C2_EVT_IRQn
347# define VSF_HW_I2C2_ERROR_IRQN 34 // I2C2_ERR_IRQn
348#endif
349#if VSF_HW_I2C_MASK & (1 << 3)
350# define VSF_HW_I2C3_REG I2C3
351# define VSF_HW_I2C3_CLK VSF_HW_CLK_I2C3
352# define VSF_HW_I2C3_EN VSF_HW_EN_I2C3
353# define VSF_HW_I2C3_RST VSF_HW_RST_I2C3
354# define VSF_HW_I2C3_EVENT_IRQN 72 // I2C3_EVT_IRQn
355# define VSF_HW_I2C3_ERROR_IRQN 73 // I2C3_ERR_IRQn
356#endif
357
358// USB OTG
359
360#ifndef VSF_HW_USB_OTG_MASK
361# ifdef VSF_HW_USB_OTG_COUNT
362# define VSF_HW_USB_OTG_MASK ((1 << VSF_HW_USB_OTG_COUNT) - 1)
363# else
364# define VSF_HW_USB_OTG_MASK 0x03
365# endif
366#endif
367
368// required by dwcotg, define the max ep number of dwcotg include ep0
369#ifndef USB_DWCOTG_MAX_EP_NUM
370# define USB_DWCOTG_MAX_EP_NUM 16
371#endif
372
373#if VSF_HW_USB_OTG_MASK & (1 << 0)
374# define VSF_HW_USB_OTG0_IRQN 67 // OTGFS1_IRQn
375# define VSF_HW_USB_OTG0_CONFIG \
376 .dc_ep_num = 8 << 1, \
377 .hc_ep_num = 16, \
378 .reg = (void *)OTGFS1_BASE, \
379 .irq = VSF_HW_USB_OTG0_IRQN, \
380 .en = VSF_HW_EN_OTGFS1, \
381 .phyclk = &VSF_HW_CLK_HICK, \
382 .phyclk_freq_required = 48 * 1000 * 1000, \
383 /* vk_dwcotg_hw_info_t */ \
384 .buffer_word_size = 320, \
385 .speed = USB_SPEED_FULL, \
386 .dma_en = false, \
387 .ulpi_en = false, \
388 .utmi_en = false, \
389 .vbus_en = false,
390#endif
391
392#if VSF_HW_USB_OTG_MASK & (1 << 1)
393// TODO: 修复DMA模式BUG, 修复高速模式的BUG
394# define VSF_HW_USB_OTG1_IRQN 77 // OTGHS_IRQn
395# define VSF_HW_USB_OTG1_CONFIG \
396 .dc_ep_num = 8 << 1, \
397 .hc_ep_num = 16, \
398 .reg = (void *)OTGHS_BASE, \
399 .irq = VSF_HW_USB_OTG1_IRQN, \
400 .en = VSF_HW_EN_OTGHS, \
401 .phyclk = &VSF_HW_CLK_HEXT, \
402 .phyclk_freq_required = 12 * 1000 * 1000, \
403 /* vk_dwcotg_hw_info_t */ \
404 .buffer_word_size = 1024, \
405 .speed = USB_SPEED_HIGH, \
406 .dma_en = false, \
407 .ulpi_en = false, \
408 .utmi_en = false, \
409 .vbus_en = false,
410#endif
411
412/*============================ INCLUDES ======================================*/
413
414// Include common irq and af headers after peripherals are defined, so that
415// irq and af can be adjusted according to the dedicated device configuration.
416
417#include "./common.h"
418#include "./device_irq.h"
419#include "./device_af.h"
420
421/*============================ MACROS ========================================*/
422/*============================ MACROFIED FUNCTIONS ===========================*/
423/*============================ TYPES =========================================*/
424/*============================ GLOBAL VARIABLES ==============================*/
425/*============================ LOCAL VARIABLES ===============================*/
426/*============================ PROTOTYPES ====================================*/
427
428#endif // __HAL_DEVICE_COMMON_ATTERY_AT32F402_405_H__
429#endif // __VSF_HEADER_ONLY_SHOW_ARCH_INFO__
430
431/* EOF */
Generated from commit: vsfteam/vsf@8634e61