请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320F28379D 使用 TMS320F28379D 通过特定的电位器电压打开和关闭 LED。
我将如何读取电压值并写入打开和关闭 LED 的条件。 可以帮帮我吗?
//ADC
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "F2837xD_device.h"
#include "F28x_Project.h"
#include "F2837xD_Examples.h"
#include "driverlib.h"
#include "device.h"
#define ADC_RESOLUTION 12
uint16_t adcAResult2;
void initADCs(void);
void initADCSOCs(void);
void GPIO_init();
void PinMux_init();
void initEPWM();
//
// Main
//
void main(void)
{
adcAResult2= 0;
Device_init();
Device_initGPIO();
PinMux_init();
Interrupt_initModule();
Interrupt_initVectorTable();
initADCs();
initADCSOCs();
EINT;
ERTM;
IER = 0x0000; //interrupt enable register
IFR = 0x0000; //interrupt flag register
SysCtl_disablePeripheral(SYSCTL_PERIPH_CLK_TBCLKSYNC);
SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_TBCLKSYNC);
while(1)
{
ADC_forceSOC(ADCA_BASE, ADC_SOC_NUMBER0);
while(ADC_getInterruptStatus(ADCA_BASE, ADC_INT_NUMBER1) == false)
{
}
ADC_clearInterruptStatus(ADCA_BASE, ADC_INT_NUMBER1);
adcAResult2 = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER0);
initEPWM();
DEVICE_DELAY_US(10000);
}
}
void initEPWM()
{
EPwm1Regs.TBPRD = 4000; // Set timer period 801 TBCLKs
EPwm1Regs.TBPHS.bit.TBPHS = 0x0000; // Phase is 0
EPwm1Regs.TBCTR = 0x0000;
EPwm1Regs.CMPA.bit.CMPA = adcAResult2;
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;
EPwm1Regs.AQCTLA.bit.CAU = AQ_SET;
EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR;
}
void PinMux_init()
{
EALLOW;
GpioCtrlRegs.GPAMUX1.all=0;
GpioCtrlRegs.GPAMUX1.bit.GPIO0=1;
EDIS;
}
void initADCs(void)
{
EALLOW;
ADC_setPrescaler(ADCA_BASE, ADC_CLK_DIV_4_0);
#if(ADC_RESOLUTION == 12)
ADC_setMode(ADCA_BASE, ADC_RESOLUTION_12BIT, ADC_MODE_SINGLE_ENDED);
#elif(ADC_RESOLUTION == 16)
ADC_setMode(ADCA_BASE, ADC_RESOLUTION_16BIT, ADC_MODE_DIFFERENTIAL);
#endif
ADC_setInterruptPulseMode(ADCA_BASE, ADC_PULSE_END_OF_CONV);
ADC_enableConverter(ADCA_BASE);
DEVICE_DELAY_US(1000);
EDIS;
}
void initADCSOCs(void)
{
#if(ADC_RESOLUTION == 12)
ADC_setupSOC(ADCA_BASE, ADC_SOC_NUMBER0, ADC_TRIGGER_SW_ONLY,
ADC_CH_ADCIN0, 15);
#elif(ADC_RESOLUTION == 16)
ADC_setupSOC(ADCA_BASE, ADC_SOC_NUMBER0, ADC_TRIGGER_SW_ONLY,
ADC_CH_ADCIN0, 64);
#endif
ADC_setInterruptSource(ADCA_BASE, ADC_INT_NUMBER1, ADC_SOC_NUMBER0);
ADC_enableInterrupt(ADCA_BASE, ADC_INT_NUMBER1);
ADC_clearInterruptStatus(ADCA_BASE, ADC_INT_NUMBER1);
}