打印

dsp新手请教 GPIO操作

[复制链接]
1413|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
XLDZZ|  楼主 | 2011-2-8 16:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小弟正在做个东西 本来想用单片机来做
但是单片机的处理速度不够 不能计算大密度的数据
后来改用DSP(C2000) 但是在学习DSP过程中遇到了些问题
故前来请教各位师傅

代码如下:编译顺利通过,CMD文件采用开发板提供的(不会有问题的)
原来的想法是把PWM6这个PIN 先拉低延时后在拉高
但是程序是下载到DSP中了 但是PWM6这条PIN一直死高
好像没什么反应
MCRA     我已经设置成普通IO了。
PBDATDIR 方向寄存器我已设置为输出
不知道错在哪了 还请高手指点



#include    "f2407_c.h"
void delay();
void intial()
{
asm(" setc SXM ");//允许符号扩展
asm(" clrc OVM ");//结果正常益处
asm(" clrc CNF ");//BO块映射到数据区
asm(" setc INTM");//禁止所有中断
*SCSR1=0x4002;//4Xfin 关EVA,EVB IDLE1 输出WDCLK
*SCSR2=0x6f;//至少11个周期 软件禁止看门狗 XMIF正常驱动 禁止引导RON MP模式 SRAM被映射到程序和数据区
*WDCR=0x0A8;//禁止看门狗
*WDKEY=0x5555;
*WDKEY=0xaaaa;
}

main(  )
{
intial();
while(1)
{
asm(" setc XF ");
delay();
asm(" clrc XF ");
delay();
*MCRA=0xf7ff;//PWM6为普通IO 其他专用
*PBDATDIR=0x400 ;   //PWM6为输出,其他输入,初始为0
delay();
     while(1)
    {
     *PBDATDIR=0x400;     
      delay();
        *PBDATDIR=0x408;
         delay();
       }
}
}
void delay()
{unsigned int i,j;
for(i=0;i<=1000;i++)
   {
   for (j=0;j<=200;j++)
   ;
  }
}
interrupt void nothing()
{
return;
}

相关帖子

沙发
Wayner| | 2011-2-8 18:19 | 只看该作者
帮顶,我也不会

使用特权

评论回复
板凳
3B1105| | 2011-2-8 20:53 | 只看该作者
兄弟你断点调试一下

使用特权

评论回复
地板
XLDZZ|  楼主 | 2011-2-9 00:23 | 只看该作者
最大的可能是没有加定义中断和复位的ASM文件

所以DSP复位后找不到地址 明天加上这个ASM文件 在试试

我会把结果告诉本论坛内初学dsp的菜鸟们

使用特权

评论回复
5
XLDZZ|  楼主 | 2011-2-9 10:42 | 只看该作者
怪事  我把vectors.asm 加入到工程中  debug下拉菜单中出现了 go main
单步运行下 死在for循环中

使用特权

评论回复
6
XLDZZ|  楼主 | 2011-2-9 11:36 | 只看该作者
死在for循环中的问题解决了 大概是变量太大 执行的时间比较长
新问题如下:
问题1:
照我的理解 嵌套在第二层的for循环变量j 应该=20时 满足j<=20的条件
这时应该跳出for循环 但是要等到j=21时才跳出

问题2
在程序中,给寄存器赋值。不能像单片机开发那样直接=0xxxx吗,我直接这样写
在单步中数据好像只有几位是对的,其他不对。改成*PBDATDIR=*PBDATDIR&0x400
数据才对了 也是怪事。
问题3
明明我写的是*PBDATDIR=*PBDATDIR&0x400,但单步看数据变换的是*PDDATDIR
而且变换的数据不是我赋的值,但我看了头文件的定义 PBDATDIR的地址没有错误

以上还请高手指点一二
void delay()
{unsigned int i,j;
for(i=0;i<=2;i++)
          {
          for (j=0;j<=20;j++)
          ;
        }
}

使用特权

评论回复
7
XLDZZ|  楼主 | 2011-2-10 13:41 | 只看该作者
SCSR1的ILLADR被置1  难道是CMD有问题

有高手知道怎么解决吗

使用特权

评论回复
8
XLDZZ|  楼主 | 2011-2-10 16:44 | 只看该作者
现在LED能闪了 我把看门狗打开了  只要把*WDCR=0x0A8 改成E8就OK了
但是SCSR1的ILLADR还是被置1

使用特权

评论回复
9
XLDZZ|  楼主 | 2011-2-11 19:07 | 只看该作者
问题找到了 是丝印层不对 把PWM2标成12
现在对了 只是DSP对IO寄存器的操作速度好像比较慢

使用特权

评论回复
10
6019赵文| | 2011-2-12 11:41 | 只看该作者
恭喜楼主

使用特权

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

本版积分规则

64

主题

182

帖子

0

粉丝