ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

RIOT OS 中 ATxmega-A3BU Xplained 开发板支持详解:MCU 规格、烧录流程与外设配置

RIOT OS 中 ATxmega-A3BU Xplained 开发板支持详解:MCU 规格、烧录流程与外设配置 RIOT OS 中 ATxmega-A3BU Xplained 开发板支持详解MCU 规格、烧录流程与外设配置【免费下载链接】RIOTRIOT - The friendly OS for IoT项目地址: https://gitcode.com/GitHub_Trending/riot/RIOT本文围绕 RIOT OS 对 ATxmega-A3BU Xplained 开发板的官方文档boards/atxmega-a3bu-xplained/doc.md展开完整梳理该板的 ATxmega256A3BU 微控制器硬件规格、在 RIOT 构建体系中的板级支持结构、外设引脚映射UART/I2C/SPI/Timer、LED 与按键定义、xtimer 配置以及使用 Atmel-ICEatmelice烧录固件和打开串口终端的完整操作流程。读完本文你可以直接在该板上编译、烧录和调试 RIOT 应用并理解 RIOT 板级配置各文件之间的分工与依赖关系。一、板卡定位与 MCU 硬件规格ATxmega-A3BU Xplained 是 Microchip原 Atmel用于 XMEGA 系列开发的一块参考开发板文档原文将其定位为 a reference to develop with XMEGAs。板载核心 MCU 为ATxmega256A3BU其完整规格如下继承自 doc.md项目规格系列AVR/ATxmega厂商Microchip原 AtmelFlash256 KiBRAM16 KiBEEPROM4 KiB主频最高 32 MHz定时器7 个 16 位可将 2 个 16 位组合为 32 位模拟比较器AC4 个ADC2 个16 通道、12 位、2 Msps1 个2 通道、12 位、1 MspsUART6 个均可工作在 SPI 模式外加 1 个 IrDASPI2 个I2C2 个在 XMEGA 中称为 TWIUSB1 个端口DMA4 通道事件系统8 通道外部中断全部 GPIO加密硬件AES/DES、CRC-16、CRC-32工作电压1.6 V – 3.6 V原文档同时提供了 ATxmega256A3BU 数据手册与 XMEGA-AU 用户手册的引用用于引脚映射与寄存器级别的深入查阅。二、板级支持在 RIOT 构建体系中的结构该板的支持代码集中在 boards/atxmega-a3bu-xplained/ 目录由五个构建文件和一个include/目录组成各文件职责如下Kconfig定义板级 Kconfig 选项。选择该板时BOARD默认取atxmega-a3bu-xplained并select CPU_MODEL_XMEGA256A3BU将 MCU 型号锁定为atxmega256a3bu该模型定义位于 cpu/atxmega/Kconfig.XMEGAAMakefile.features声明CPU_MODEL atxmega256a3bu并通过FEATURES_PROVIDED向 RIOT 声明该板提供periph_i2c、periph_spi、periph_uart三个外设特性最后包含公共板文件$(RIOTBOARD)/common/atxmega/Makefile.featuresMakefile声明MODULE board并把公共目录$(RIOTBOARD)/common/atxmega加入编译源DIRS使公共板配置随板级模块一起参与构建Makefile.dep声明USEMODULE boards_common_atxmega依赖若应用启用了saul_defaultSAUL 默认外设则自动追加saul_gpio模块include/放置board.h、periph_conf.h、gpio_params.h三个板级头文件即下文重点解析的对象。这种单板目录 boards/common/公共板族的分层方式是 RIOT 中同系列多板共用的典型组织手段ATxmega 家族通用的烧录参数、默认外设数量收敛到 boards/common/atxmega/ 中单板差异则留在各自的include/内。三、外设引脚映射periph_conf.h 深度解析boards/atxmega-a3bu-xplained/include/periph_conf.h 通过 RIOT 标准的*_conf_t配置数组描述该板启用的外设是驱动框架periph初始化外设时的直接数据来源。3.1 定时器Timerstatic const timer_conf_t timer_config[] { { .dev (void *)TCC1, .pwr PWR_RED_REG(PWR_PORT_C, PR_TC1_bm), .type TC_TYPE_1, .int_lvl { CPU_INT_LVL_LOW, CPU_INT_LVL_OFF, CPU_INT_LVL_OFF, CPU_INT_LVL_OFF }, }, { .dev (void *)TCC0, .pwr PWR_RED_REG(PWR_PORT_C, PR_TC0_bm), .type TC_TYPE_0, .int_lvl { CPU_INT_LVL_LOW, CPU_INT_LVL_LOW, CPU_INT_LVL_LOW, CPU_INT_LVL_LOW }, } };Timer 0映射到硬件定时器TCC1单通道 16 位类型TC_TYPE_1仅启用 A 通道中断CCA其余通道中断关闭Timer 1映射到TCC0TC_TYPE_0A/B/C/D 四个比较匹配通道的中断全部使能分别挂接到TIMER_1_ISRA–TIMER_1_ISRD定义的中断向量TCC0_CCA/CCB/CCC/CCD_vect。XMEGA 的PWR_*_REG宏用于按需为外设端口释放时钟门控power reduction 寄存器位这是 AVR 系降低功耗的关键配置。TIMER_NUMOF由ARRAY_SIZE(timer_config)自动计算为 2。3.2 串口UARTstatic const uart_conf_t uart_config[] { { /* J1 */ .dev USARTC0, .pwr PWR_RED_REG(PWR_PORT_C, PR_USART0_bm), .rx_pin GPIO_PIN(PORT_C, 2), .tx_pin GPIO_PIN(PORT_C, 3), .rx_int_lvl CPU_INT_LVL_LOW, .tx_int_lvl CPU_INT_LVL_LOW, .dre_int_lvl CPU_INT_LVL_OFF, }, { /* J4 */ .dev USARTE0, .pwr PWR_RED_REG(PWR_PORT_E, PR_USART0_bm), .rx_pin GPIO_PIN(PORT_E, 2), .tx_pin GPIO_PIN(PORT_E, 3), ... }, };逻辑 UART硬件外设引脚引出位置UART 0USARTC0PC2 (RX) / PC3 (TX)板载 J1 排针UART 1USARTE0PE2 (RX) / PE3 (TX)板载 J4 排针两组 UART 均配置接收/发送中断为低优先级、DRE数据寄存器空中断关闭当应用额外启用MODULE_PERIPH_UART_HW_FC时RTS/CTS 引脚定义为GPIO_UNDEF该板未提供硬件流控引脚。每路 UART 的接收、发送完成、DRE 中断向量如USARTC0_RXC_vect在头文件中以UART_0_RXC_ISR等宏显式映射供 CPU 层中断分发使用。注意XMEGA 的 USART 引脚映射是芯片固定的参考手册中给出板级配置只需声明选用哪个外设实例及其引脚与中断[boards/common/atxmega/include/periph_conf_common.h](https://link.gitcode.com/i/a054440ac5e5e2e2166b90e42345546e)中的注释也专门解释了这一点。3.3 I2CTWIstatic const i2c_conf_t i2c_config[] { { /* J1 */ .dev TWIC, .pwr PWR_RED_REG(PWR_PORT_C, PR_TWI_bm), .sda_pin GPIO_PIN(PORT_C, 0), .scl_pin GPIO_PIN(PORT_C, 1), .speed I2C_SPEED_NORMAL, .int_lvl CPU_INT_LVL_LOW, }, };仅启用 1 路 I2C硬件TWICSDASCL 分别位于 PC0/PC1引到 J1 排针速率取I2C_SPEED_NORMAL标准模式 100 kbit/s中断向量I2C_0_ISR为TWIC_TWIM_vect。MCU 本身具备 2 路 TWI但板级默认只配置了 J1 这一路。3.4 SPIstatic const spi_conf_t spi_config[] { { .dev SPIC, .pwr PWR_RED_REG(PWR_PORT_C, PR_SPI_bm), .sck_pin GPIO_PIN(PORT_C, 7), .miso_pin GPIO_PIN(PORT_C, 6), .mosi_pin GPIO_PIN(PORT_C, 5), .ss_pin GPIO_PIN(PORT_C, 4), }, };SPI 使用SPICSCK/MISO/MOSI/SS 对应 PC7/PC6/PC5/PC4。[periph_conf_common.h](https://link.gitcode.com/i/a054440ac5e5e2e2166b90e42345546e)中有一段值得注意的说明SPI 的 SS 引脚需配置为输出方向才能正确工作于主机模式但当前实现尚未用它做片选控制片选在驱动层外部处理可作为后续完善点理解。3.5 公共默认值与未启用即清零[periph_conf_common.h](https://link.gitcode.com/i/a054440ac5e5e2e2166b90e42345546e)为 ATxmega 家族提供统一兜底ADC_NUMOF、I2C_NUMOF、PWM_NUMOF、SPI_NUMOF、UART_NUMOF在未定义时全部默认为 0CLOCK_CORECLOCK默认 32 MHz。也就是说某外设是否可用完全由单板periph_conf.h是否提供配置数组决定——该板未配置 ADC 与 PWM 数组故这两类 periph 驱动在该板不生效。四、时钟、LED、按键与 xtimerboard.h 逐项说明boards/atxmega-a3bu-xplained/include/board.h 定义应用层可见的板级常量4.1 时钟与串口波特率#define CLOCK_CORECLOCK MHZ(32) #ifndef STDIO_UART_BAUDRATE #define STDIO_UART_BAUDRATE (115200U) #endif核心时钟锁定32 MHz。注释特别指出CPU 层cpu/atxmega的 UART 驱动默认采用 double-speed 模式倍速 UART在 32 MHz 下115200波特率误差率良好并与板级Makefile.include中BAUD宏保持一致。这一约束提醒用户若覆盖STDIO_UART_BAUDRATE需重新核算波特率误差。4.2 LED 与按键板级符号硬件引脚说明LED0PORT_R PIN0OUTCLR点亮 /OUTSET熄灭 /OUTTGL翻转低电平点亮LED1PORT_R PIN1同上BTN0PORT_E PIN5输入 上拉下降沿或低电平触发BTN1PORT_F PIN1同上BTN2PORT_F PIN2同上LED 采用 AVR 的原子位操作宏OUTCLR/OUTSET/OUTTGL实现免临界区的置位操作三个按键统一为GPIO_IN | GPIO_OPC_PU | GPIO_SLEW_RATE模式并配置下降沿中断可直接用于 RIOT 的gpio_irq/button-eval等示例场景。4.3 xtimer高精度软定时器配置#define XTIMER_DEV TIMER_DEV(0) #define XTIMER_CHAN (0) #define XTIMER_WIDTH (16) #define XTIMER_HZ KHZ(500) #define XTIMER_BACKOFF (150)xtimer 挂载在 **Timer 0即 TCC1**的通道 0 上16 位宽分频后时基为500 kHz。文件内注释给出了 32 MHz 时钟下的一组可选时基/分频/移位组合4 MHz/÷8、1 MHz/÷32、500 kHz/÷64、250 kHz/÷128、31.25 kHz/÷1024当前采用 500 kHz 档并保留 150 的XTIMER_BACKOFF回退窗口。由于 Timer 0 只启用 A 通道中断、B–D 通道关闭正好满足 xtimer 仅需单通道比较中断的需求。五、烧录make flash 与 avrdude/atmelice 链路原文档 doc.md 指出ATxmega-A3BU Xplained需要外部编程器如 Atmel-ICE/atmelice烧录命令为make BOARDatxmega-a3bu-xplained flash这条命令背后的工具链参数由 ATxmega 公共板文件 boards/common/atxmega/Makefile.include 决定变量默认值作用DEBUGPROTO-x默认使用 JTAG 协议进行调试/烧录FLASHFILE$(ELFFILE)直接烧录 ELF 文件avrdude 可解析 ELFPROGRAMMERavrdude使用 avrdude 作为烧录工具AVRDUDE_PROGRAMMERatmelice指定 Atmel-ICE 作为物理编程器FFLAGS_EXTRAflash目标时追加-e烧录前先整片擦除 Flash除 Atmel-ICE 外该文件还为通过 UART 引导加载器烧录预留了完整分支从源码结构看Xplained 板默认走 ICE/JTAG但这些变量可用于其他启动方式BOOTLOADERstk500v2使用 STK500V2 协议BOOTLOADER_SIZE默认 4K并追加-D关闭自动擦除擦除由 bootloader 隐式完成BOOTLOADERavr109AVR SPI 协议BOOTLOADER_SIZE默认 4KBOOTLOADER_BAUD设置引导烧录串口波特率-b使用 bootloader 时FLASHFILE回退为$(BINFILE)raw 二进制ROM_RESERVED预留 bootloader 占用的 Flash 空间。因此完整的常用烧录流程是# 编译 烧录需连接 Atmel-ICEJTAG make -C 你的应用目录 BOARDatxmega-a3bu-xplained flash六、串口终端make term该板需要 USB 转串口serial converter设备标准 I/Ostdio默认接在J1 排针的第 2/3 脚——与 3.2 节uart_config中 J1 对应的 USARTC0PC3TX一致。打开终端命令make BOARDatxmega-a3bu-xplained term结合 board.h 可知make term打开的终端波特率为115200STDIO_UART_BAUDRATE与 CPU 层 UART 驱动的倍速模式配置相匹配。使用时将 USB 转串口的 RX/TX 交叉接到 J1 的 TX/RX第 2/3 脚并共地即可看到 RIOT 的 shell 与printf输出。七、验证方式板级 CPU 测试仓库提供了覆盖 ATxmega 家族的 CPU 驱动测试套件 tests/cpu/avr8_xmega_drivers/其 Makefile 明确列出三块受支持板BOARD ? atxmega-a1u-xpro BOARDS_SUPPORTED \ atxmega-a1-xplained \ atxmega-a1u-xpro \ atxmega-a3bu-xplained \ #即在硬件上验证该板支持完整性时钟、UART、I2C、SPI、gpio 等 periph 行为时可以在该测试目录执行make BOARDatxmega-a3bu-xplained flash test这也是 CI 与本地开发确认板级回归问题的推荐入口。小结ATxmega-A3BU Xplained 在 RIOT 中的支持由单板 include 配置 boards/common/atxmega公共层共同完成periph_conf.h 给出 TCC1/TCC0 双定时器、J1/J4 双 UART、TWIC 单路 I2C、SPIC 单路 SPI 的精确引脚映射board.h 固化 32 MHz 时钟、115200 倍速 stdio、PORT_R 双 LED、三路按键与 500 kHz xtimer烧录与终端分别依赖 Atmel-ICE 的make flashavrdude JTAG 自动擦除和 J1 串口的make term。上述配置与命令均可在仓库对应路径中逐行核对作为在 XMEGA-AU 系列上落地 RIOT 应用的直接依据。【免费下载链接】RIOTRIOT - The friendly OS for IoT项目地址: https://gitcode.com/GitHub_Trending/riot/RIOT创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表