您好,
我正在使用 自己 的MSP432P401M板 。 ADC具有3.3V的外部参考电压,我可以成功地对电压进行采样。 根据AVcc.ADC14内部振荡器乘以采样(16x)和转换,在A1上制作单个样本。 计时器32 (模块0)以32位,自由运行和定期模式设置。计时器计数加载时的初始值为0xFFFFFF。 计时器中断触发,ISR被执行。 在ISR内 ,软件将ADC14_CTL0_SC设置为开始采样和 转换- ADC14_CTL0在EOC时自动清除并增加计数器n的值。它只会清除中断标志并返回到主应用程序并进入while循环。
1)当此代码为DEBUG时, 计数器m和n的值为增量,但响应非常慢。
这是我的代码:-
#include <stdint.h>
无符号int I;
无符号int j;
unsigned int l=1;
//用于调试的计数器
无符号int m=0;
无符号int n=0;
//*********************************************************************************************************
//主代码
内部主(无效)
{
//停止看门狗计时器
WDT_A->CTL = WDT_A_CTL_PW | WDT_A_CTL_HOLD;
// GPIO设置
P5->SEL1 |= BIT4;//为ADC配置WFP 5.4
p5->SEL0 |= BIT4;
//未使用的针脚设置
P10->DIR &=~(BIT0 + BIT1 + BIT2 + BIT3);//将P10设置为输入方向
P10->REN || BIT0 + BIT1 + BIT2 + BIT3;//在P10上启用上拉/下拉电阻器
P10->out &=~(BIT0 + BIT1 + BIT2 + BIT3);//将P10电阻设为下拉
P1->DIR &=~(BIT1 + BIT4 + BIT5 + BIT6 + BIT7);
P1->REN || BIT1 + BIT4 + BIT5 + BIT6 + BIT7;
P1->out &=~(BIT1 + BIT4 + BIT5 + BIT6 + BIT7);
P2->DIR &=~(BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5 + BIT6 + BIT7);
P2->REN || BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5 + BIT6 + BIT7;
P2->out &=~(BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5 + BIT6 + BIT7);
P8->DIR &= BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5 + BIT6 + BIT7;
P8->REN || BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5 + BIT6 + BIT7;
P8->out &=~(BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5 + BIT6 + BIT7);
P9->DIR &=~(BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5);
P9->REN || BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5;
P9->out &=~(BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5);
P6->DIR &=~(BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5 + BIT6 + BIT7);
P6->REN || BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5 + BIT6 + BIT7;
p6->out &=~(BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5 + BIT6 + BIT7);
P4->DIR &=~(BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5 + BIT6 + BIT7);
P4->REN || BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5 + BIT6 + BIT7;
P4->out &=~(BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5 + BIT6 + BIT7);
P5->DIR &=~(BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5 + BIT6 + BIT7);
P5->REN || BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5 + BIT6 + BIT7;
p5->out &=~(BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5 + BIT6 + BIT7);
P7->DIR &=~(BIT0 + BIT1 + BIT2 + BIT3);
P7->REN || BIT0 + BIT1 + BIT2 + BIT3;
p7->out &=~(BIT0 + BIT1 + BIT2 + BIT3);
//ADC设置
ADC14->CTL0 = ADC14_CTL0_SHT0_2 | ADC14_CTL0_SHP | ADC14_CTL0_ON;//采样时间,S&H = 16,ADC14 ON
//ADC14->CTL1 = ADC14_CTL1_RES_2;//使用采样计时器,12位转换结果
ADC14->CTL1 = ADC14_CTL1_RES_3;//使用采样计时器,14位转换结果
ADC14->MCTL[0]|= ADC14_MCTLN_Inch_1;// A1 ADC输入选择;Vref=AVCC
// ADC14->IER0 |= ADC14_IER0_IE0;//启用ADC连接完全中断
同时(1)
{
如果(l == 1)
{
// Timer32设置为定期,自由运行,32位,无预缩放
TIMER32_1->CONTROL = TIMER32_CONTROL_SIZE | TIMER32_CONTROL_OneShot;
//加载计时器32计数器,带初始值
TIMER32_1->load= 0xFFFFFF;
//在NVIC中启用Timer32中断
__enable_IRQ();
NVIC->ISER[0]=1<<(T32_INT1_IRQn)和31);
//从ISR退出时禁用睡眠
SCB->SCR &=~SCB_SCR_SLEEPONEXIT_MSK;
//启动Timer32并启用中断
TIMER32_1->CONTROL |= TIMER32_CONTROL_ENABLE | TIMER32_CONTROL_IE;
//输入LPM0并等待定时器中断唤醒
//__sleep();
//__no_operation();
M++;
如果(m>5万)
{
M=0;
}
l=0;
}
}
}
void T32_INT1_IRQHandler (void)
{
// p1->out ^= BIT0;//切换WFP 1.0 LED
//开始采样/转换
ADC14->CTL0 || ADC14_CTL0_ENC | ADC14_CTL0_SC;
n++;
如果(n=5万)
{
N=0;
}
TIMER32_1->INTCLR || BIT0;//清除Timer32中断标志
//禁用计时器和中断
TIMER32_1->CONTROL &=~(TIMER32_CONTROL_ENABLE |TIMER32_CONTROL_IE);
L= 1;
}
2)如果我正在从我的代码中删除l=1,则计数器n不是增量
这是我的代码:-
(GPIO引脚设置和ADC设置与上述代码相同)
同时(1)
{
// Timer32设置为定期,自由运行,32位,无预缩放
TIMER32_1->CONTROL = TIMER32_CONTROL_SIZE | TIMER32_CONTROL_OneShot;
//加载计时器32计数器,带初始值
TIMER32_1->load= 0xFFFFFF;
//在NVIC中启用Timer32中断
__enable_IRQ();
NVIC->ISER[0]=1<<(T32_INT1_IRQn)和31);
//从ISR退出时禁用睡眠
SCB->SCR &=~SCB_SCR_SLEEPONEXIT_MSK;
//启动Timer32并启用中断
TIMER32_1->CONTROL |= TIMER32_CONTROL_ENABLE | TIMER32_CONTROL_IE;
//输入LPM0并等待定时器中断唤醒
//__sleep();
//__no_operation();
M++;
如果(m>5万)
{
M=0;
}
}
void T32_INT1_IRQHandler (void)
{
// p1->out ^= BIT0;//切换WFP 1.0 LED
//开始采样/转换
ADC14->CTL0 || ADC14_CTL0_ENC | ADC14_CTL0_SC;
n++;
如果(n=5万)
{
N=0;
}
TIMER32_1->INTCLR || BIT0;//清除Timer32中断标志
//禁用计时器和中断
TIMER32_1->CONTROL &=~(TIMER32_CONTROL_ENABLE |TIMER32_CONTROL_IE);
}
为什么计数器值n不递增??