工具/软件:Code Composer Studio
尊敬的所有人:
因此、我已经准备好了两个示例代码、这里是:
#include "driverlib.h"
uint16_t results[4]; // SD24转换和温度结果
//结果[0]=原始 SD24结果
//结果[1]=以 K 为单位的温度
//结果[2]= C 中的温度
// results[3]= F
uint8_t Flag_1中的 temp = 0; 针对 ADC
unsigned int Flag_2 = 0的//Flag 1; //针对计时
器#define TIMER_PERIOD 10
的标志2 unsigned int TIMER_PERIOD_PERIOD = 0;
void main (void){
//停止 WDT
WDT_HOLD (WDT_BASE);
//内部参考
SD24_init (SD24_BASE、SD24_REF_INTERNAL);
//Ch0单模式内部温度传感器
SD24_initConvertterAdvancedParam param ={0};
param.converter = SD24_converter_0;
param.conversionMode = SD24_single_mode;
param.groupEnable = SD24_not _grouped;
param.inputChannel = SD24_INPUT_CH_TEMRATURE;
param.dataFormat = SD24_data_format_2COMPLEMENT;
param.interruptDelay = SD24_Four_SAMPLE_INTERRUPT;
param.oversample.Ratio = SD24_oversample_256;
param.gain = SD24_gain_1;
SD24_initConverterAdvanced (SD24_BASE、¶m);
SD24_enableInterrupt (SD24_BASE、SD24_converter_0、SD24_converter_interrupt);
//对于1.2V 基准电压稳定、延迟~200us
_delay_cycles (3200);
//将 P2.1设置为输出引脚以驱动 LED
GPIO_setAsOutputPin (GPIO_PORT_P2、GPIO_PIN1);
// Timer_A 设置
Timer_A_initUpModeParam upModeConfig =
{
Timer_A_CLOCKSOURCE_SMCLK、 // SMCLK 时钟源
Timer_A_CLOCKSOURCE_divider _1、 // SMCLK/8 = 256kHz
Timer_Period、 // 250ms
Timer_A_TAIE_INTERRUPT_DISABLE、 //禁用溢出 ISR
Timer_A_CCIE_CCR0_INTERRUPT_ENABLE、//启用 CCR0中断
Timer_A_do 清除 //清除计数器
};
while (1){
//开始转换
SD24_startConverterConversion (SD24_BASE、SD24_converter_0);
//输入带中断的 LPM0
//_bis_SR_register (LPM0_bits | GIE);
//用于调试器
__no_operation();
如果(Flag_1 ==1)//中断例程完成
{
Flag_2 = 1;
GPIO_setOutputLowOnPin (GPIO_PORT_P2、GPIO_PIN1);//打开 LED
//将计时器配置为使用 ACLK 并在计时器到达 CCR0时中断
Timer_A_initUpMode (timer_A0_BASE、&upModeConfig);
Timer_A_startCounter (timer_A0_BASE、timer_A_up_mode);
//计算不同刻度的温度
results[1]=(无符号长整型) results[0]* 1200)/70711;
results[2]= results[1]- 273;
结果[3]=(结果[2]* 9/5)+ 32;
FLAG_2 = 0;
_DELAY_CYCLES (1000);
__no_operation();
Timer_Period_Period = 0;
GPIO_setOutputHighOnPin (GPIO_PORT_P2、GPIO_PIN1);//关闭 LED
FLAG_1 = 0;
//Flag_2 = 0;
}
_bis_SR_register (LPM0_bits | GIE);
//GPIO_setOutputHighOnPin (GPIO_PORT_P2、GPIO_PIN1);
//计算不同刻度的温度
//results[1]=(无符号长整型) results[0]* 1200)/70711;
//results[2]= results[1]- 273;
//results[3]=(results[2]* 9/5)+ 32;
__no_operation(); //在此设置断点
}
}//------------------
//中断函数
///-------------------------------------------------------
//ADC
#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector=SD24_vector
__interrupt void SD24_ISR (void){
#elif defined (__GNU__)
void __attribute__((interrupt (SD24_vector)))) SD24_ISR
(void))不支持!
#endif
开关(__evo_in_range (SD24IV、SD24IV_SD24MEM3))
{
案例 SD24IV_NONE:break;
案例 SD24IV_SD24OVIFG:中断;
案例 SD24IV_SD24MEM0:
//保存 CH0结果(清除 IFG)
结果[0]= SD24_getHighWordResults (SD24_BASE、SD24_converter_0);
中断;
案例 SD24IV_SD24MEM1:中断;
案例 SD24IV_SD24MEM2:中断;
案例 SD24IV_SD24MEM3:中断;
默认值:break;
}
FLAG_1 = 1;
//__ BIC_SR_REGISTER_ON_EXIT (LPM0_Bits); //从 LPM0唤醒}//Timer_A--><!--kadov_tag{</spaces>}--><!--kadov_tag{</spaces>}--><!--kadov_tag{</spaces>}}-->
#if defined (__TI_Compiler_version__)|| defined (__IAR_systems_icc_)
#pragma vector=TIMER0_A0_vector
__interrupt
#elif defined (__GNU__)
__attribute__(interrupt (TIMER0_A0_vector)))
#endif
ISR (void TA0_void)
// TIMER0_A0_Vector 仅包含 CCR0中断
//无需检查/清除中断标志,切换 LED 以显示达到的 ISR
//GPIO_toggleOutputOnPin (GPIO_PORT_P1、GPIO_PIN4);
如果(Flag_2 = 1)
{
Timer_Period_Period = Timer_Period_Period +1;
}
}
目的是对将无符号长整型转换为开尔文、凯尔西斯和华氏的计算操作进行计时、并反复计时(以实现一致性)。
Flag_1会检查新的 ADC 数据是否可用。
Flag_2是停止 TIMER_PERIOD_PERIOD 计数器。
因此、所花费的时间应为= 61.04 (ns)* 10 (timer_period)* timer_period_period。
我很确定、这是处理此问题的错误方法、因此我们希望获得任何帮助、我将断点放在哪里以读取 TIMER_PERIOD_PERIOD 值?
谢谢你。
此致、
Neal