打印

一个简单的方波程序怎么出不来呢?

[复制链接]
3299|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
alleluia|  楼主 | 2007-7-9 12:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用2407写了一个产生方波的简单程序,但是烧进去后发现出不来波形,不知道是怎么回事,难道是我的程序错了吗?各位能帮我看看是怎么回事吗?

//这是主程序
#include "DSP2407A.h"

#define uint unsigned int
#define uchar unsigned char

uint cn; //计数次数

//Iintial system configure  
void  InitSys(void)
{
        
    asm (" clrc     OVM");    
    asm (" clrc     CNF");    //B0--数据存储器
    *SCSR1 = 0x81FE;
    *WDCR = 0x0E8;                
    *IMR = 0x0001;    
    *IFR = 0x0FFFF;    
    *MCRA = 0x0000;    //配置成一般IO口  
    *PBDATDIR = 0x0FFFF;   //PB为输出1
}

int main(void)
{
    InitSys();
    asm (" setc     INTM");  //关中断

    while (1)
    {
        //PB口产生一个方波
        *PBDATDIR = 0x0FF00;  //PB输出0
            for(cn=0; cn<35000; cn++){;} //延时
        *PBDATDIR  =0x0FFFF;  //PB输出1
            for(cn=0; cn<35000; cn++){;}    
        //PS:把0x0ff00换成0xff00也能通过编译,奇怪了
    }
    return 0;
}


//这是cmd配置文件

MEMORY
{
  PAGE 0:
        VECS            origin = 0000h,        length = 0040h
        FLASH:          origin = 0100h,         length = 0F00h
        SARAM_P:        origin = 8100h,        length = 1000h   

  PAGE 1:
        B2:             origin = 0060h,        length = 020h
        B0:             origin = 200h,         length = 100h
        B1:             origin = 300h,         length = 100h
        SARAM_D:        origin = 0800h,        length = 0800h
        EXT_RAM:        origin = 8000h ,       length = 8000h 
}

SECTIONS
{
        .vectors:        > VECS          PAGE 0
        .text:          > FLASH         PAGE 0
        .data:          > FLASH         PAGE 0
        .bss:           > SARAM_D       PAGE 1
        .stack:          > SARAM_D       PAGE 1
        .buffer:         > SARAM_D       PAGE 1
}

相关帖子

沙发
chen3bing| | 2007-7-9 17:57 | 只看该作者

re

你那样设置是输入,不是输出.

使用特权

评论回复
板凳
chen3bing| | 2007-7-9 18:04 | 只看该作者

RE

对不起,看错了.

使用特权

评论回复
地板
alleluia|  楼主 | 2007-7-9 18:12 | 只看该作者

结果出来了,但我搞不懂,跟复位有关吗

 *PBDATDIR = 0x0FFFF;   //PB为输出1 
上面这句话是输入吗?

经过一下午调试,结果出来了,不过原因很复杂,至今我也没搞明白,不知道有人知道不:
我用的电路板中是将MP/MC#置1的(不知道跟这有没有关系),然后我加了一段向量表
/********************
文件vectors.asm
***********************

     .title "vectors.asm" 
     .ref   _c_int0, _nothing
     .sect    ".vectors"

reset:   b    _c_int0       
int1:    b    _nothing     
int2:    b    _nothing  
int3:    b    _nothing  
int4:    b    _nothing   
int5:    b    _nothing 
int6:    b    _nothing      

在主程序中再加入
void interrupt nothing()
{
     return;
}
这样的话经过编译--烧写后,如果马上测PB口的话也是出不来的,必须将仿真器拔掉,再将电源关掉,重新上电后PB口就会出现方波了,所以我怀疑是不是跟复位之类的有关,不知道各位知道否?

使用特权

评论回复
5
tjsheep| | 2007-7-10 10:58 | 只看该作者

那就是有没有关掉的中断一直在发生,所以一开始程序跑飞

使用特权

评论回复
6
alleluia|  楼主 | 2007-7-10 11:37 | 只看该作者

没有关掉的中断在哪呢?

没有关掉的中断在哪,看不出来;程序一开始跑飞是因为一开始就进入某个没有关掉的中断吗

使用特权

评论回复
7
zhaoxinzxzx| | 2007-7-10 23:10 | 只看该作者

插仿真器的时候程序运行了吗?

程序烧入到DSP里后要复位一下,然后按F5运行程序。

MP/MC#设置为1,那程序地址空间不是在片外了吗?如果片外没有程序存储器的话应该运行不起来才对啊!

使用特权

评论回复
8
alleluia|  楼主 | 2007-7-11 18:23 | 只看该作者

搞错了

不好意思,搞错了,MP/MC#确实接地了,呵呵~

使用特权

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

本版积分规则

2

主题

21

帖子

1

粉丝