ADuCM355启动文件

乐活   2025-02-01 17:19   内蒙古  

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

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

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

ADuCM355+LTC6078 电化学测量系统

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

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

我才知道355和356的区别在RAM上面,官网一直看不出来

Keli上面还给了内存布局

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。

堆栈配置:
  1. 堆栈大小为 0x400(1KB)。
  2. 使用 AREA 指令定义了一个名为 STACK 的区域,用于存储堆栈。
  3. __initial_sp 是堆栈的初始指针。
堆VS栈(Stack & Heap)-看这里

堆配置:
  1. 堆大小为 0xC00(3KB)。
  2. 使用 AREA 指令定义了一个名为 HEAP 的区域,用于存储
  3. __heap_base 和 __heap_limit 分别表示堆的起始和结束地址。

跟着是向量表

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

都是这样的

复位

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

这是中断

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

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

还有一段代码

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

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

  3. 启用SRAM保留:

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

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

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

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

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

先初始化一下

然后就是时钟配置

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

乱糟糟的

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

串口

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

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

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

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

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

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

Keli还行,补全

keli这个阅读功能也行

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

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

然后就是控制对应的位

就这样的,就可以使用了

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

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

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

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

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

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

可以更少的硬件

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

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

下篇继续

云深之无迹
纵是相见,亦如不见,潇湘泪雨,执念何苦。
 最新文章