我用的是周立功的lm3s8962的开发板.
我使用了两个定时器0和1,定时器0 4秒一次触发ADC,定时器1 1秒一次触发中断(中断程序是空的),程序如下:
void TIMER0_Init(void)
{
SysCtlPeripheralEnable( SYSCTL_PERIPH_TIMER0 ); /* 使能定时器0外设 */
GPIOPinTypeTimer(TIMER0_BASE, TIMER_A);
TimerConfigure(TIMER0_BASE, TIMER_CFG_32_BIT_PER); /* 设置定时器0为周期触发模式 */
TimerLoadSet(TIMER0_BASE, TIMER_A, 4*SysCtlClockGet() ); /* 设置定时器装载值:定时4秒 */
TimerControlTrigger(TIMER0_BASE, TIMER_A, true); /* 使能触发ADC */
TimerEnable(TIMER0_BASE, TIMER_A); /* 使能定时器0 */
}
/*********************************************************************************************************
*********************************************************************************************************/
void TIMER1_Init(void)
{
SysCtlPeripheralEnable( SYSCTL_PERIPH_TIMER1 ); /* 使能定时器1外设 */
GPIOPinTypeTimer(TIMER1_BASE, TIMER_A);
TimerConfigure(TIMER1_BASE, TIMER_CFG_32_BIT_PER); /* 设置定时器1为周期触发模式 */
TimerLoadSet(TIMER1_BASE, TIMER_A, 1*SysCtlClockGet() ); /* 设置定时器装载值:定时1秒 */
TimerIntEnable(TIMER1_BASE, TIMER_TIMA_TIMEOUT); /* 设置定时器为溢出中断 */
IntEnable(INT_TIMER1A); /* 使能定时器1外设 */
TimerEnable(TIMER1_BASE, TIMER_A); /* 使能定时器1 */
ADC的初始化程序如下:
void ADC_Init(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC); /* 使能ADC模块的时钟 */
SysCtlADCSpeedSet(SYSCTL_ADCSPEED_125KSPS); /* 125KSps采样率 */
ADCSequenceDisable(ADC_BASE, 0); /* 禁止所有采样序列 */
TIMER0_Init();
TIMER1_Init();
IntEnable(INT_ADC0); /* 使能AD中断 */
ADCIntEnable(ADC_BASE, 0); /* 使能AD中断模块 */
ADCSequenceConfigure(ADC_BASE, 0, ADC_TRIGGER_TIMER, 0);
ADCSequenceStepConfigure(ADC_BASE, 0, 0, ADC_CTL_CH0 );
ADCSequenceStepConfigure(ADC_BASE, 0, 1, ADC_CTL_CH1 );
ADCSequenceStepConfigure(ADC_BASE, 0, 2, ADC_CTL_TS | ADC_CTL_IE|ADC_CTL_END);
ADCSequenceEnable(ADC_BASE, 0); /* 使能采样序列0 */
我使用了两个定时器,但只有0触发ADC,可程序运行结果是1秒采样一次(应该是4秒一次).如果我只初始化定时器0,那么是4秒采样一次,这是为什么呢?
难道只要使用了定时器触发ADC,其他定时器就不能用了?或者会产生干扰?
[
本帖最后由 zhengqieqie 于 2011-8-16 13:52 编辑 ]
此帖出自
小平头技术问答
如果外部晶振低于 16Mhz,要启用 PLL。
一周热门 更多>