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_ARTERY_AT32F402_405_H__
43#define __HAL_DEVICE_COMMON_ARTERY_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# define VSF_HW_SPI1_TX_DMA_REQUEST 0x0B // DMAMUX_DMAREQ_ID_SPI1_TX
305# define VSF_HW_SPI1_RX_DMA_REQUEST 0x0A // DMAMUX_DMAREQ_ID_SPI1_RX
306#endif
307#if VSF_HW_SPI_MASK & (1 << 2)
308# define VSF_HW_SPI2_REG SPI2
309# define VSF_HW_SPI2_CLK VSF_HW_CLK_SPI2
310# define VSF_HW_SPI2_EN VSF_HW_EN_SPI2
311# define VSF_HW_SPI2_RST VSF_HW_RST_SPI2
312# define VSF_HW_SPI2_IRQN 36 // SPI2_IRQn
313# define VSF_HW_SPI2_TX_DMA_REQUEST 0x0D // DMAMUX_DMAREQ_ID_SPI2_TX
314# define VSF_HW_SPI2_RX_DMA_REQUEST 0x0C // DMAMUX_DMAREQ_ID_SPI2_RX
315#endif
316#if VSF_HW_SPI_MASK & (1 << 3)
317# define VSF_HW_SPI3_REG SPI3
318# define VSF_HW_SPI3_CLK VSF_HW_CLK_SPI3
319# define VSF_HW_SPI3_EN VSF_HW_EN_SPI3
320# define VSF_HW_SPI3_RST VSF_HW_RST_SPI3
321# define VSF_HW_SPI3_IRQN 51 // SPI3_IRQn
322# define VSF_HW_SPI3_TX_DMA_REQUEST 0x0F // DMAMUX_DMAREQ_ID_SPI3_TX
323# define VSF_HW_SPI3_RX_DMA_REQUEST 0x0E // DMAMUX_DMAREQ_ID_SPI3_RX
324#endif
325
326// I2C: I2C1..I2C3
327
328#ifndef VSF_HW_I2C_MASK
329# ifdef VSF_HW_I2C_COUNT
330# define VSF_HW_I2C_MASK ((1 << VSF_HW_I2C_COUNT) - 1)
331# else
332# define VSF_HW_I2C_MASK 0x0E
333# endif
334#endif
335#if VSF_HW_I2C_MASK & ~0x0E
336# error invalid VSF_HW_I2C_MASK
337#endif
338
339#if VSF_HW_I2C_MASK & (1 << 1)
340# define VSF_HW_I2C1_REG I2C1
341# define VSF_HW_I2C1_CLK VSF_HW_CLK_I2C1
342# define VSF_HW_I2C1_EN VSF_HW_EN_I2C1
343# define VSF_HW_I2C1_RST VSF_HW_RST_I2C1
344# define VSF_HW_I2C1_EVENT_IRQN 31 // I2C1_EVT_IRQn
345# define VSF_HW_I2C1_ERROR_IRQN 32 // I2C1_ERR_IRQn
346#endif
347#if VSF_HW_I2C_MASK & (1 << 2)
348# define VSF_HW_I2C2_REG I2C2
349# define VSF_HW_I2C2_CLK VSF_HW_CLK_I2C2
350# define VSF_HW_I2C2_EN VSF_HW_EN_I2C2
351# define VSF_HW_I2C2_RST VSF_HW_RST_I2C2
352# define VSF_HW_I2C2_EVENT_IRQN 33 // I2C2_EVT_IRQn
353# define VSF_HW_I2C2_ERROR_IRQN 34 // I2C2_ERR_IRQn
354#endif
355#if VSF_HW_I2C_MASK & (1 << 3)
356# define VSF_HW_I2C3_REG I2C3
357# define VSF_HW_I2C3_CLK VSF_HW_CLK_I2C3
358# define VSF_HW_I2C3_EN VSF_HW_EN_I2C3
359# define VSF_HW_I2C3_RST VSF_HW_RST_I2C3
360# define VSF_HW_I2C3_EVENT_IRQN 72 // I2C3_EVT_IRQn
361# define VSF_HW_I2C3_ERROR_IRQN 73 // I2C3_ERR_IRQn
362#endif
363
364// WDT: Independent Watchdog
365
366#ifndef VSF_HW_WDT_COUNT
367# define VSF_HW_WDT_COUNT 1
368#endif
369#ifndef VSF_HW_WDT_MASK
370# define VSF_HW_WDT_MASK 0x1
371#endif
372
373#if VSF_HW_WDT_MASK & (1 << 0)
374# define VSF_HW_WDT0_REG WDT
375# define VSF_HW_WDT0_TYPE 0 // WDT (Independent Watchdog)
376# define VSF_HW_WDT0_CLK VSF_HW_CLK_LICK // WDT uses LICK (40kHz)
377# define VSF_HW_WDT0_CLK_FREQ_HZ 40000
378#endif
379
380// WWDT: Window Watchdog (as separate device with device prefix)
381
382#ifndef VSF_HW_WWDT_COUNT
383# define VSF_HW_WWDT_COUNT 1
384#endif
385#ifndef VSF_HW_WWDT_MASK
386# define VSF_HW_WWDT_MASK 0x1
387#endif
388
389#if VSF_HW_WWDT_MASK & (1 << 0)
390# define VSF_HW_WWDT0_REG WWDT
391# define VSF_HW_WWDT0_TYPE 1 // WWDT (Window Watchdog)
392# define VSF_HW_WWDT0_CLK VSF_HW_CLK_APB1 // WWDT uses APB1 (PCLK1)
393# define VSF_HW_WWDT0_EN VSF_HW_EN_WWDT
394# define VSF_HW_WWDT0_RST VSF_HW_RST_WWDT
395# define VSF_HW_WWDT0_IRQN 0 // WWDT has no dedicated IRQ, uses early wakeup interrupt
396#endif
397
398// USB OTG
399
400#ifndef VSF_HW_USB_OTG_MASK
401# ifdef VSF_HW_USB_OTG_COUNT
402# define VSF_HW_USB_OTG_MASK ((1 << VSF_HW_USB_OTG_COUNT) - 1)
403# else
404# define VSF_HW_USB_OTG_MASK 0x03
405# endif
406#endif
407
408// required by dwcotg, define the max ep number of dwcotg include ep0
409#ifndef USB_DWCOTG_MAX_EP_NUM
410# define USB_DWCOTG_MAX_EP_NUM 16
411#endif
412
413#if VSF_HW_USB_OTG_MASK & (1 << 0)
414# define VSF_HW_USB_OTG0_IRQN 67 // OTGFS1_IRQn
415# define VSF_HW_USB_OTG0_CONFIG \
416 .dc_ep_num = 8 << 1, \
417 .hc_ep_num = 16, \
418 .reg = (void *)OTGFS1_BASE, \
419 .irq = VSF_HW_USB_OTG0_IRQN, \
420 .en = VSF_HW_EN_OTGFS1, \
421 .phyclk = &VSF_HW_CLK_HICK, \
422 .phyclk_freq_required = 48 * 1000 * 1000, \
423 /* vk_dwcotg_hw_info_t */ \
424 .buffer_word_size = 320, \
425 .speed = USB_SPEED_FULL, \
426 .dma_en = false, \
427 .ulpi_en = false, \
428 .utmi_en = false, \
429 .vbus_en = false,
430#endif
431
432#if VSF_HW_USB_OTG_MASK & (1 << 1)
433// TODO: 修复DMA模式BUG, 修复高速模式的BUG
434# define VSF_HW_USB_OTG1_IRQN 77 // OTGHS_IRQn
435# define VSF_HW_USB_OTG1_CONFIG \
436 .dc_ep_num = 8 << 1, \
437 .hc_ep_num = 16, \
438 .reg = (void *)OTGHS_BASE, \
439 .irq = VSF_HW_USB_OTG1_IRQN, \
440 .en = VSF_HW_EN_OTGHS, \
441 .phyclk = &VSF_HW_CLK_HEXT, \
442 .phyclk_freq_required = 12 * 1000 * 1000, \
443 /* vk_dwcotg_hw_info_t */ \
444 .buffer_word_size = 1024, \
445 .speed = USB_SPEED_HIGH, \
446 .dma_en = false, \
447 .ulpi_en = false, \
448 .utmi_en = false, \
449 .vbus_en = false,
450#endif
451
452/*============================ INCLUDES ======================================*/
453
454// Include common irq and af headers after peripherals are defined, so that
455// irq and af can be adjusted according to the dedicated device configuration.
456
457#include "./common.h"
458#include "./device_irq.h"
459#include "./device_af.h"
460
461/*============================ MACROS ========================================*/
462/*============================ MACROFIED FUNCTIONS ===========================*/
463/*============================ TYPES =========================================*/
464/*============================ GLOBAL VARIABLES ==============================*/
465/*============================ LOCAL VARIABLES ===============================*/
466/*============================ PROTOTYPES ====================================*/
467
468#endif // __HAL_DEVICE_COMMON_ARTERY_AT32F402_405_H__
469#endif // __VSF_HEADER_ONLY_SHOW_ARCH_INFO__
470
471/* EOF */
Generated from commit: vsfteam/vsf@b2e9e8a