打印
[DSP编程]

关于dsp LED的编程问题

[复制链接]
1861|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sunsundsp|  楼主 | 2013-8-15 13:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
首先附上程序   2812通过CPLD扩展了8路的LED灯,程序运行没问题,键盘还没有接的所以可以认为是全0,取反之后应该是1,所以全亮。可是当我将while循环中的LED=~KEYSCAN改成LED=0x80,8个灯还是全亮。
请问我哪里错了??

#include "DSP281x_Device.h"
#include "example_nonBIOS.h"   
#define LED (*((unsigned int *)0x4400))
#define KEY (*((unsigned int *)0x5800))
Uint16 KEYSCAN = 0;
void User_Init(void);
/**********************************************************************
* Function: main()
*
* Description: Main function for F281x example.
**********************************************************************/
void main(void)
{
    /*** CPU Initialization ***/
InitSysCtrl();  // Initialize the CPU (FILE: SysCtrl.c)
InitXintf();  // Initialize the external memory interface (FILE: Xintf.c)
     /*** Initialize the SYSTEM ***/
    User_Init();
   
    SetDBGIER(IER);  // Configure the DBGIER for realtime debug        
    EINT;    // Enable global interrupts and realtime debug
    asm(" CLRC INTM, DBGM");
   
/*** Main Cycle ***/
while(1)  
{
  KEYSCAN = KEY;

  LED =~ KEYSCAN;;//取反运算符~

}// End of while(1)
   
}// End of main()

void User_Init(void)
{  
/*** Initialize the interrupts ***/
//InitXintrupt();  //Initialize the external interrupts(File: Xintrupt.c)
IFR &= 0x0000;  //Clear all interrupt flag  
}// End of Init_main()

相关帖子

沙发
sunsundsp|  楼主 | 2013-8-15 14:22 | 只看该作者
错了,LED是共阳极的 应该是低电平点亮 ,

使用特权

评论回复
板凳
zhangmangui| | 2013-8-15 21:13 | 只看该作者
你有没有研究过DSP和CPLD之间通讯的关系  

使用特权

评论回复
地板
sunsundsp|  楼主 | 2013-8-16 08:52 | 只看该作者
zhangmangui 发表于 2013-8-15 21:13
你有没有研究过DSP和CPLD之间通讯的关系

没有,其实问题我已经解决了,就是不知道原理是什么,我先定义了一个Uint16 LEDControl=0;
然后再while循环中先让LEDControl=某个值,在LED=LEDControl; 这样就能正常控制LED灯的亮灭了。

使用特权

评论回复
5
zhangmangui| | 2013-8-16 09:06 | 只看该作者
sunsundsp 发表于 2013-8-16 08:52
没有,其实问题我已经解决了,就是不知道原理是什么,我先定义了一个Uint16 LEDControl=0;
然后再while循 ...

你上面的代码是把按键值取反赋给了LED   可能是按键值没有变化而已
LED的这个映射地址就是CPLD给定的  

使用特权

评论回复
6
sunsundsp|  楼主 | 2013-8-16 09:40 | 只看该作者
zhangmangui 发表于 2013-8-16 09:06
你上面的代码是把按键值取反赋给了LED   可能是按键值没有变化而已
LED的这个映射地址就是CPLD给定的   ...

那为什么不能直接赋值给LED呢?比如说LED=0x80,第一个灯灭其他灯亮?

使用特权

评论回复
7
zhangmangui| | 2013-8-16 10:08 | 只看该作者
sunsundsp 发表于 2013-8-16 09:40
那为什么不能直接赋值给LED呢?比如说LED=0x80,第一个灯灭其他灯亮?

那就说明你的LED灯是低电平点亮啊  80不就是10000000吗   

使用特权

评论回复
8
sunsundsp|  楼主 | 2013-8-16 10:58 | 只看该作者
zhangmangui 发表于 2013-8-16 10:08
那就说明你的LED灯是低电平点亮啊  80不就是10000000吗

是啊,这个我知道,你可能没明白我的意思
我在while语句中 LED=0X80;
但是灯并没有如期的亮灭。但是我在while语句中
LEDControl=0x80;
LED=LEDControl;这样才能得到预期的结果。
我想问为什么会这样

使用特权

评论回复
9
zhangmangui| | 2013-8-16 11:44 | 只看该作者
sunsundsp 发表于 2013-8-16 10:58
是啊,这个我知道,你可能没明白我的意思
我在while语句中 LED=0X80;
但是灯并没有如期的亮灭。但是我在w ...

哦  明白了  你这样吧   *LED = 0x80试试看

使用特权

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

本版积分规则

29

主题

122

帖子

2

粉丝