打印

请教2812问题,自己做的板子,调试出现问题

[复制链接]
6133|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
takeshic|  楼主 | 2008-6-17 20:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天刚拿到板子,马上焊了最小系统,连上JATG程序下载正常,利用系统的时钟编写了一个定时器中断交替点亮2个LED的程序。程序在瑞泰2812实验箱上运行正常,可以在LED的驱动引脚上得到一个方波信号。说明程序运行正常,可以驱动LED灯闪烁运行。程序下载到开发板运行,给DSP供电的电源芯片ASM1117-5开始温度升高。运行程序,灯没有被驱动。发现2812芯片,与2812芯片供电电源芯片ASM1117-5温度升高到烫手,给外设供电的ASM1117-5没有发现温度大幅升高。给发迅速停止程序运行,芯片温度降低。可以推测为在2812开始运行时,电源芯片电流急剧增大。
附录程序
#include "DSP281x_Device.h"     // DSP281x Headerfile Include File
#include "DSP281x_Examples.h"   // DSP281x Examples Include File

// 中断服务程序函数原型声明
interrupt void cpu_timer0_isr(void);

//*定义的各个外设寄存器的地址*//
#define LEDS *(int *)0xc0000              
//#define CTRGR *(int *)0x108000
//#define CTRLCDCMDR *(int *)0x108001
//#define CTRKEY *(int *)0x108001
//#define CTRLCDCR *(int *)0x108002
//#define CTRCLKEY *(int *)0x108002
//#define CTRLCDLCR  *(int *)0x108003
//#define CTRLCDRCR *(int *)0x108004
//#define CTRLA *(int *)0x108005
//#define CTRLR *(int *)0x108007
#define        LED1_ON        GpioDataRegs.GPFDAT.bit.GPIOF6=0
#define        LED1_OFF    GpioDataRegs.GPFDAT.bit.GPIOF6=1
#define        LED2_ON        GpioDataRegs.GPFDAT.bit.GPIOF7=0
#define        LED2_OFF    GpioDataRegs.GPFDAT.bit.GPIOF7=1

void Gpio_select(void);

//声明全局变量
int i=0,nCount;
unsigned int uLBD,z;

void main(void)
{   
    
//    unsigned int uPort8000;

   InitSysCtrl();                   //初始化cpu

   DINT;                            //关中断

   InitPieCtrl();                   //初始化pie寄存器
   

   IER = 0x0000;                    //禁止所有的中断
   IFR = 0x0000;                    //清除所有的中断标志CPU级


   InitPieVectTable();              //初始化pie中断向量表,使中断指向可知状态


   EALLOW;  // This is needed to write to EALLOW protected registers
   PieVectTable.TINT0 = &cpu_timer0_isr;      //指定中断服务子程序
   EDIS;    // This is needed to disable write to EALLOW protected registers

       CpuTimer0.RegsAddr = &CpuTimer0Regs;    
    CpuTimer0Regs.PRD.all  = 0xffff;          //定时计数器最大周期
    CpuTimer0Regs.TPR.all  = 0x0010;          //定时器预定标寄存器,4分频
    CpuTimer0Regs.TIM.all  = 0;               //定时计数器
    CpuTimer0Regs.TPRH.all = 0;               //定时器预定标寄存器
    // 确定定时器停止:
    CpuTimer0Regs.TCR.bit.TSS = 1;            //定时器停止状态位,停止
    CpuTimer0Regs.TCR.bit.SOFT = 1;           //CPU定时器仿真模式(自由运行)
    CpuTimer0Regs.TCR.bit.FREE = 1;           //CPU定时器仿真模式(自由运行)
    // 重新使能定时器:
    CpuTimer0Regs.TCR.bit.TRB = 1;            //定时器重新装载控制位
    CpuTimer0Regs.TCR.bit.TIE = 1;            //定时器中断使能位
    // 初始化定时器中断计数器:
    CpuTimer0.InterruptCount = 0;              //定时器中断计数器     


   StartCpuTimer0();                         //启动定时器0

// Enable CPU INT1 which is connected to CPU-Timer 0:
   IER |= M_INT1;

// Enable TINT0 in the PIE: Group 1 interrupt 7
   PieCtrlRegs.PIEIER1.bit.INTx7 = 1;

// Enable global Interrupts and higher priority real-time debug events:
   EINT;                                     // Enable Global interrupt INTM
   ERTM;                                     // Enable Global realtime interrupt DBGM
   //CTRGR=0;                                 // 初始化ICETEK-CTR
   //CTRGR=0x80;
   //CTRGR=0;
   //CTRLR=0;                                   // 关闭东西方向的交通灯
   //CTRLR=0x40;                            // 关闭南北方向的交通灯
  //uPort8000=CTRCLKEY;
//    Gpio_select();        // Toggle I/Os  using DATA register for ever
 
     while ( 1 )
    {
        Gpio_select();        // Toggle I/Os  using DATA register for ever    
    }




//interrupt void cpu_timer0_isr(void)
//{  //int j,k; 
//   z = CpuTimer0.InterruptCount++;

   // Acknowledge this interrupt to receive more interrupts from group 1
//   PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;  //清除中断标志
//   CpuTimer0Regs.TCR.bit.TIF = 1;           //重启,计数器递减到零时会置位,定时器中断标志
//   CpuTimer0Regs.TCR.bit.TRB = 1;           //定时器重新装载PRD寄存器周期值,
                                            //并且PSC装载定时器分频寄存器TDDR中的值
//   if ( nCount==0 )     
//   {
//        LEDS=uLBD;
//        uLBD++; uLBD%=16;
//   }
//   nCount++; nCount%=194;                   //取余运算

//}

void Gpio_select(void)
{
     EALLOW;
     
    GpioMuxRegs.GPAMUX.all= 0x0330;       //设置GPIOA9,8,5,4为外设功能,4,5为PWM,8,9为编码器解码;
    GpioMuxRegs.GPBMUX.all= 0x0300;       //设置GPIOB8,9为外设功能,8,9为编码器解码;   
    GpioMuxRegs.GPDMUX.all= 0x0000;       //设置为GPIO
    GpioMuxRegs.GPFMUX.all= 0x003F;       //设置GPIOF5,4为SCI,设置GPIOF3,2,1,0为SPI;         
    GpioMuxRegs.GPEMUX.all= 0x0000;       //设置为GPIO
    GpioMuxRegs.GPGMUX.all= 0x0030;       //设置GPIOG5,4为SCI;
                                        
    GpioMuxRegs.GPADIR.all= 0;              // GPIO作为输出口
    GpioMuxRegs.GPBDIR.all= 0x0012;         // GPIOB2,4作为输入口 
    GpioMuxRegs.GPDDIR.all= 0;
    GpioMuxRegs.GPEDIR.all= 0x0003;          // GPIOE0,1作为输入口
    GpioMuxRegs.GPFDIR.all= 0; 
    GpioMuxRegs.GPGDIR.all= 0;

    GpioMuxRegs.GPAQUAL.all= 0;            // Set GPIO input qualifier values
    GpioMuxRegs.GPBQUAL.all= 0;   
    GpioMuxRegs.GPDQUAL.all= 0;
    GpioMuxRegs.GPEQUAL.all= 0;
 
    EDIS;
     
}     
//===========================================================================
// No more.
//========================================
//实验现象:LED灯约每0.1S变化一下状态
unsigned int Led_Flag;

interrupt void cpu_timer0_isr(void)
{
    CpuTimer0.InterruptCount++;
       // Acknowledge this interrupt to receive more interrupts from group 1
   PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;  //清除中断标志
   CpuTimer0Regs.TCR.bit.TIF = 1;           //重启,计数器递减到零时会置位,定时器中断标志
   CpuTimer0Regs.TCR.bit.TRB = 1;           //定时器重新装载PRD寄存器周期值,
                                            //并且PSC装载定时器分频寄存器TDDR中的值
    if(Led_Flag == 1)
    {
        LED2_OFF;
        LED1_ON;
        Led_Flag = 0;
    }
    else
    {
        LED2_ON;// = 1;
        LED1_OFF;
        Led_Flag = 1;
    }
}

相关帖子

沙发
takeshic|  楼主 | 2008-6-17 20:32 | 只看该作者

原理图在这,有大侠帮帮忙,看看么,谢谢了,我在找错在

https://bbs.21ic.com/upfiles/img/20078/200782204315931.jpg

https://bbs.21ic.com/upfiles/img/20078/200782204619397.jpg

使用特权

评论回复
板凳
takeshic|  楼主 | 2008-6-17 21:03 | 只看该作者

测试TDO引脚得1.4V,本来应该拉低,1.4伏算拉低吗??

TDO    D12    127    93    O/Z    —    JTAG扫描输出,测试数据输出。在TCK的下降沿将选择寄存器的内容从TDO移出
测试TDO引脚得1.4V,本来应该拉低,1.4伏算拉低吗??

使用特权

评论回复
地板
takeshic|  楼主 | 2008-6-17 22:29 | 只看该作者

有 新进展了

换了一个程序,灯被点亮了,但是电源芯片还是热。没以前那么热。到底是哪些初始化代码导致dsp芯片发烫呢??

使用特权

评论回复
5
takeshic|  楼主 | 2008-6-17 23:08 | 只看该作者

TPS767D318發燙的原因

請教--TPS767D318發燙的原因 ,--TPS767D318
自己做了一個2812的系統(沒有外部存儲器),電源芯片使用TPS767D318,現準備開始調試,我用TI的一個例子Example_281xFlash.c試驗,當LOAD PROGRAM後,開始運行(run)時,觀測輸入直流電源的電流明顯變大(達到400~500mA),接著TPS767D318芯片就非常的燙手,請問,是不是哪里出了問題?有人建議TPS767D318加散熱器,如何加?謝謝。 


以下是 請教--TPS767D318發燙的原因 的答復 
答復1:
你測試一下芯片,可能是短路了!測電源&地! 

答復2:
引用︰xiaoxu_79 寫道︰
你測試一下芯片,可能是短路了!測電源&地! 
未上電前我測試過,沒有短路,都正常,而且已經反復用了幾次,上電都正常,就是運行程序時出現上述情況,
難道到上電後再測試是否短路嗎?

答復3:
不用加散熱片,應該是你的片子短路了 

答復4:
樓上的這麼肯定?我覺得應該沒有短路,今天又分析了一下,datasheet上介紹需要加散熱片的,我使用5v輸入,輸出為3.3v,輸入輸出壓差為1.7v,電流約為400mA,那麼弁茯軉?00mA*1.7V=600mW,我在輸入端接入一1.7歐電阻,器件的弁蚗雩茪p了些,可還需要散熱片,這個器件太小了,不知道該如何加,那位有圖參考一下,謝謝。 

答復5:
根本就不會到400ma的,除非你加了另外的器件,現在你只有DSP的話,不會到!
你關電測試就行了!上電前當然不會短路,電流到了幾百毫安後你再測!
如果你當時仔細觀察的話應該發現第一次上電時,開始電流不會那麼大的! 

答復6:
剛開始上電時,未load program時(即剛打開ccs),測試電流為120mA,當load後,點擊run,電流變大為375mA ,這時候測試,沒有發現短路啊? 

答復7:
說不定是程序的問題。DSP如果工作頻率是150MHz,再加上所有的外設時鐘都使能了的話,可能電流真有那麼大。
D318兩路輸出都可以整到1A的啊,不要怕︰) 

答復8:
我得主頻是300Mhz也沒有那麼大!不過如果你的片子一直很正常工作的話,應該也沒有事! 

答復9:
剛問過一個朋友,也在用2812,電源芯片使用318,配置基本上和我的差不多,但據他說,程序運行起來,318也不會熱,看來我的肯定是哪里出了問題,各位還有類似的經驗嗎,請提供一下,謝謝,
另外,我好像每次發貼都是兩個貼,怎麼回事?版主幫我看一下,謝謝。 

答復10:
頂一下,是不是有可能程序不合適?我使用的例程如下,見附件。 

答復11:
頂一下,我也遇到了相同的問題,剛上電但不運行程序時318也並不熱,但一旦開始運行程序時就特別燙,我現在用的主頻是150MHz,我問了一個同學,他說他的也燙,但就那麼湊合著使,我本以為主頻高時就應該燙,可在此看到有的高手說正常的應該不燙,請各位高手指點指點啊,就怕那天片子燙的受不了給燒了 

答復12:
幾天沒來,發現有和我一樣的朋友,對于這個問題,目前我的認識如下︰
一個是可能是ccs的版本和我的仿真器不兼容,我用的是瑞泰icetek-5100pp型仿真器,當初我問SEED的技術人員,說需要ccs2.21版本,可是我的是ccs2.20,但也能用。
另一個是,就是318的焊接有問題,或者哪里壞掉了,如果再找不出原因,就等它燙壞後換一片,不過,直到現在使用,一直還沒 燙壞。
各位大俠有何高見?

答復13:
我也遇到了類似的問題,我用的是tps73hd301的電源,dsp主頻300Mhz。
如果只是load程序進去,不會發熱,但是一旦run起來,就開始發燙。電流也從60ma一下上到280ma,而且我的板子上還沒有焊接其他的外圍電路,只連接了dsp和jtag口 232串口。
引用︰lianxiuxiu 寫道︰
幾天沒來,發現有和我一樣的朋友,對于這個問題,目前我的認識如下︰
一個是可能是ccs的版本和我的仿真器不兼容,我用的是瑞泰icetek-5100pp型仿真器,當初我問SEED的技術人員,說需要ccs2.21版本,可是我的是ccs2.20,但也能用。
另一個是,就是318的焊接有問題,或者哪里壞掉了,如果再找不出原因,就等它燙壞後換一片,不過,直到現在使用,一直還沒 燙壞。
各位大俠有何高見? 

答復14:
最近發現,只有當pll倍頻5,主頻150MHZ時,電流才變大,318發燙;當倍頻4以下時,電流不變化,318也就不燙了,這個怎麼解釋呢,還有就是,我將其他不用的外設時鐘關閉,也沒有作用。 

答復15:
原來以為是短路,怎麼測也每測出是短路,只好對付著用
誰然比較熱,不過沒有壞 

答復16:
我用5402 也用TPS767D318(5V轉3.3和1.8) 同樣發燙 請問什麼原因呢 系統配置如下︰5402+EPM7128+IS61LV6416+sst39VF400A+ad+da+運放+max232(TL16C550)
剛上電就有300ma多 load程序時達到500ma
大家討論下吧 郁悶中 

答復17:
應該是斷路了,其實我建議不要用318這個片子,可以用spx1117的5伏轉3.3和1.8也可以,其實上電的順序沒有那麼特別的嚴格了,我試了 沒有問題。 

答復18:
請問樓主你的問題解決了嗎

答復19:
我也認為正常的時候電源片子是不會發燙的,我有一會發現電源片子燙,結果就發現F2812已經燒了,所以各位還是小心為好! 

答復20:
我的板子也這樣的,318是比較燙,不過可以正常工作的,應該不用加散熱片。
seed2812的開發板上的電源芯片也是發燙的,一直用也沒事。 

答復21:
是不是器件壞了,換一個試試

答復22:
這個問題我已經弄清楚了,就是輸入電壓為5v,輸出有兩個電壓,一個為3.3v,一個為1.8v,5v和3v的壓差不大,但是5v和1.8v的壓差就大了,而弁茯馬滫怐瑰ㄝt與輸出電流乘積的和,所以弁茪騆

使用特权

评论回复
6
takeshic|  楼主 | 2008-6-17 23:11 | 只看该作者

我猜我这个是软件的问题

可能我使用了开发板的初始化程序,而我的板子上没有开发板那么多的资源,初始化的时候会不会导致各类中断触发呢?而使得dsp发热的?对吧?

我的xf引脚,没接上拉,是因为内部已经上拉了,应该没关系吧,pll使能。

使用特权

评论回复
7
takeshic|  楼主 | 2008-6-17 23:42 | 只看该作者

dsp已经不发热了……

确定是程序的问题

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

47

帖子

0

粉丝