This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/MSP430FR6989:开关按钮用于4个值

Guru**** 2539500 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/584035/ccs-msp430fr6989-switch-button-for-4-values

部件号:MSP430FR6989

工具/软件:Code Composer Studio

大家好,我正在我学校的一个项目中工作,这个项目是要制作一 个有4个通道的数据采集(电压)程序。 这是我的代码...我不知道如何配置以切换值,因为有人可以帮助我。

#include <MSP430-h>
#include <string.h>
#include <stdlib.h>
#include "driverlib.h"
#include "hal_lcd.h"

#define startup模式 0

volatile unsigned char mode = startup_mode;//

rezultate ADC - matrice cu 10 masuratori
int ADC_results [10][4];//
index ADC în matricea ADC_resetts; initializare cu 0

int index_adc =0;
volatile unsigned short usiButton1 =0;


int main(void){
int j,k;
int ind_adc;
char disp_adc [50];
字符样本1_ADC [5];
字符样本2_ADC [5];
字符样本3_ADC [5];
字符样本4_ADC [5];

WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
(j= 0;j<10;j++)
(k=0;j<4;j++)
ADC_Results [j][k]= 0;


/*禁用GPIO开机默认高阻抗模式以激活
*以前配置的端口设置
*/

ADC12_B_initParam initParam ={0};
initParam.sampleHoldSignalSourceSelect = ADC12_B_SAMPLEHOLDSOURCE_SC;
initParam.clockSourceSelect = ADC12_B_CLOCKSOURCE_ADC12OSC;
initParam.clockSourceDivider = ADC12_B_CLOCKDIVIDER_1;
initParam.clockSourcePrediver= ADC12_B_CLOCKPREDIER__1;
initParam.internalChannelMap = ADC12_B_NOINTCH;
ADC12_B_INIT(ADC12_B_base,&initParam);


ADC12_B_setupSamplingTimer(ADC12_B_base,
ADC12_B_CYCLEHOLD_64_CYCLES,
ADC12_B_CYCLEHOLD_64_CYCLES,
ADC12_B_MULTIPLESAMPLESENABLE);

//启用ADC12 B模块
ADC12_B_ENABLE (ADC12_B_BASE);

ADC12_B_enableInterrupt (ADC12_B_BASE,ADC12_B_IE0,0,0);
ADC12_B_enableInterrupt (ADC12_B_BASE,ADC12_B_IE1,0,0);
ADC12_B_enableInterrupt (ADC12_B_BASE,ADC12_B_IE2,0,0);
ADC12_B_enableInterrupt (ADC12_B_BASE,ADC12_B_IE3,0,0);

ADC12_B_configureMemoryParam配置MemoryParam ={0};
configureMemoryParam.memoryBufferControlIndex = ADC12_B_memory_0;
configureMemoryParam.inputSourceSelect = ADC12_B_INPUT_A4;
配置内存Param.refVoltageSourceSelect = ADC12_B_VREFPOS_AVCC_VREFNEG_VSS;
configureMemoryParam.endOfSequence = ADC12_B_NOTENDOFENCE;
配置内存Param.windowComparatorSelect = ADC12_B_window_Comparer_disable;
配置内存Param.DifferalModeSelect = ADC12_B_Different_mode_disable;
ADC12_B_configureMemory (ADC12_B_BASE,&configureMemoryParam);

配置内存Param.MemoryBufferControlIndex = ADC12_B_MEMORY_1;
configureMemoryParam.inputSourceSelect = ADC12_B_INPUT_A5;
配置内存Param.refVoltageSourceSelect = ADC12_B_VREFPOS_AVCC_VREFNEG_VSS;
configureMemoryParam.endOfSequence = ADC12_B_NOTENDOFENCE;
配置内存Param.windowComparatorSelect = ADC12_B_window_Comparer_disable;
配置内存Param.DifferalModeSelect = ADC12_B_Different_mode_disable;
ADC12_B_configureMemory (ADC12_B_BASE,&configureMemoryParam);

配置内存Param.MemoryBufferControlIndex = ADC12_B_MEMORY_2;
configureMemoryParam.inputSourceSelect = ADC12_B_Input_A6;
配置内存Param.refVoltageSourceSelect = ADC12_B_VREFPOS_AVCC_VREFNEG_VSS;
configureMemoryParam.endOfSequence = ADC12_B_NOTENDOFENCE;
配置内存Param.windowComparatorSelect = ADC12_B_window_Comparer_disable;
配置内存Param.DifferalModeSelect = ADC12_B_Different_mode_disable;
ADC12_B_configureMemory (ADC12_B_BASE,&configureMemoryParam);

configureMemoryParam.memoryBufferControlIndex = ADC12_B_memory_3;
configureMemoryParam.inputSourceSelect = ADC12_B_INPUT_A7;
配置内存Param.refVoltageSourceSelect = ADC12_B_VREFPOS_AVCC_VREFNEG_VSS;
configureMemoryParam.endOfSequence = ADC12_B_NOTENDOFENCE;
配置内存Param.windowComparatorSelect = ADC12_B_window_Comparer_disable;
配置内存Param.DifferalModeSelect = ADC12_B_Different_mode_disable;
ADC12_B_configureMemory (ADC12_B_BASE,&configureMemoryParam);

ADC12_B_startConversion(ADC12_B_base,
ADC12_B_MEMORY_0,
ADC12_B_REALITED_SEQOFCHANNELS);


Init_LCD ();
pm_unlockLPM5 ();

__BIC_SR_REGISTER (GIE);
__bis_sr_register (GIE);


同时(1)
{
__BIC_SR_REGISTER (GIE);

IF (index_adc == 0)
IND_ADC= 9;
否则
IND_ADC= index_ADC-1;

ltoa (((long) ADC_results[ind_ADC][0],sample1_ADC);
ltoa (((long) ADC_results[ind_ADC][1],sample2_ADC);
ltoa (((long) ADC_results[ind_ADC][2],sample3_adc);
ltoa (((long) ADC_results[ind_ADC][3],sample4_adc);

strcpy (disp_adc,"1");
strcat (disp_adc,sample1_adc);
DisplayScrollText(disp_adc);

strcpy (disp_adc,"2");
strcat (disp_adc,sample2_adc);
DisplayScrollText(disp_adc);

strcpy (disp_adc,"3");
strcat (disp_adc,sample3_adc);
DisplayScrollText(disp_adc);

strcpy (disp_adc,"4 ");
strcat (disp_adc,sample4_adc);
DisplayScrollText(disp_adc);
__bis_sr_register (GIE);

__DELAY周期(20万);

}



}//

Asta trebuie lasata
asa // se poate modificat codul corepunzator
//内部超大器端口ADC12MEM0 (ADC12_B_MEMORY_0) pana la ADC12MEM3
// cele 4 locatii de mem asociate canalelor ADC 4,5,6, 7

#if defined(__TI_Compiler_version__)|| defined (__IAR_SYSTEMS _ICC__)
#pragma vector = ADC12_vector
__interrupt void ADC12_ISR(void)
#Elif defined(__GNUC__)
void __attribute__(interrupt (ADC12_vector)) ADC12_ISR(vector))
#elle!

#endif
{
switch (__偶 数_in_range (ADC12IV,ADC12IV_ADC12RDYIFG))
{
案例ADC12IV_NONE: 中断; //矢量0:无中断
CASE ADC12IV_ADC12OVIFG:中断; //矢量2:ADC12MEMx溢出
CASE ADC12IV_ADC12TOVIFG:中断; //矢量4:转换时间溢出
CASE ADC12IV_ADC12HIIFG:中断; //向量6:ADC12BHI
CASE ADC12IV_ADC12LOIFG:中断; //矢量8:ADC12BLO
CASE ADC12IV_ADC12INIFG:中断; //矢量10:ADC12BIN

Case ADC12IV_ADC12IFG0: //向量12:ADC12MEM0中断
ADC12_B_clearInterrupt (ADC12_B_BASE,0,ADC12_B_IFG0);
index_adc++;
IF (index_adc == 10) //
index_adc=0;
// index_ad=公式penturu convise.
ADC_Results [index_ADC][0]= ADC12MEM0;
// __BIC_SR_REGISTER_ON_EXIT (LPM0_bits); //退出活动CPU
中断; //从0 (SR)清除CPUOFF位
CASE ADC12IV_ADC12IFG1: //矢量14:ADC12MEM1
ADC12_B_clearInterrupt (ADC12_B_BASE,0,ADC12_B_IFG1);
ADC_Results [index_ADC][1]= ADC12MEM1;
中断;
CASE ADC12IV_ADC12IFG2: //矢量16:ADC12MEM2
ADC12_B_clearInterrupt (ADC12_B_BASE,0,ADC12_B_IFG2);
ADC_Results [index_ADC][2]= ADC12MEM2;
中断;

Case ADC12IV_ADC12IFG3: //向量18:ADC12MEM3
ADC12_B_clearInterrupt (ADC12_B_BASE,0,ADC12_B_IFG3);
ADC_Results [index_ADC][3]= ADC12MEM3;
中断;


默认值:break;
}
}


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Givreada,

    我看不到将各自的GPIO设置为ADC应用的三元模块函数的功能。 您还应该将A7设置为序列的结尾,并且除了最后一个ADC12MEMx之外,不为每个ADC12MEMx启用中断。 INIT_LCD和PMM_UNLOCKLPM5也应该在开始转换之前出现,我不知道为什么连续三次设置GIE。 您还必须轮询ADCIFG或输入LPM,以防止在正确采样信道,输入ISR并将值存储到内存之前,While循环继续。 请进一步参考您找到的代码示例或F5xx/6xx DriverLib软件包中的ADC12_A_EX7_sequence.c示例。

    此致,
    Ryan