新闻动态
ADuCM355启动文件
发布日期:2025-02-04 07:43    点击次数:58
 

ARM 单片机不止传统用的哪几家,还有ADI,哈哈哈哈哈。所以学过的知识可以迁移。

在以前就写过355的相关内容。

Emstat pico ADuCM355电化学模组详细解读

ADuCM355+LTC6078 电化学测量系统

ADuCM355电化学模拟前端-Keli编译版

 ARM-Cortex M核心的启动过程   上午写过ARM的启动过程,也可以看看355的启动过程。

图片

图片

1. afe_die_registers 7 KiB 描述:AFE(模拟前端)相关的寄存器区域。AFE通常用于处理模拟信号(如传感器信号),这部分内存用于存储AFE模块的配置和控制寄存器。2. digital_die_registers  276 KiB 数字核心相关的寄存器区域。这部分内存用于存储数字外设(如GPIO、UART、SPI等)的配置和控制寄存器。3. dRAM_always_retained_region 8 KiB 始终保留的DRAM区域。这部分内存在芯片休眠或复位时不会被清除,通常用于存储关键数据或状态信息。4. dRAM_bank1_retained_region 8 KiB Bank1保留的DRAM区域。这部分内存在特定条件下(如休眠模式)可以保留数据,通常用于存储需要持久化的数据。5. dRAM_bank2_retained_region 16 KiB Bank2保留的DRAM区域。与Bank1类似,但容量更大,适用于存储更多的持久化数据。6. dRAM_never_retained_region 32 KiB 从不保留的DRAM区域。这部分内存在芯片休眠或复位时会被清除,通常用于存储临时数据或缓存。7. IROM1 128 KiB 内部ROM区域。这部分内存通常用于存储固件或引导代码,是只读的,用于芯片启动时加载和执行初始代码。8. uart_registers UART(通用异步收发传输器)相关的寄存器区域。这部分内存用于配置和控制UART通信模块。

图片

其实没有什么库说明,就找个合适的demo去修改

图片

文件分类就比较好

图片

使用了正儿八经的CMSIS,ADI没啥MCU的野心,听ARM的话

图片

图片

定义符号__intial_sp指向栈顶。

如果使用堆,还需定义符号__heap_base和__heap_limit。

堆栈配置:堆栈大小为 0x400(1KB)。使用 AREA 指令定义了一个名为 STACK 的区域,用于存储堆栈。__initial_sp 是堆栈的初始指针。堆VS栈(Stack & Heap)-看这里堆配置:堆大小为 0xC00(3KB)。使用 AREA 指令定义了一个名为 HEAP 的区域,用于存储堆。__heap_base 和 __heap_limit 分别表示堆的起始和结束地址。

图片

跟着是向量表

中断向量表:定义了芯片的中断向量表,包括系统异常(如复位、NMI、硬错误等)和外部中断(如GPIO、UART、SPI等)。每个中断向量对应一个处理函数(Handler),默认情况下这些函数是弱定义的([WEAK]),可以被用户重写。__vector_table_Size 计算了向量表的大小。

图片

都是这样的

图片

复位

复位处理函数:首先禁用ISRAM(如果启用ADI_DISABLE_INSTRUCTION_SRAM)。调用 SystemInit 函数初始化系统(如时钟、外设等)。跳转到 __main,进入主程序。

图片

这是中断

默认的中断处理函数都是无限循环(B .),用户可以根据需要重写这些函数。

图片

如果使用 __MICROLIB(小型库),则直接导出堆栈和堆的地址。否则,使用 __user_initial_stackheap 函数初始化堆栈和堆。

图片

还有一段代码

禁用中断:使用 __disable_irq() 禁用所有中断,确保初始化过程不会被中断打断。

设置中断向量表:如果定义了 RELOCATE_IVT,则将中断向量表重定位到 __relocated_vector_table(通常在SRAM中)。否则,使用默认的中断向量表 __vector_table。

启用SRAM保留:

调用 adi_system_EnableRetention(ADI_SRAM_BANK_1, true),使SRAM Bank1在休眠模式下保留数据。

启用系统异常:设置 SCB->SHCSR 寄存器,启用用法错误(Usage Fault)、总线错误(Bus Fault)和内存管理错误(Memory Fault)异常。

刷新指令和数据流水线:使用 __ISB() 和 __DSB() 确保新的设置立即生效。

调用默认设置:调用 adi_default_setting(),执行其他默认的系统配置。

启用中断:使用 __enable_irq() 重新启用中断。

图片

先初始化一下

图片

然后就是时钟配置

DigClkSel(DIGCLK_SOURCE_HFOSC):选择高频振荡器(HFOSC)作为数字时钟源。ClkDivCfg(1,1):配置时钟分频器,使HCLK(系统时钟)和PCLK(外设时钟)都为26MHz。

图片

乱糟糟的

图片

和这个数据手册倒是挺一致的

图片

串口

DioCfgPin(pADI_GPIO0,PIN10|PIN11,1):配置GPIO0的PIN10和PIN11为UART引脚。UrtCfg(pADI_UART0,B230400,(BITM_UART_COMLCR_WLS|3),0):配置UART0为230400波特率,8位数据位,无校验位,1位停止位。UrtFifoCfg(pADI_UART0, RX_FIFO_1BYTE, BITM_UART_COMFCR_FIFOEN):配置UART0的FIFO为1字节深度,并启用FIFO。UrtFifoClr(pADI_UART0, BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR):清除UART0的接收和发送FIFO。先配置GPIO的模式,然后是UART的配置

图片

AD5940_MCUResourceInit(0):初始化AD5940所需的MCU资源(如GPIO、SPI等)。

AD5940_Main():进入AD5940的主程序,通常用于执行AD5940的主要功能(如信号采集、处理等)。

对AFE的操作在另外一个文件:

图片

APPBUFF_SIZE:定义应用程序缓冲区的大小为512。

AppBuff:用于存储AD5940的测量数据和命令。

图片

Keli还行,补全

图片

keli这个阅读功能也行

图片

AFE的传感器传感器非常多怎么办?

第一要了解整个测量系统,然后就没了。

图片

然后就是控制对应的位

图片

就这样的,就可以使用了

图片

这个是封装在芯片内部的样子

图片

昨天群里面发了一个这个,如果使用355就很更小

图片

内部的ADC很眼熟 精密小体积ADC-AD7682 16位4通道  结构是差不多的,但是结构是不一样的。

图片

后面是加入了一个仪表放大器的,然后PGA放大,传入ADC

图片

自带的可以进行工频干扰抑制,以及一部分的DFT处理。

图片

这个芯片现在有人拿来做阻抗测量

图片

可以更少的硬件

图片

因为温漂对ADC的影响非常大,这里居然使用了两个温度计来校准

图片

测量完可以通过这个寄存器写入

下篇继续

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。