音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

請問dsp2812中使用ADC的一個問題

作者:myboss 欄目:DSP技術(shù)
請問dsp2812中使用ADC的一個問題
請問各位大俠,我在使用2812的ADC時出現(xiàn)了一個問題,不知怎么解決:
采用雙序列方式的SEQ2進行ADC采樣,發(fā)現(xiàn)我的程序中adc結(jié)果寄存器里的結(jié)果值根本不對,而同樣的硬件設(shè)置,如果換成雙序列的SEQ1的ADC口進行采樣結(jié)果就對了,不知道什么原因,是SEQ2不能單獨這樣用嗎?請大俠們指點,在下感激不盡.
相關(guān)程序如下:
interrupt void adc_isr(void);    //using ADC interrupt ONLY to execute PROCESS in maincontrol
main()
{
    SysCtrlRegs.HISPCP.all = 0x3;    // HSPCLK = SYSCLKOUT/6
    InitAdc();    // DSP28_Adc.c

    PieVectTable.ADCINT  = &adc_isr;    
    

    PieCtrlRegs.PIEIER1.bit.INTx6 =1;              //enable  // Enable CPU Interrupt 3
    IER |= M_INT1;


    // Configure ADC
    //AdcRegs.ADCTRL3.bit.SMODE_SEL=0x0;        //設(shè)置連續(xù)采樣方式
    AdcRegs.ADCMAXCONV.all = 0x0030;       // Setup 4 convs on SEQ2
    AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x9; // Setup ADCINB1 as 1st SEQ1 conv
    AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0xA; // Setup ADCINB2 as 2nd SEQ1 conv.
    AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0xB; // Setup ADCINB3 as 1st SEQ1 conv.
    AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x8; // Setup ADCINB0 as 2nd SEQ1 conv.
    AdcRegs.ADCTRL2.bit.EVB_SOC_SEQ2 = 1;  // Enable EVASOC to start SEQ2
    AdcRegs.ADCTRL2.bit.INT_ENA_SEQ2 = 1;  // Enable SEQ1 interrupt (every EOS)



//Initalize EVB Timer4 to trigger ADC interrupt
    EvbRegs.T4PR = 0x07A1;                 //Setup period register;
    EvbRegs.T4CNT = 0x0000;                //Timer4 counter;
    EvbRegs.GPTCONB.bit.T4TOADC = 2;       //Enable EVASOC in EVB,通用定時器周期中斷啟動ADC;
    EvbRegs.T4CON.all = 0x1742;            //Enable timer2 compare (upcount mode);
                                           //SAMPLE rate=150MHZ/(6*0x07A1*128)=100HZ.Timer2 is used by SAMPLE base;
                                           //150/6*61A8=1000hz; accurately is 1092hz;                                                // count frequency=150MHZ/(6*128)=195312.5HZ
       AdcRegs.ADCTRL1.bit.CPS=1;                //設(shè)定ADC內(nèi)核時鐘預(yù)定標,對外設(shè)時鐘HSPCLK二分頻
       AdcRegs.ADCTRL3.bit.ADCCLKPS=4;            //set ADCCLK = HSPCLK/[8*(ADCTRL1][7]+1)]=(150/6/16)MHz

}


interrupt void  adc_isr(void)
{
*RFPressure=AdcRegs.ADCRESULT8;

        *LFPressure=AdcRegs.ADCRESULT9;
        *RRPressure=AdcRegs.ADCRESULT10;
        *LRPressure=AdcRegs.ADCRESULT11;
        RFPressure++;
        LFPressure++;
        RRPressure++;
        LRPressure++;
    EvbRegs.EVBIFRB.bit.T4CINT = 1;           // reset T4C INT ;
    AdcRegs.ADCTRL2.bit.RST_SEQ2 = 1;         // Reset SEQ2;
    AdcRegs.ADCST.bit.INT_SEQ2_CLR = 1;        // Clear INT SEQ2 bit;
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;   // Acknowledge interrupt to PIE;
    return;
}

2樓: >>參與討論
myboss
dsp的型號是TMS320LF2812DSP,謝謝
 
3樓: >>參與討論
hotpower
雖然還沒時間真正搞2812,但樓主對位域的理解好象有些問題
    AdcRegs.ADCMAXCONV.all = 0x0030;       // Setup 4 convs on SEQ2
    AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x9; // Setup ADCINB1 as 1st SEQ1 conv
    AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0xA; // Setup ADCINB2 as 2nd SEQ1 conv.
    AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0xB; // Setup ADCINB3 as 1st SEQ1 conv.
    AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x8; // Setup ADCINB0 as 2nd SEQ1 conv.
    AdcRegs.ADCTRL2.bit.EVB_SOC_SEQ2 = 1;  // Enable EVASOC to start SEQ2
    AdcRegs.ADCTRL2.bit.INT_ENA_SEQ2 = 1;  // Enable SEQ1 interrupt (every EOS)



xxx.xxx.all應(yīng)該選擇16位數(shù)值.
而yyy.yyy.bit.bbb應(yīng)該只能選擇0或1吧~~~

4樓: >>參與討論
myboss
謝謝,但是好像不是這個問題
AdcRegs.ADCCHSELSEQ1的結(jié)構(gòu)是這樣定義的:
struct ADCCHSELSEQ1_BITS {
    Uint16  CONV00:4;
    Uint16  CONV01:4;
    Uint16  CONV02:4;
    Uint16  CONV03:4;
};

union  ADCCHSELSEQ1_REG{
   Uint16             all;
   struct ADCCHSELSEQ1_BITS  bit;
};
AdcRegs.ADCCHSELSEQ1.bit.CONV00-03的范圍是0x0-0xf;

而AdcRegs.ADCMAXCONV的定義是:
struct ADCMAXCONV_BITS {
    Uint16  MAX_CONV:7;          // 6:0   Max NUMBER of conversions
    Uint16  rsvd1:9;             // 15:7  reserved
};

union ADCMAXCONV_REG {
   Uint16             all;
   struct ADCMAXCONV_BITS  bit;
};
AdcRegs.ADCMAXCONV.all的范圍是0x0000-0x007f


還是前面的問題,請用過ADC的SEQ2的大俠指教,不勝感激!

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
自制的高速USB2.0DSP仿真器
請問D/A與DSP 的區(qū)別???
有想學(xué)DSP的嗎?這是我自己做的板子
I2C總線能和串口互連嗎?
求教,關(guān)于bf533EZ-Kits上的fiash接口的時鐘
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號