登录/注册

tm4c adc交替采样

更多

在TM4C微控制器上实现ADC交替采样,可以通过以下步骤进行配置。交替采样通常利用多个ADC模块(如ADC0和ADC1)或同一ADC模块的多个序列器交替工作,以提高采样率或减少通道间干扰。以下是具体实现方法:


硬件配置前提

  1. 确认ADC模块:TM4C部分型号支持多个ADC模块(如ADC0和ADC1),需确认芯片型号是否支持。
  2. 通道分配:确定需要交替采样的通道(相同或不同通道)。

配置步骤

1. 初始化ADC模块

使用TivaWare库初始化两个ADC模块(以ADC0和ADC1为例):

#include "tm4c123gh6pm.h"
#include <stdint.h>

void ADC_Init(void) {
    // 启用ADC0和ADC1时钟
    SYSCTL_RCGCADC_R |= SYSCTL_RCGCADC_R0 | SYSCTL_RCGCADC_R1;
    while ((SYSCTL_PRADC_R & (SYSCTL_PRADC_R0 | SYSCTL_PRADC_R1)) == 0) {} // 等待时钟就绪

    // 配置ADC0和ADC1的采样序列器(以序列器3为例,最高优先级)
    ADC0_ACTSS_R &= ~ADC_ACTSS_ASEN3; // 禁用序列器3
    ADC1_ACTSS_R &= ~ADC_ACTSS_ASEN3;

    // 配置ADC0序列器3:单次采样,通道0,使用定时器触发
    ADC0_SSCTL3_R = ADC_SSCTL3_IE0 | ADC_SSCTL3_END0; // 启用中断和结束标志
    ADC0_SSMUX3_R = 0; // 选择通道0
    ADC0_EMUX_R = (ADC0_EMUX_R & ~ADC_EMUX_EM3_M) | ADC_EMUX_EM3_TIMER; // 定时器触发

    // 同理配置ADC1序列器3
    ADC1_SSCTL3_R = ADC_SSCTL3_IE0 | ADC_SSCTL3_END0;
    ADC1_SSMUX3_R = 0;
    ADC1_EMUX_R = (ADC1_EMUX_R & ~ADC_EMUX_EM3_M) | ADC_EMUX_EM3_TIMER;

    // 启用ADC序列器
    ADC0_ACTSS_R |= ADC_ACTSS_ASEN3;
    ADC1_ACTSS_R |= ADC_ACTSS_ASEN3;
}

2. 配置定时器触发

使用定时器(如Timer0)周期性触发ADC转换,交替启动ADC0和ADC1:

void Timer_Init(void) {
    SYSCTL_RCGCTIMER_R |= SYSCTL_RCGCTIMER_R0; // 启用Timer0时钟
    TIMER0_CTL_R = 0; // 禁用Timer0
    TIMER0_CFG_R = TIMER_CFG_32_BIT_TIMER; // 32位模式
    TIMER0_TAMR_R = TIMER_TAMR_TAMR_PERIODIC; // 周期模式
    TIMER0_TAILR_R = 80000000 / 1000; // 1 kHz触发频率(假设系统时钟80MHz)
    TIMER0_CTL_R |= TIMER_CTL_TAEN; // 启用Timer0
}

3. 交替触发逻辑

在定时器中断中交替触发ADC0和ADC1:

volatile uint8_t adc_toggle = 0;

void Timer0A_Handler(void) {
    TIMER0_ICR_R = TIMER_ICR_TATOCINT; // 清除中断标志

    if (adc_toggle) {
        ADC1_PSSI_R |= ADC_PSSI_SS3; // 触发ADC1采样
    } else {
        ADC0_PSSI_R |= ADC_PSSI_SS3; // 触发ADC0采样
    }
    adc_toggle ^= 1; // 切换ADC模块
}

4. 中断处理数据

在ADC转换完成的中断中读取数据:

volatile uint16_t adc0_value, adc1_value;

void ADC0Seq3_Handler(void) {
    ADC0_ISC_R = ADC_ISC_IN3; // 清除中断标志
    adc0_value = ADC0_SSFIFO3_R; // 读取ADC0数据
}

void ADC1Seq3_Handler(void) {
    ADC1_ISC_R = ADC_ISC_IN3; // 清除中断标志
    adc1_value = ADC1_SSFIFO3_R; // 读取ADC1数据
}

5. 启用中断

配置中断优先级并启用:

void Interrupt_Init(void) {
    // 配置ADC0序列器3中断
    NVIC_EN0_R |= 1 << (INT_ADC0SS3 - 16);
    ADC0_IM_R |= ADC_IM_MASK3;

    // 配置ADC1序列器3中断
    NVIC_EN1_R |= 1 << (INT_ADC1SS3 - 32);
    ADC1_IM_R |= ADC_IM_MASK3;

    // 配置Timer0中断
    NVIC_EN0_R |= 1 << (INT_TIMER0A - 16);
}

关键点


验证与优化

通过上述步骤,可在TM4C上实现高效的ADC交替采样,适用于多通道高速数据采集场景。

MSP430 MSP432 TM4C STM32单片机相关资料分享

MSP430 MSP432 TM4C STM32 单片机12864 数字华容道 游戏

2022-02-15 06:47:51

MSP430 MSP432 TM4C STM32 单片机相关资料推荐

MSP430 MSP432 TM4C STM32 单片机12864 黑白棋 游戏

2022-02-15 06:01:21

TI的TM4C单片机调试资料和相关开发资料分享

TI的TM4C单片机调试资料和相关开发资料,如有需求可以私聊给

2022-01-13 06:50:25

TM4C MCU上用FreeRTOS开发通用应用程序应用说明

电子发烧友网站提供《在TM4C MCU上用FreeRTOS开发通用应用程序应用说明.pdf》资料免费下载

资料下载 vinww特烦恼 2024-09-11 14:15:35

TM4C MCU上使用FreeRTOS开发高级应用

电子发烧友网站提供《在TM4C MCU上使用FreeRTOS开发高级应用.pdf》资料免费下载

资料下载 张健 2024-09-06 10:17:24

利用TM4C123G单片机读取并处理MPU6050初始数据

利用TM4C硬件IIC读取MPU6050角加速度及加速度数据并进行初步处理计算,粗略得出芯片当前姿态角度。

资料下载 张涛 2021-11-24 20:21:06

STC12C4052ADSTC单片机ADC采样C程序

STC12C4052ADSTC单片机ADC采样C程序(罗马仕电源技术偏执

资料下载 佚名 2021-09-18 10:27:42

基于数字后处理算法的并行交替采样ADC系统

的基础上,研制了8bit4-Gsps并行交替采样ADC系统。该系统中

资料下载 李鸿洋 2021-09-17 12:22:38

如何利用TM4C硬件IIC读取MPU6050角加速度

利用TM4C硬件IIC读取MPU6050角加速度及加速度数据并进行初步处理计算,粗略得出芯片当前姿态角度。

2021-12-07 11:53:41

STM32F407 3ADC交替采样是如何实现7.2MSPS采样率的呢

STM32F407 3ADC交替采样是如何实现7.2MSPS采样率的呢?

2021-10-22 09:30:09

基于TM4C主控的匿名拓空者飞控

准备电赛,简单写一下匿名飞控的分析基于TM4C主控的匿名拓空者飞控,介绍见匿名科创–匿名拓空者PRO—TI版全开源飞控使用入门—TM4C123文章目录一、简介二、PWM信号模式1、介绍2、硬件连接三

2021-08-06 06:57:01

用HAL库实现F407 3ADC交替采样

想用CUBE配置然后用HAL库实现F407 3ADC交替采样实现7.2MSPS采样

2021-08-05 08:11:41

电脑发送字符串后,tm4c并没用回复是为什么?

根据已有电路(ch340连接了uart2的两个口),写了一段程序,想实现每次电脑向tm4c发送字符串时,tm4c向电脑发送相应字符串程序如下,但是电脑发送字符串后,

2020-08-25 06:37:27

请问TM4C将jtag口锁定后就能起到保护flash代码的作用吗?

TM4C将jtag口锁定后解锁,就会将flash全部擦除。而在bootloader中只看到编程的命令,没有读取的命令。那这样的话是否将jtag口锁定后是否就能起到保护flash代码的作用,而不需要使用MPU。因为MPU部分没做过,看文档也是看得云里雾里的。

2019-09-09 07:43:19

新出的TM4C是在lm4f的基础上修改bug还是重新设计的?

新出的TM4C是在lm4f的基础上修改bug,还是又重新设计的?如果用tm4c的pwm模拟dac精度大概能到几位?

2019-09-04 06:38:33
7天热门专题 换一换
相关标签