工具/软件: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