微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > 通过Timer1的compare event来启动ADC的问题

通过Timer1的compare event来启动ADC的问题

时间:10-02 整理:3721RD 点击:

我尝试用Timer 1 channel 0的compare event来触发ADC 的sequence采样。

在调试的时候,从IAR里看到TIMER1已经启动,尝试放个中断进去也能被触发。

但是在IAR里查看ADC结果寄存器的读数一直是零。ADC应该是没有启动,用来读取ADC结果的DMA也没有被触发。

寄存器配置如下:

T1STAT = ~T1STAT_CH0IF;

    // Set individual interrupt enable bit in the peripherals SFR.
    //T1CCTL0 |= T1CCTLn_IM;      // Enable interrupt on channel 0.
    /*T1CCTL1 &= ~T1CCTLn_IM;     // Disable interrupt on channel 1.
    T1CCTL2 &= ~T1CCTLn_IM;     // Disable interrupt on channel 2.
    T1CCTL3 &= ~T1CCTLn_IM;     // Disable interrupt on channel 3.
    T1CCTL4 &= ~T1CCTLn_IM;     // Disable interrupt on channel 4.
    T1OVFIM = 0;                // Disable overflow interrupt.*/

    // Enable Timer 1 interrupts by setting [IEN1.T1IE=1].
    //T1IE = 1;
	
    //global inten
    //EA = 1;
    
    //test the adc interruption
    //IEN0 |= 0X02;
    
    
    
    //set I/O state
    //alternative 0
    /*PERCFG &= ~(0x40); //alternative control 4 timer 1
    P2DIR =(P2DIR & ~(0xc0)) | 0x80; //alternative priority:1000 0000
    P0SEL |= 0x04; //set P0_2 as peripheral
    P0DIR |= 0x04; //Set p0.2 as output*/
    
    //alternative 1
    PERCFG |= 0x40; // Select Timer 1 Alternative 1 location //x1xx xxxx
    P2SEL = (P2SEL & ~0x10); // Give priority to Timer 1 //xxx0 xxxx
    P1DIR |= 0x04;  // Set P1.2 to output
    P1SEL |= 0x04;  // Set P1.2 to peripheral
    
    // Set channel 0 to compare mode and to toggle on compare.
    T1CCTL0 = ((T1CCTL0 & ~T1CCTLn_CMP) | T1CCTLn_CMP_TOG_ON_CMP | T1CCTLn_MODE) & ~T1CCTLn_IM; //0

    // Set compare register of channel 0 to 32767 ( 0xFFFF / 2 ).
    T1CC0L = 0xE8;
    T1CC0H = 0x03;   

    // Set prescaler divider value to 32 to get a tickspeed of 500 kHz and
    // set Timer 1 to free running mode.
    T1CTL = (T1CTL & ~(T1CTL_MODE | T1CTL_div)) | T1CTL_MODE_MODULO | T1CTL_div_32;
    //now timer 1 starts

adc部分的寄存器配置如下:

APCFG |= 0x01; //P0_0 as adc input, this would override the P0SEL
     
    // Set [ADCCON2.SREF/Sdiv/SCH] bits according to ADC configuration.
    ADCCON2 =  0x00 | ADCCON2_Sdiv_512 | ADCCON2_SCH_TEMPR;      //note that the ref is set to internal reference

    // Set [ADCCON1.STSEL] to continues conversion.
    ADCCON1 = (ADCCON1 & ~ADCCON1_STSEL) | ADCCON1_STSEL_T1C0_CMP_EVT; //Set STSEL and leave other original

请问是基于CC2541的什么示例代码开发的?

SimpleBLEPeripheral。这些寄存器的初始化是放在simpleBLEPeripheral task的按键处理函数里的。不过这个好像关系不大?

请问ADC和DMA的宏定义都打开了吗?

预处理里定义了HAL_DMA=TRUE和HAL_ADC=TRUE啊

如果不用timer来触发,直接在初始化的时候就触发,是否都能正常工作?如果可以,对比检查一下时序,以及看看是不是有些操作没有做。如果不行,说明初始化就有问题,可以参考sensortag的source code来检查。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top