MSP430学习笔记(五)丨12位模数转换器ADC12_A_msp430adc12怎么使用(1)

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

如果你需要这些资料,可以戳这里获取

// 清除选定的ADC12_A中断标志
void ADC12_A_clearInterrupt(uint16_t baseAddress, uint16_t memoryInterruptFlagMask);

// 返回选定的存储器中断标志的状态
uint16_t ADC12_A_getInterruptStatus(uint16_t baseAddress, uint16_t memoryInterruptFlagMask);

// 启用/开始模拟-数字转换
void ADC12_A_startConversion(uint16_t baseAddress, uint16_t startingMemoryBufferIndex, uint8_t conversionSequenceModeSelect);

// 禁用ADC将不再转换任何信号
void ADC12_A_disableConversions(uint16_t baseAddress, bool preempt);

// 获取指定存储器缓冲区的结果
uint16_t ADC12_A_getResults(uint16_t baseAddress, uint8_t memoryBufferIndex);

// 用于更改转换数据的分辨率
void ADC12_A_setResolution(uint16_t baseAddress, uint8_t resolutionSelect);

// 用于反转或取消反转采样/保持信号
void ADC12_A_setSampleHoldSignalInversion(uint16_t baseAddress, uint16_t invertedSignal);

// 设置转换数据的读回格式
void ADC12_A_setDataReadBackFormat(uint16_t baseAddress, uint8_t readBackFormat);

// 启用参考缓冲区的突发能力
void ADC12_A_enableReferenceBurst(uint16_t baseAddress);

// 禁用参考缓冲区的突发能力
void ADC12_A_disableReferenceBurst(uint16_t baseAddress);

// 设置参考缓冲区的采样率
void ADC12_A_setReferenceBufferSamplingRate(uint16_t baseAddress, uint8_t samplingRateSelect);

// 返回DMA模块的指定存储器缓冲区的地址
uint32_t ADC12_A_getMemoryAddressForDMA(uint16_t baseAddress, uint8_t memoryIndex);

// 返回ADC12_A核心的忙状态
uint16_t ADC12_A_isBusy(uint16_t baseAddress);


  ADC12\_A API被分成三组函数:初始化和转换函数,处理中断的函数以及处理ADC12\_A的辅助功能的函数。


  ADC12\_A初始化和转换函数包括:


* `ADC12_A_init()`:初始化ADC12\_A模块。
* `ADC12_A_configureMemory()`:配置内存缓冲区的信号源和参考电压。
* `ADC12_A_setupSamplingTimer()`:设置采样计时器。
* `ADC12_A_disableSamplingTimer()`:禁用采样计时器。
* `ADC12_A_startConversion()`:开始转换。
* `ADC12_A_disableConversions()`:禁用转换。
* `ADC12_A_readResults()`:读取转换结果。
* `ADC12_A_isBusy()`:检查ADC12\_A是否正在进行转换。


  ADC12\_A中断由以下函数处理:


* `ADC12_A_enableInterrupt()`:使能ADC12\_A中断。
* `ADC12_A_disableInterrupt()`:禁用ADC12\_A中断。
* `ADC12_A_clearInterrupt()`:清除ADC12\_A中断标志。
* `ADC12_A_getInterruptStatus()`:获取ADC12\_A中断状态。


  ADC12\_A的辅助功能由以下函数处理:


* `ADC12_A_setResolution()`:设置ADC12\_A的分辨率。
* `ADC12_A_setSampleHoldSignalInversion()`:设置采样/保持信号的反相。
* `ADC12_A_setDataReadBackFormat()`:设置数据读回格式。
* `ADC12_A_enableReferenceBurst()`:使能参考电压突发模式。
* `ADC12_A_disableReferenceBurst()`:禁用参考电压突发模式。
* `ADC12_A_setReferenceBufferSamplingRate()`:设置参考电压缓冲区采样率。
* `ADC12_A_getMemoryAddressForDMA()`:获取DMA的内存地址。
* `ADC12_A_enable()`:使能ADC12\_A模块。
* `ADC12_A_disable()`:禁用ADC12\_A模块。


## 三、代码示例


### 3.1 单通道转换


* `ADC_12.h`



/*
* ADC_12.h
*
* Created on: 2023年7月20日
* Author: Include everything
*/

#ifndef HARDWARE_ADC_12_H_
#define HARDWARE_ADC_12_H_

void ADC12_Init(void);

#endif /* HARDWARE_ADC_12_H_ */


* `ADC_12.c`



/*
* ADC_12.c
*
* Created on: 2023年7月20日
* Author: Include everything
*/

#include <driverlib.h>

void ADC12_Init(void)
{
GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P6, GPIO_PIN0); // A0

// ADC12\_A初始化
ADC12\_A\_init(ADC12_A_BASE,
             ADC12_A_SAMPLEHOLDSOURCE_SC,
             ADC12_A_CLOCKSOURCE_ADC12OSC,
             ADC12_A_CLOCKDIVIDER_1);

// 设置采样定时器采样并保持16个时钟周期
ADC12\_A\_setupSamplingTimer(ADC12_A_BASE,
                           ADC12_A_CYCLEHOLD_64_CYCLES,
                           ADC12_A_CYCLEHOLD_4_CYCLES,
                           ADC12_A_MULTIPLESAMPLESENABLE);

ADC12\_A\_enable(ADC12_A_BASE);

ADC12_A_configureMemoryParam ADC_12_configureMemoryInitStructure;
ADC_12_configureMemoryInitStructure.endOfSequence = ADC12_A_NOTENDOFSEQUENCE;   // 指定的转换结果存储是否为序列的结尾
ADC_12_configureMemoryInitStructure.inputSourceSelect = ADC12_A_INPUT_A0;
ADC_12_configureMemoryInitStructure.memoryBufferControlIndex = ADC12_A_MEMORY_0;
ADC_12_configureMemoryInitStructure.negativeRefVoltageSourceSelect = ADC12_A_VREFNEG_AVSS;
ADC_12_configureMemoryInitStructure.positiveRefVoltageSourceSelect = ADC12_A_VREFPOS_AVCC;
ADC12\_A\_configureMemory(ADC12_A_BASE, &ADC_12_configureMemoryInitStructure);

ADC12\_A\_clearInterrupt(ADC12_A_BASE, ADC12IFG0);
ADC12\_A\_enableInterrupt(ADC12_A_BASE, ADC12IE0);

}


* `main.c`



#include <driverlib.h>
#include “OLED.h”
#include “System_CLK.h”
#include “Delay.h”
#include “Key.h”
#include “ADC_12.h”

uint16_t MeasureNum;

/**
* main.c
*/
int main(void)
{
WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer

SystemClock\_Init();
Key\_Init();
OLED\_Init();
ADC12\_Init();

OLED\_ShowString(1, 1, "ADC\_12 A0(P6.0)");
OLED\_ShowString(2, 1, "Result:");

ADC12\_A\_startConversion(ADC12_A_BASE, ADC12_A_MEMORY_0, ADC12_A_REPEATED_SINGLECHANNEL);

while (1)
{
    OLED\_ShowNum(2, 8, MeasureNum, 4);
}

}

// ADC12_A中断函数模板
#pragma vector=ADC12_VECTOR
__interrupt void ADC_12_ISR(void)

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
img
img

如果你需要这些资料,可以戳这里获取

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

如果你需要这些资料,可以戳这里获取

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 23
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值